过滤器

问题描述

二.测试Filter和servlet的生命周期(1)写一个MyServlet(实现Servlet接口),实现destroy(),init(),service()和构造方法(2)写一个MyFilter(实现Filte接口),实现destroy(),init(),doFilter()和构造方法publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{System.out.println("过滤之前");//进到过滤,开始处理,处理完成以后,让请求继续往下走,进入Servletchain.doFilter(request,response);//在Servlet完成以后,又重回过滤器响应给客户端System.out.println("过滤之后");}(3)web.xml配置<servlet><servlet-name>MyServlet</servlet-name><servlet-class>com.accp.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/MyServlet</url-pattern></servlet-mapping><filter><!--过滤器的类--><filter-name>MyFilter</filter-name><filter-class>com.accp.filter.MyFilter</filter-class></filter><filter-mapping><filter-name>MyFilter</filter-name><!--表示只过滤MyServlet这一个servlet,其他Servlet不管--><servlet-name>MyServlet</servlet-name><!--表示所有的请求都被过滤--><url-pattern>/*</url-pattern></filter-mapping>注意:filter是服务器启动就产生了,并且进行初始化,而servlet一定是有了请求才会出生和初始化,从打印的结果可以看到请求先进入filter,回去的时候又从过滤器经过.当服务器重启或者关闭,servlet先死,filter后死二.Filter应用(1).解决中文乱码问题(request和response)publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;if(request.getMethod().equalsIgnoreCase("post")){request.setCharacterEncoding("gb18030");}else{Enumerationenum=request.getParameterNames();while(enum.hasMoreElements()){Stringkey=(String)enum.nextElement();String[]values=request.getParameterValues(key);for(inti=0;i<values.length;i++){values[i]=newString(values[i].getBytes("iso8859-1"),"gb18030");}}}//必须写在过滤之前,写在之后就会失效response.setContentType("text/html;charset=gb18030");chain.doFilter(request,response);}(2).解决权限问题publicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)resp;//得到session的值Stringrole=(String)request.getSession().getAttribute("role");//拿到项目的路径,相当于"/项目名"System.out.println("-------------"+request.getContextPath());if(role==null||!role.equals("admin")){response.sendRedirect(request.getContextPath()+"/error.jsp");}chain.doFilter(request,response);}<filter><filter-name>AdminFilter</filter-name><filter-class>com.accp.filter.AdminFilter</filter-class></filter><filter-mapping><filter-name>AdminFilter</filter-name><!--注意路径--><url-pattern>/admin/*</url-pattern></filter-mapping>(3)过滤掉非法文字a.准备一个str.properties文件,把要过滤掉的字符,准备在里面u738bu516b=***u65e5u672c=****u6740u624b=*****注意这里要转码u738bu516b-->王八u65e5u672c-->日本u6740u624b-->杀手b.过滤器代码Propertiesps=null;publicvoiddoFilter(ServletRequestreq,ServletResponseresp,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)resp;//注意中文乱码的设置request.setCharacterEncoding("utf-8");Enumerationenum=request.getParameterNames();while(enum.hasMoreElements()){Stringkey=(String)enum.nextElement();String[]values=request.getParameterValues(key);for(inti=0;i<values.length;i++){//根据key,从properties中拿到值,如果不为空,则证明一定有非法字符//然后替换掉if(ps.get(values[i])!=null){values[i]=ps.getProperty(values[i]);}}}chain.doFilter(request,response);}//初始化中读取str.properties文件publicvoidinit(FilterConfigfilterConfig)throwsServletException{try{//读取str.properties文件InputStreamin=filterConfig.getServletContext().getResourceAsStream("/WEB-INF/str.properties");ps=newProperties();ps.load(in);//加载配置文件in.close();}catch(IOExceptione){e.printStackTrace();}}

时间: 2024-08-22 18:39:59

过滤器的相关文章

cookie、session和java过滤器

基础知识理解: cookie.session和过滤器通常都是用在web应用中,cookie和session用来保存一定的数据,过滤器Filter则是在浏览器发出请求之后,而后台执行特定的请求之前发生一定的作用.之所以把这三个放一起,是因为有很多时候都会是把他们结合在一起使用,例如有些登陆程序. cookie是浏览器的机制,session是服务器的机制,但是实际上cookie也是由服务器生成的,之后返回给浏览器的,并不是浏览器本身生成.当浏览器发送某个请求时,如果拥有有效的cookie则会把这个c

[算法系列之十]大数据量处理利器:布隆过滤器

[引言] 在日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中.比如在字处理软件中,需要检查一个英语单词是否拼写正确(也就是要判断 它是否在已知的字典中):在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上:在网络爬虫里,一个网址是否被访问过等等.最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新 元素时,将它和集合中的元素直接比较即可.一般来讲,计算机中的集合是用哈希表(hash table)来存储的.它的好处是快速准确,缺点是费存储空间.当集合比较小时,这个问题

JBuilder2005 Servlet开发之过滤器

过滤器可以在请求到达JSP或Servlet之前或响应返回客户端之前添加一些额外的操作.如果有多个JSP页面和Servlet都需要进行一个相同或相似的操作,我们可以把这个操作抽取到一个Servlet过滤器中,并通过匹配路径截获感兴趣JSP或Servlet. 我们举几个典型的过滤器应用的例子,读者可以推而广之: ·编码转换 乱码问题困扰了不少的Web应用程序开发者,这是因为基于Java的Web应用程序可能运行于不同的Web应用程序器.操作系统平台或硬件服务器上,不同的环境有自己默认的编码类型,在数据

JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器

一.乱码原因 ①传输方和接收方采用的编码不一致.传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码. ②Tomcat服务器默认采用的ISO8859-1编码得到参数值.虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)   二.解决办法 方法一 每次传输都手动设置编码(GET方式传输数据) 传输方 String name = URLEncoder.encode("张三","UTF-8"); String path

