使Struts2與Servlet並存解決辦法 Filter轉寄Servlet

來源:互聯網
上載者:User

解決辦法:

在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);} elsechain.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(",")));}}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.