struts整合servlet问题

先看一下struts2 的web.xml文件:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常相应,是struts2把servlet当成action了,因为servlet和action都是没有后缀的

 

解决方法目前有四种:

方法1:统一在servlet后面加上.servlet(包括web.xml配置文件中和页面上使用servlet的地方)

方法2:继承StrutsPrepareAndExecuteFilter,实现以下两个方法。

public void init(FilterConfig filterConfig) throws 
ServletException {
      ..............................

}

public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain chain) throws 
IOException, ServletException {
............................... 
if(url.contain("servlet")){
((HttpServletResponse) response).sendRedirect(redirectUrl);
}

super.doFilter(request, response, chain);

 

}

 

方法3:修改拦截页面配置
原:
<filter>
 <filter-name>struts2</filter-name>
 <filter-class>
 org.apache.struts2.dispatcher.FilterDispatcher
 </filter-class>
</filter>
<filter-mapping>
 <filter-name>struts2</filter-name>
 <url-pattern> 
/* </url-pattern>
</filter-mapping>

现:

<filter-mapping>
 
<filter-name>struts2</filter-name>
 
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
 
<filter-name>struts2</filter-name>
 
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
 
<filter-name>struts2</filter-name>
 
<url-pattern>/user/*</url-pattern>
</filter-mapping>

 

servlet的请求路径不必改变

 

方法4:在struts.xml文件中修改

posted @ 2013-03-22 20:24  眉间尺之魂  阅读(150)  评论(0编辑  收藏  举报