第九章_过滤器

9.1.Filter API 过滤器中使用的接口包括Filter.FilterConfig和FilterChain 过滤器类必须实现javax.servlet.Filter接口.这个接口提供了3个方法:init.doFilter和destroy. 当过滤器启动服务时,比如应用程序启动时,Servlet容器就会调用init方法.这个方法只调用一次,并且应该包含过滤器的初始化代码.签名如下: void init(FilterConfig filterConfig) 每次调用与过滤器相关的资源时,Se

Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器

原教程: http://cn.vuejs.org/guide/instance.html http://cn.vuejs.org/guide/syntax.html 本博文是在原教程的基础上加上实例,并尝试说明的更详细. (十)Vue实例的生命周期 如图:(我自己翻译的中文版,英文版请查看本博文顶部的,第一个链接) (八)传入的数据绑定 先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么 ①obj的值的变化,将影响Vue实例中的值的变化: ②相反一样: ③可以在

C#过滤器HttpModule

C#过滤器HttpModule的使用,如下代码示例: using System;  using System.Web;    public class HttpModule:IHttpModule  {       public void Dispose()       {       }         public void Init(HttpApplication application)       {           application.BeginRequest+=new Ev

servlet和JSP过滤器Filter

js|servlet 或许,servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器.过滤器提供了某些早期服务器所支持的非标准"servlet链接"的一种功能强大且标准的替代品.过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上.过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息.在这之后,过滤器可以作如下的选择:l 以常规的方式调用资源(即,调用servlet或JSP页面).l

更好的用户体验:过滤器(Filter)的搜索

最简单的搜索引擎不过是一个输入框,用户输入关键字.有的搜索引擎(例如谷歌)支持使用一些语法来控制搜索参数,例如逻辑控制:和.或.非等. 后来采用了过滤器(Filter)的搜索,给用户带来的更好的体验.用户甚至什么关键字也不输入,也可以找到需要的结果. 例如淘宝的搜索过滤器: AJAX技术的引入,给搜索过滤器带来了更好的体验.集合了AJAX技术后,用户无论是更改关键字还是过滤条件,搜索结果都根据用户输入实时变更. 应用过滤器可以不用跳转页面,节省了用户的时间,同时,可以很好地允许用户随时修正过滤条

使用ISAPI过滤器增强IIS的功能

作为一个WWW服务器软件,微软公司的Internet Infomation Server(IIS)简单易学,管理方便,得到了广泛的使用.您还可以通过ISAPI过滤器,进行自己定制的处理,来增强IIS的功能.ISAPI过滤器可以定制以下的处理:接收HTTP协议头预处理.发送HTTP协议头预处理.发送生数据预处理.获得生数据预处理.HTTP会话结束信息处理.自定义的安全认证机制.URL映射信息处理.日志记录处理等.灵活利用这些定制处理,您可以完成许多看似难以实现的功能,得到意想不到的效果.但是ISA