struts2和servlet同時用(訪問servlet時被struts2過濾器攔截問題的解決)


在同一個項目中間,如果既用到servlet有用了struts2的框架,運行項目時可能無法正常使用servlet,原因是在配置struts2的核心控制器時<url-pattern>/*</url-pattern>所致,需要定義一個過濾器,將servlet過濾,使struts2的核心控制器對servlet不起作用。注意:在xml文件中定義的servlet過濾器要寫在struts2核心控制器前面,否則還是不能使用。舉例來說,定義的過濾器文件是ReDispatcherFilter.java,只需按照該文件中注釋內容做以下配置,即可。 

 

package filters;
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 {
public void destroy() {
   // TODO Auto-generated method stub
}
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);
  
   System.out.println(target);
   if(this.includes.contains(target))
   {
    RequestDispatcher rdsp = request.getRequestDispatcher(target);
   
    System.out.println("go..............."+rdsp);
    rdsp.forward(req, resp);
   }
   else
    chain.doFilter(req, resp);
}
private ArrayList<String> includes = new ArrayList<String>();

public void init(FilterConfig config) throws ServletException {
  
   this.includes.addAll( Arrays.asList(config.getInitParameter("includeServlets").split(",")));
}
}
/*該類是定義了一個過濾器,當既用到struts2有用到servlet時,
* 必須用該過濾器對所有的servlet做一次過濾,否則servlet將無法正常運行。
* 同時在web.xml中,在定義struts的核心控制器前面添加該過濾器,添加代碼如下:
*/ 

<filter> <filter-name>redisp</filter-name> <filter-class>filters.ReDispatcherFilter(該過濾器的類名)</filter-class> <init-param> <param-name>includeServlets</param-name> <param-value>所有配置的servlet名字</param-value> </init-param> </filter> <filter-mapping> <filter-name>redisp</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM