怎么设置filter的webinitparam-param

本帖子已过去太久远了,不再提供回复功能。Filter是什么?
& & & & Filter不是一个Servlet,它可以叫做Servlet链,它可以用来改变一个request,修改一个response。它虽然不能产生一个response,但可以在一个request到大Servlet之前预处理request,也可以在response离开Servlet时处理response。
具体的调用关系如下图所示。
& & & &也可以说,Filter是对Request和Response请求进行了拦截。
& & & 只对post请求有效。
新建一个TestFilter类,继承Filter类后,我们可以看到主要的几个方法。
package com.bjpowermode.drp.util.
import java.io.IOE
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
public class TestFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
用来设置filter的配置对象,只调用一次。
2)doFilter()
是最重要最核心的方法,执行Filter的工作。每一个filter从doFilter()方法中得到当前的request及response
3)destory()
返回配置对象。
Filter的生命周期
& & & 在应用启动的时候就进行装载Filter类。容器创建好Filter对象实例后,调用init()方法。接着保存进集合容器中去了等待着,用户访问资源。当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。
注意:init方法与destroy方法只会直接一次。
在实例中,我们用Filter主要是来设置字符集,防止jsp出现中文乱码现象。
如果不使用Filter,我们需要在每个jsp页面中添加如下语句:
&%@ page language=&java& contentType=&text/ charset=GB18030&
pageEncoding=&GB18030&%&
那么,使用Filter之后呢?
package com.bjpowermode.drp.util.
import java.io.IOE
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
* 采用Filter统一处理字符集
public class CharSetEncodingFilter implements Filter {
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
//System.out.println(&CharsetEncoding---&&&begin&);
//设置字符集
arg0.setCharacterEncoding(&GB18030&);
//继续执行
//如果还有filter,继续调,如果没有,就调jsp
chain.doFilter(arg0,arg1);
//System.out.println(&CharsetEncoding---&&&end&);
public void init(FilterConfig arg0) throws ServletException {
//System.out.println(&CharsetEncoding---&&&init&);
this.encoding=arg0.getInitParameter(&encoding&);
//System.out.println(&CharsetEncoding---&&&init&+encoding);
在配置文件中进行配置。
CharSetEncodingFilter方法名和与配置文件中要一致,
类的路径com.bjpowermode.drp.util.filter.CharSetEncodingFilter。
&filter-name&CharSetEncodingFilter&/filter-name&
&filter-class&com.bjpowermode.drp.util.filter.CharSetEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&GBK&/param-value&
&/init-param&
&!--对什么模式起作用
&filter-mapping&
&filter-name&CharSetEncodingFilter&/filter-name&
&!--可加目录
&url-pattern&*.jsp&/url-pattern&
&/filter-mapping&
& & & & Filter提高了代码的灵活性,将变动移到了配置文件中而不是在页面上。
& & & & Filter除了可以设置字符集,解决乱码问题外,还可以用在验证用户权限,对网站进行压缩等方面。
本文已收录于以下专栏:
相关文章推荐
过滤器Filter也具有生命周期:init()-&doFilter()-&destroy(),由部署文件中的filter元素驱动。在servlet2.4中,过滤器同样可以用于请求分派器,但须在web....
最近手头正好有些时间,想着写点什么好呢?后来看到了一篇帖子说面试的时候有面试官问他能不能手写一套SpringMvc出来,不拉不拉的….不多说了。所以想着就写写试试,捋了捋思路,无非就是三点(大神勿喷!...
人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..
在我们正常的编程中,每一条线,都是从上到下依次调用,而filter是在每一个完整的调用中横着“切了一刀”。通过配置,它可以对任意代码路径进行过滤。
搞了两天终于弄通过了,LoadRunner的文件上传脚本:   web_submit_form(&add.do&, &Snapshot=t5.inf&, ITEMDATA, &Name=title&,...
一、Filter简介
  Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,
Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEnco...
转载地址:http://www.blogjava.net/jjshcc/archive//367501.html
问题起因:
   今天遇到一个乱码问题,以前已经配置好了的...
这一切还要从乱码讲起....场景:
是这样子的,在做用户添加和修改模块的时候,做完了之后,在填写用户名的时候,如果我们输入中文的话,提交到数据库中, 发现数据库中的代码是乱码. 于是去网上查了查关于中...
Filter 技术是servlet 2.3 新增加的功能。在Java Web的开发中中,在客户端与tomcat交互中,tomcat服务器端request.getParameter()取得的参数默认的是...
filter是一种横切性技术,体现了一个模式“责任链模式”,提供了一种声明式服务,声明式服务非常强大,它具有可插拔的能力。Filter对request和response请求进行了拦截,只对post请求...
他的最新文章
讲师: 许鹏
讲师:董付国
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在web.xml中添加多个filter
我的图书馆
在web.xml中添加多个filter
&多个筛选器的运行顺序取决于下列规则: 将 filter-mapping 元素包含与请求匹配的 url-pattern的筛选器按其在 web.xml 部署描述符中出现的顺序添加到链中。 将 filter-mapping 元素包含与请求匹配的 servlet-name 的筛选器添加在链中与 URL 模式匹配的筛选器之后。 链上先进先出的,链中最后的项目往往是最初请求的资源。 也就是说:
1.以url-pattern方式配置的filter运行时肯定先于以servlet-name方式配置的filter2.以url-partern方式配置的filter中,如果有多个与当前请求匹配,则按web.xml中filter-mapping出现的顺序来运行3.对于以servlet-name方式配置的filter,如果有多个与当前请求匹配,也是按web.xml中filter-mapping出现的顺序来运行
本文来自CSDN博客,转载请标明出处:
&&&&&&&&encodingFilter&&
&&&&&&&&org.springframework.web.filter.CharacterEncodingFilter&&
&&&&&&&&&&
&&&&&&&&&&&&encoding&&
&&&&&&&&&&&&UTF-8&&
&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&&&forceEncoding&&
&&&&&&&&&&&&true&&
&&&&&&&&&&
&&&&&&&&backendFilter&&
&&&&&&&&com.maxwell.help.LoginFilter&&
&&&&&&&&memberFilter&&
&&&&&&&&com.maxwell.help.MemberFilter&&
&&&&&&&&encodingFilter&&
&&&&&&&&/*&&
&&&&&&&&backendFilter&&
&&&&&&&&/backend/*&&
&&&&&&&&memberFilter&&
&&&&&&&&/member/*&&
&&&&&&&!-- 字符编码Filter --&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&init-param&
&param-name&forceEncoding&/param-name&
&param-value&true&/param-value&
&/init-param&
&!-- 后台用户登录验证Filter --&
&filter-name&backendFilter&/filter-name&
&filter-class&com.maxwell.help.LoginFilter&/filter-class&
&!-- 前台会员登录验证Filter --&
&filter-name&memberFilter&/filter-name&
&filter-class&com.maxwell.help.MemberFilter&/filter-class&
&!-- 字符编码Filter-mapping --&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!-- 后台用户登录验证Filter-mapping --&
&filter-mapping&
&filter-name&backendFilter&/filter-name&
&url-pattern&/backend/*&/url-pattern&
&/filter-mapping&
&!-- 前台会员登录验证Filter-mapping --&
&filter-mapping&
&filter-name&memberFilter&/filter-name&
&url-pattern&/member/*&/url-pattern&
&/filter-mapping&
TA的最新馆藏[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢用户名:tianya23
文章数:863
评论数:64
访问量:2066469
注册日期:
阅读量:1297
阅读量:3317
阅读量:459572
阅读量:1144021
51CTO推荐博文
1、初始化参数
web.xml里面可以定义两种参数:
(1)application范围内的参数,存放在servletcontext中,在web.xml中配置如下:
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&context-param&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&&&&&&&&param-name&context/param&/param-name&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&&&&&&&&param-value&avalible during application&/param-value&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&/context-param&
(2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下:
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&servlet&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&servlet-name&MainServlet&/servlet-name&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&servlet-class&com.wes.controller.MainServlet&/servlet-class&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&init-param&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&&&&param-name&param1&/param-name&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&&&&param-value&avalible in servlet init()&/param-value&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&/init-param&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&&&&&load-on-startup&0&/load-on-startup&
650) this.width=650;" align="top" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" />&/servlet&
在servlet中可以通过代码分别取用:
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />package&com.wes.
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />import&javax.servlet.ServletE
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />import&javax.servlet.http.HttpS
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />
650) this.width=650;" id="Codehighlighter1_156_541_Open_Image" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" />public&class&MainServlet&extends&HttpServlet&{
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />
650) this.width=650;" id="Codehighlighter1_187_212_Open_Image" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" />&&&&public&MainServlet()&{
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&&&&&&&&super();
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&&&&&&}
650) this.width=650;" id="Codehighlighter1_264_539_Open_Image" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" />&&&&public&void&init()&throws&ServletException&{
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />& & & &&
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />&&&&&&&&&System.out.println(&下面的参数是存放在servletcontext中的&);
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />& & & & &System.out.println(getServletContext().getInitParameter(&context/param&));
& & & & & & System.out.println(&下面的两个参数param1是在servlet中存放的&);
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" />& & & & &System.out.println(this.getInitParameter(&param1&));
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&&&&&&&}
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" />}
650) this.width=650;" align="top" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />
第一种参数在servlet里面可以通过getServletContext().getInitParameter(&context/param&)得到
第二种参数只能在servlet的init()方法中通过this.getInitParameter(&param1&)取
2、初始化参数获取
&context-param&
& &param-name&count&/param-name&
& &param-value&1200&/param-value&
& &/context-param&
&&& &description&loginServlet&/description&
&&& &display-name&loginServlet&/display-name&
&&& &servlet-name&loginServlet&/servlet-name&
&&& &servlet-class&loginServlet&/servlet-class&
&&&&&init-param&
&&&&& &description&系统初始化数&/description&
&&&&& &param-name&num&/param-name&
&&&&& &param-value&100&/param-value&
&&& &/init-param&
& &/servlet&
& &servlet-mapping&
&&& &servlet-name&loginServlet&/servlet-name&
&&& &url-pattern&/loginServlet&/url-pattern&
& &/servlet-mapping&
获取参数的方法以及异同
String username=request.getParameter(&username&);
&&response.setCharacterEncoding(&gb2312&);
&&System.out.println(&getServletContext():&+getServletContext());
&&ServletContext context=getServletConfig().getServletContext();
&&String num=context.getInitParameter(&num&);//&&init-param& 获取不到值
&&String count=context.getInitParameter(&count&);//&context-param& 获取到值
&&System.out.println(&num:&+num);//null
&&System.out.println(&count:&+count);//1200
&&System.out.println(&num:&+getServletConfig().getInitParameter(&num&));//100获取到值
&&System.out.println(&count:&+getServletConfig().getInitParameter(&count&));//null获取不到值
&&System.out.println(&request.getSession().getServletContext():&+request.getSession().getServletContext());
&&request.setAttribute(&username&, username);
&&PrintWriter out=response.getWriter();
&&out.println(&获取的用户名是:&+username);
================================================================
1、URL中含有两个问号'?? '的处理
解决:先以/*做全匹配,再分配给其余servlet进行处理, url的匹配顺序,参考:
@Override&&&public&void&doFilter(ServletRequest&request,&ServletResponse&response,&FilterChain&chain)&&&&&&&&&&&throws&IOException,&ServletException&{&&&&&&&HttpServletRequest&httpRequest&=&null;&&&&&&&if&(request&instanceof&HttpServletRequest)&{&&&&&&&&&&&httpRequest&=&(HttpServletRequest)&&&&&&&&}&else&{&&&&&&&&&&&throw&new&RuntimeException(&not&http&request&);&&&&&&&}&&&&&&&String&queryString&=&httpRequest.getQueryString();&&&&&&&if&(queryString&!=&null&&&&queryString.startsWith(&?&))&{&&&&&&&&&&&request.getRequestDispatcher(&/taobao&).forward(httpRequest,&response);&&&&&&&}&else&{&&&&&&&&&&&chain.doFilter(httpRequest,&response);&&&&&&&}&&&}&
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 init param怎么获取 的文章

 

随机推荐