struts2和servlet共存之自定义Filter过滤
来源:互联网 发布:javascript classname 编辑:程序博客网 时间:2024/05/22 15:15
借鉴了http://blog.csdn.net/huilangeliuxin/article/details/10495403这篇文章
上面3中不做介绍了,主要讲一下自定义Filter实现过滤的这个办法,经过了自己的调整做了下整理:
项目工程如图:
1.首先建一个类做过滤器:
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;/** * 这是一个过滤servlet的filter;就是拦截servlet的处理请求,自行转向处理,而不是由struts处理。 * 此方法需要在web.xml中配置: <filter> <filter-name>redisp</filter-name> <filter-class>filters.FilterServlet</filter-class> <init-param> <param-name>includeServlets</param-name> <param-value>myservlet1,myservlet2</param-value> </init-param> </filter> <filter-mapping> <filter-name>redisp</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 并且此过滤器必须在struts2的过滤器上面。 * @author Administrator * */public class FilterServlet implements Filter {public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String target = request.getRequestURI(); //因为<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">target </span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">实际上访问地址是带工程名的,如:/web1/login.action,所以要取出后面的</span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">内容l</span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">ogin.action</span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">进行判断</span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;"></span> String[] mytarget = target.split("/"); target = mytarget[mytarget.length-1];
<span style="white-space:pre"></span>//判断取出的url是否在<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">includes过滤list中</span> if (this.includes.contains(target)) { // target取出的值则直接是verifyLogin,在web.xml中filter中的<param-value>配置即可。 // if判断请求uri最后的那部分是否包含在配置文件中,如果包含,则处理 RequestDispatcher rdsp = request.getRequestDispatcher(target); rdsp.forward(req, resp); } else { chain.doFilter(req, resp); } } private ArrayList<String> includes = new ArrayList<String>(); public void init(FilterConfig config) throws ServletException {
<span style="white-space:pre"></span>//这里在初始函数中获取到了web.xml中name为includeServlets的param-value值,多个的话用","逗号分割
<span style="white-space:pre"></span>//然后存入<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">ArrayList<String> </span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">includes 中</span> this.includes.addAll(Arrays.asList(config.getInitParameter("includeServlets").split(","))); System.out.println("生成servlet过滤器完毕!"); }}2.在web.xml如下:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name></display-name> <filter> <filter-name>redisp</filter-name> <filter-class>filters.FilterServlet</filter-class> <init-param> <param-name>includeServlets</param-name>
<span style="white-space:pre"></span><!--<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">这里是servlet的servlet-name多个的话用 逗号 分隔</span>--> <param-value>myservlet1,myservlet2</param-value> </init-param> </filter> <filter-mapping> <filter-name>redisp</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<span style="white-space:pre"></span><servlet><span style="white-space:pre"></span><servlet-name><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;">myservlet1</span></servlet-name><span style="white-space:pre"></span><servlet-class>SSO.VerifyLogin</servlet-class><span style="white-space:pre"></span></servlet><span style="white-space:pre"></span><servlet-mapping><span style="white-space:pre"></span><servlet-name>myservlet1</servlet-name><span style="white-space:pre"></span><url-pattern>/verifyLogin</url-pattern><span style="white-space:pre"></span></servlet-mapping> <span style="white-space:pre"></span><servlet><span style="white-space:pre"></span><servlet-name>myservlet2</servlet-name><span style="white-space:pre"></span><servlet-class>SSO.ExitForLogin</servlet-class><span style="white-space:pre"></span></servlet><span style="white-space:pre"></span><servlet-mapping><span style="white-space:pre"></span><servlet-name>myservlet2</servlet-name><span style="white-space:pre"></span><url-pattern>/exitforlogin</url-pattern><span style="white-space:pre"></span></servlet-mapping> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*</url-pattern> </filter-mapping> </web-app>注意1:redisp这个filter必须放在struts2的上面,因为web按顺序执行的过滤器嘛~
注意2:在配置servlet的的访问路径也就是url-pattern的时候,就不要带/了,如:servlet/myservlet1,因为会被拦截器我的方法分割开了只取出最后一个。
不过非要带也不是不可以,你取出url的后俩位然后拼在一起也可以。。。
注意3:jsp页面的访问方法如:<a href="myservlet1">退出LogOut</a>就可以了,因为通过拦截器辨别出了servlet和struts2的链接。
好了,就到这里了哈~再次感谢http://blog.csdn.net/huilangeliuxin/article/details/10495403博主的分享~
0 0
- struts2和servlet共存之自定义Filter过滤
- 让struts2和servlet共存
- struts2和servlet的共存交互问题
- struts2和servlet的共存问题
- struts2和servlet的共存问题
- servlet和struts2共存的解决方案
- 如何让struts2和servlet的共存
- struts2和servlet的共存问题
- struts2和servlet的共存问题
- 如何让struts2和servlet的共存
- struts2和servlet的共存问题
- 如何让struts2和servlet的共存
- struts2和servlet的共存问题
- struts2和servlet的共存问题
- filter过滤、servlet过滤
- Filter 可以过滤servlet jsp 和html
- struts2和servlet的共存问题以及解决
- struts2和servlet共存的几种方法
- Boxee-sources-0.9.23 MAC编译总结
- could not initialize proxy - no Sessionorg.hibernate.LazyInitializationException: failed to lazily
- 全排列函数 : next_permutation and prev_permutation
- 指针的大小到底是由谁决定?是多少?
- js 快捷键大全,并有简单使用说明
- struts2和servlet共存之自定义Filter过滤
- ffmpeg编码器+VS2008的环境配置以及视频编码过程详解
- win764 位安装 ruby on rails
- Codeforces 448B. Suffix Structures
- 一个简单的游戏服务器框架
- QT实现不规则窗体和透明窗体
- php——学习笔记,运算符优先级
- 最优乘车
- redis 性能问题排查