解决Struts2和Servlet的请求冲突
来源:互联网 发布:c语言如何输入随机数 编辑:程序博客网 时间:2024/05/16 19:15
今日开放项目,遇到老程序员用Servlet开发,新程序员用Struts2开发的情况。
开发完成后,需要进行功能集成,但,尝试多次都无法搞定。因为,两者的url-pattern,总是有相互包含的部分,所以,无法正确传递HTTP请求。
最后,突发奇想,也许自己写一个Filter放在最前面,对所有请求进行拦截,如果是Servlet的请求,则内部跳转至Servlet;其他的请求让Struts2来处理。
Filter的代码如下:
package houlei.web.support.context;import java.io.IOException;import java.util.HashSet;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;/** * 解决 Struts2 和 自定义 Servlet 的请求冲突 */public class CustomSevletFilter implements Filter {public static final String PARAM_INCLUDE_SERVLETs = "includeServlets";private static final HashSet<String> ServletPatterns = new HashSet<String>();public void destroy() {ServletPatterns.clear();}public void init(FilterConfig config) throws ServletException {String param = config.getInitParameter(PARAM_INCLUDE_SERVLETs);if (param!=null && param.trim().length()>0) {String patterns[] = param.split("\\s|\\r|\\n|\\,");for (String p : patterns) {if (p.length() > 0) {ServletPatterns.add(p);}}}}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)servletRequest;String target = request.getServletPath();if(ServletPatterns.contains(target)){RequestDispatcher rdsp = request.getRequestDispatcher(target);rdsp.forward(servletRequest, servletResponse);// 转发我们的请求,跳出FilterChain}else{filterChain.doFilter(servletRequest, servletResponse);}}}编写完自定义的Filter之后,将之集成到项目中。
web.xml文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>CustomSevletFilter</filter-name><filter-class>houlei.web.support.context.CustomSevletFilter</filter-class><init-param><param-name>includeServlets</param-name><param-value>/cAppRequest,/cAppReport</param-value></init-param></filter><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,../config/struts2.cfg.xml</param-value></init-param></filter><filter-mapping><filter-name>CustomSevletFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><description>app request to server</description><display-name>app request</display-name><servlet-name>cAppRequest</servlet-name><servlet-class>xxx.xxx.CAppRequest</servlet-class></servlet><servlet><servlet-name>cAppReport</servlet-name><servlet-class>xxx.xxx.CAppReport</servlet-class></servlet><servlet-mapping><servlet-name>cAppRequest</servlet-name><url-pattern>/cAppRequest</url-pattern></servlet-mapping><servlet-mapping><servlet-name>cAppReport</servlet-name><url-pattern>/cAppReport</url-pattern></servlet-mapping></web-app>
当然,配置文件仅仅是个样例。朋友们可以根据实际情况进行配置即可。
- 解决Struts2和Servlet的请求冲突
- Struts2.1.8 和Servlet请求冲突
- Struts2拦截了Servlet的请求解决
- struts2拦截了servlet请求的解决
- struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
- struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
- struts2和servlet同时用(访问servlet时被struts2过滤器拦截问题的解决)
- struts2和servlet的共存问题以及解决
- 解决struts2过滤器冲突的简单方法
- 解决struts2过滤器冲突的简单方法
- 解决struts2过滤器冲突的简单方法
- Struts2 的jar包冲突如何解决?
- struts2拦截servlet的请求解决办法!
- 解决maven中servlet-api.jar和容器自带的servlet-api.jar的依赖冲突
- Servlet的请求和响应
- servlet的请求和响应
- struts2 迭代器标签iterator嵌套 如何加选择性参数和名称冲突问题的解决
- Struts2与FCK整合 请求冲突的解决方法
- PHP中Header()函数设置HTTP头总结
- Android应用开发学习笔记之AlertDialog对话框
- 二叉树的顺序存储与基本操作
- sql修改表结构,出现问题,不允许保存修改
- Windb配置
- 解决Struts2和Servlet的请求冲突
- 杭电ACM3549(最大流)
- UVA 11374 Airport Express(枚举+最短路)
- HDU 4345 数学+dp
- JS实现刷新iframe的方法
- TQ2440 蜂鸣器的使用
- c++运算符重载
- 大上海,我来了
- android 获取手机语言类别