读书人

配置Struts2后怎么使用servlet

发布时间: 2012-12-24 10:43:14 作者: rapoo

配置Struts2后如何使用servlet

有时候,我们在配置了Struts2后还会想用servlet,但是默认是用不了的,都被struts2拦截了,并在struts.xml中匹配是否有该action

那么,如何使用呢?

1.新建一个filter,用于过滤servlet
import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;public class ReDispatcherFilter implements Filter {private ArrayList<String> includes = new ArrayList<String>();@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;String target = request.getRequestURI();target = target.lastIndexOf("?") > 0 ? target.substring(target.lastIndexOf("/") + 1,target.lastIndexOf("?") - target.lastIndexOf("/")) : target.substring(target.lastIndexOf("/") + 1);if (this.includes.contains(target)) {RequestDispatcher rdsp = request.getRequestDispatcher(target);rdsp.forward(req,resp);} elsechain.doFilter(req, resp);}@Overridepublic void init(FilterConfig config) throws ServletException {this.includes.addAll(Arrays.asList(config.getInitParameter("includeServlets").split(",")));}}

2.在web.xml中做适当配置,在struts2的配置前加上下面的代码:
 <filter>    <filter-name>redisp</filter-name>    <filter-class>com.kcjxkj.filter.ReDispatcherFilter</filter-class>    <init-param>      <param-name>includeServlets</param-name>      <param-value>ValidateEmail</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>redisp</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

其中,<param-value></param-value>中为web.xml中配置的要过滤的servlet名,多个之间用","逗号隔开

读书人网 >软件架构设计

热点推荐