配置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>();

	@Override
	public void destroy() {

	}

	@Override
	public 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);
		} else
			chain.doFilter(req, resp);
	}

	@Override
	public 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名,多個之間用","逗號隔開

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章