MLDN
课程咨询[孔老师]QQ 1031143579孔老师QQ课程咨询留言 课程咨询[徐老师 ]QQ 945313230
徐老师QQ课程咨询留言
课程咨询[刘老师 ]QQ 514543793
刘老师QQ课程咨询留言
java培训
北京java培训
IT电子教育门户 高端JAVA培训 -=> 资源中心 -=> J2EE服务器 -=> Apache/Tomcat -=> 正文

过滤器

 发布日期:2008-11-12 9:00:00 发布者:[IT电子教育门户]   评论:[]  浏览:
1、课程名称:过滤器
 过滤器的配置及使用
2、知识点
2.1、上次课程的主要知识点
 1、 数据源的配置及使用
2.2、本次预计讲解的知识点
 1、 过滤器的基本组成结构
 2、 过滤器的主要作用
3、具体内容
 JSP可以完成的功能Servlet都可以完成,但是Servlet拥有比JSP更多的功能。
 Servlet按功能划分分为以下几种:
• 简单Servlet:与JSP功能类似,结合JSP,完成MVC设计模式,是整个程序中密不可分的一部分,整个程序不能分开。
  • 过滤器:是作为一个单独的组件配置到WEB项目之中的
  • 监听器:是作为一个单独的组件配置到WEB项目之中的
 过滤器是属于自动运行的组件,顾虑器通常在以下几个地方使用:
  • 对统一的编码过滤。
  • 对登陆进行过滤。
 如果要开发一个过滤器,则只要一个类实现javax.servlet.Filter接口即可。
FirstFilter.java:
package org.lxh.demo;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FirstFilter implements Filter {
 public void destroy() {
  System.out.println("**** 过滤器销毁") ;
 }
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  System.out.println("**** 做过滤") ;
 }
 public void init(FilterConfig arg0) throws ServletException {
  System.out.println("**** 过滤器初始化") ;
 }
}
 既然过滤器是一个Servlet,所以就必须在web.xml中进行配置。
web.xml:
 <filter>
  <filter-name>first</filter-name>
  <filter-class>org.lxh.demo.FirstFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>first</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 通过运行,可以发现,服务器启动的时候过滤器会被自动初始化。
doFilter方法:
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  System.out.println("**** 做过滤") ;
 }
 参数之中存在一个FilterChain(过滤链)。
 过滤器一般要执行两次,进去的时候过滤,出来的时候再过滤。
 之前在web.xml中配置的<url-pattern>实际上表示的是对那个页面进行过滤,如果是“/*”表示对所有页面进行过滤。
 过滤器可以对统一的编码进行过滤。例如,现在有如下两个简单的页面。
input.htm:
<html>
 <head>
  <title>input.htm</title>
 </head>
 <body>
 <form action="input.jsp" method="post">
  请输入内容:<input type="text" name="info">
  <input type="submit" value="提交">
 </form>
 </body>
</html>
input.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
 <head>
  <title>My JSP 'input.jsp' starting page</title>
 </head>
 <body>
  <h1>
   ${param.info}
  </h1>
 </body>
</html>
 一旦此时提交的是中文,则一定出现乱码,那么此时就可以通过过滤器完成统一编码的设置。
EncodingFilter.java:
package org.lxh.demo;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
 private String charSet = null ;
 public void destroy() {
 }
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  arg0.setCharacterEncoding(this.charSet) ;
  // 表示把请求向下继续传递
  arg2.doFilter(arg0, arg1) ;
 }
 public void init(FilterConfig arg0) throws ServletException {
  this.charSet = arg0.getInitParameter("charset") ;
 }
}
 通过web.xml进行初始化参数的配置。
web.xml:
 <filter>
  <filter-name>first</filter-name>
  <filter-class>org.lxh.demo.EncodingFilter</filter-class>
  <init-param>
   <param-name>charset</param-name>
   <param-value>GBK</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>first</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 在操作中经常性的要对用户是否登陆进行验证,那么如果要进行验证的话,则肯定有大量的代码要不断的判断session是否存在。那么此种代码实际上就可以直接放在过滤器中进行编写。
LoginFilter.java:
package org.lxh.demo;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class LoginFilter implements Filter {
 public void destroy() {
 }
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  HttpServletRequest req = (HttpServletRequest) arg0;
  HttpSession ses = req.getSession();
  if (ses.getAttribute("info") != null) {
   // 如果现在存在了session,则请求向下继续传递
   arg2.doFilter(arg0, arg1);
  } else {
   // 跳转到登陆页面
   arg0.getRequestDispatcher("forward.htm").forward(arg0, arg1) ;
  }
 }
 public void init(FilterConfig arg0) throws ServletException {
 }
}
 以上的过滤器实际上针对的是jsp文件夹下的所有页面,所以映射路径应该配置在jsp/*下。
web.xml:
 <filter>
  <filter-name>login</filter-name>
  <filter-class>org.lxh.demo.LoginFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>login</filter-name>
  <url-pattern>/jsp/*</url-pattern>
 </filter-mapping>
 在需要被过滤器过滤的所有文件夹之中,加入以下的页面。
forward.htm:
<META HTTP-EQUIV="refresh" CONTENT="2;URL=../input.htm">
<center>
<h2>您还未登陆,请先登陆!</h2>
<h2>两秒后跳转到登陆页,如果没有跳转,请按<a href="../input.htm">这里</a>!</h2>
</center>
4、总结
 编码过滤,和登陆过滤是两个最常用的功能
 所有的过滤器都属于自动执行
java视频教程
JAVA核心_75对象序列化练习
 JAVA核心_75对象序列化..
JAVA核心_74对象序列化
 JAVA核心_74对象序列化..
JAVA核心_73字符编码
 JAVA核心_73字符编码 ..
JAVA核心_72Scanner
 JAVA核心_72Scann..
JAVA核心_71 IO练习 二
 JAVA核心_71 IO练习..
相关文章 推荐文章
Tomcat深入内部结构描述 [4.13]
实践中整理出tomcat集群和负..[12.19]
数据源的配置及使用[11.12]
JSP中tomcat的SQL S..[11.5]
tomcat频繁死掉的问题[9.21]
Tomcat深入内部结构描述
数据源的配置及使用
过滤器
监听器
WEB发展及Tomcat配置(二)
热门文章
Apache+JK+Tomcat负载平..
使用Tomcat-5.5.20配置数据..
完整图解 Tomcat 5.0.28 ..
Tomcat集群与负载均衡
JDK和Tomcat的安装与配置
Tomcat深入内部结构描述
Apache与Tomcat的整合
超简单整合apache2.0 +Tom..
Tomcat配置技巧
tomcat频繁死掉的问题
今日更新
Tomcat深入内部结构描述
实践中整理出tomcat集群和负载均衡..
数据源的配置及使用
过滤器
监听器
WEB发展及Tomcat配置(二)
WEB发展及Tomcat配置(一)
JSP中tomcat的SQL Serv..
tomcat频繁死掉的问题
Apache Synapse 的概述
JAVA招聘网
 评一评
正在读取…
  姓名:
  评论:
    
【注】 发表评论必需遵守以下条例: !!!
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
关于我们 | 商务合作 | 招聘信息 | 客服中心 | 服务条款 | 免责声明 | 网站导航 QQ留言
Copyright 2009 魔乐培训MLDN.CN all rights reserved 版权所有 京ICP备07008611号