JavaWeb过滤器
过滤器
1、配置过滤器
@WebFilter("/Login.jsp")
@WebFilter("/*")
2、在web.xml中配置
突然发现自己没有掌握Web.xml的使用方法,不理解,所以百度了一下
1. xml文件
xml文件:Extentsible Markup Language即可扩展标记语言,是用来定义其它语言的一种元语言,其前身是SGML(标准通用标记语言)。xml文件是互联网数据传输的重要工具,因为不受编程语言和操作系统的限制,所以可以跨越互联网的任何平台,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。我们都知道xml文件的一些规则:
xml声明一般是xml文档的第一行:<?xml version=“1.0” encoding=“UTF-8”?>;
xml必须有且只有一个根节点,对大小写敏感,标签成对出现,标签不嵌套,但内部元素需要正确嵌套;
属性值用双引号包裹;一个元素可以有多个属性,它的基本格式为:<元素名 属性名=“属性值” 属性名=“属性值”>;
有效的(valid)xml文档:首先xml文档是个格式正规的xml文档,然后又需要满足DTD的要求,这样的xml文档称为有效的xml文档。
3. web.xml文件的作用
web.xml文件是整个web应用中最重要的配置文件,它必须放在WEB-INF目录中。在web应用开发中,涉及到web资源的配置都是在web.xml中进行的。例如:
将某个web资源设置为网站首页;
将servlet程序映射到某个url地址上;
为web应用配置监听器;(目前正在学!)
为web应用配置过滤器;
配置web应用上下文参数、配置Session的参数;
配置spring、springMVC等框架。
- xml文档的有效检查
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
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_3_0.xsd">
这是一般在写XML时所做的声明,定义了XML的版本,编码格式,还有重要的指明schema的来源,为http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd;schema是由Sum Microsystems公司(已被Oracle收购)定制的,Schema文件定义了web.xml所对应的xml中有多少种标签元素。
2、设置欢迎页
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index1.jsp</welcome-file>
</welcome-file-list>
Eg:
3、<session-config> 用于设置容器的session参数
<session-config></session-config>
<!-- Set timeout to 120 minutes -->
<session-config>
<session-timeout>120</session-timeout>
</session-config>
比如:<session-timeout> 用于指定http session的失效时间。默认时间设置在<jakarta>/conf/web.xml (30 minutes)。<session-timeout>用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。
- 设置过滤器
Filter可认为是Servlet的“增强版”,主要用于对用户请求request进行预处理,也可以对Response进行后处理,是个典型的处理链;因此Filter配置与Servlet的配置非常相似,需要配置两部分:配置Filter名称和Filter拦截器URL模式。区别在于Servlet通常只配置一个URL,而Filter可以同时配置多个请求的URL。
Filter的常用应用场合有:编码器Filter、认证Filter、图片转换Filter、数据压缩Filter、密码Filter、日志和审核Filter等。Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:void init(FilterConfig config)、void destroy()、void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)。
<filter>
<filter-name>Test1Filter</filter-name>
<filter-class>com.rp.filter.Test1Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>Test1Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重点理解chain.doFilter(request, response);方法!
每个TestFilterx
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
System.out.println("do filterx");
// pass the request along the filter chain
chain.doFilter(request, response);
System.out.println("finish do filterx");
}
运行结果如下
大概流程原理如图,猜想可能与配置顺序有关!证实如此
过滤器应用一:通过配置文件可以配制编码格式:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.rp.filter.EncodingFilter</filter-class>
<init-param>
<param-name>Encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在filter类中,其中init()方法中的fConfig对象就是配置好的对象
过滤器应用二:权限管理
- 了解一个规范:所有和后台有关的页面前面加一个admin_
- 创建一个admin过滤器
在.xml中配置admin过滤器
注意地址是admin下面的,因为此过滤器只针对有当访问admin下面页面时才生效
了解Dispacher过滤器
应用3:利用filter进行404页面处理
<filter>
<filter-name>DispatcherFilter</filter-name>
<filter-class>com.rp.filter.DispatcherFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DispatcherFilter</filter-name>
<url-pattern>/Dispatcher2.jsp</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<error-page>
<error-code>404</error-code>
<location>/Dispatcher2.jsp</location>
</error-page>
写到这里就要睡觉啦!明天(不对,是8个多小时后)出四级分数,希望自己能有一个好成绩!明天学监听器,加油!!!