使Struts2与Servlet并存解决办法 Filter转发Servlet
生活随笔
收集整理的這篇文章主要介紹了
使Struts2与Servlet并存解决办法 Filter转发Servlet
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
解決辦法:
在Struts2過濾器前增加一個過濾器,使用過濾器轉發到servlet上
Web.xml
<filter><filter-name>JSONRPCServlet</filter-name>
<filter-class>filters.ReDispatcherFilter</filter-class>
<init-param>
<param-name>includeServlets</param-name>
<param-value>JRPC</param-value>
<!--注:JRPC為下文配置的Servlet JSONRPCServlet過濾的請求配置 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>JSONRPCServlet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--注:這里同樣需要Servlet配置,Filter會轉到該Servlet上-->
<servlet>
<servlet-name>JSONRPCServlet</servlet-name>
<servlet-class>
jcore.jsonrpc.servlet.JSONRPCServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSONRPCServlet</servlet-name>
<url-pattern>/JRPC</url-pattern>
</servlet-mapping>
過濾器的實現類:
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(",")));
}
}
尚存疑問:
jcore.jsonrpc.servlet.JSONRPCServlet是做什么的????
?
來源:
http://www.cnblogs.com/jifeng/archive/2010/08/28/1810706.html
?
轉載于:https://www.cnblogs.com/zjstar12/archive/2012/02/07/2341019.html
總結
以上是生活随笔為你收集整理的使Struts2与Servlet并存解决办法 Filter转发Servlet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可变对象与不可变对象_pyt
- 下一篇: C语言补漏(1)--- char到int