servlet开发——过滤器(filter)

servlet有三种,分为简单servlet、过滤器servlet、监听servlet

简单servlet是作为一种程序所必须的开发结构保存的,继承httpServlet类形式。

过滤器servlet和监听servlet不是程序所必须的。

要想完成一个过滤器的开发,首先必须让一个类实现Filter接口,此接口是javax.serclet中的。根据这个包的特点可发现,此接口的主要功能是完成公共协议的操作。

Filter接口中的方法:

简单的servlet必须手工调用,如在form表单的action之中编写路径。

过滤这种操作本身属于本身自动完成的。package org.lxh.filterdemo ;

import java.io.* ;
import javax.servlet.* ;
public class SimpleFilter implements Filter {
public void init(FilterConfig config)
throws ServletException{
// 接收初始化的参数
String initParam = config.getInitParameter("ref") ;
System.out.println("** 过滤器初始化,初始化参数=" + initParam) ;
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException{
System.out.println("** 执行doFilter()方法之前") ;
chain.doFilter(request,response) ;
System.out.println("** 执行doFilter()方法之后") ;
}
public void destroy(){
System.out.println("** 过滤器销毁。") ;
try{
Thread.sleep(1000);//线程中休眠,可以看出销毁输出
}cathc(Exception e){
}
}
}

 过滤器完成,也需要在web.xml中进行配置。先写filer配置,再写简单servlet配置

<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<filter>
<filter-name>simple</filter-name>
<filter-class>org.lxh.filterdemo.SimpleFilter</filter-class>
<init-param>
<param-name>ref</param-name>
<param-value>HELLOMLDN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>simple</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

此处,<url-mapping>表示一个过滤器的过滤路径,现在既然是”/*则表示对 一个目录中的所有内容进行过滤。

过滤器不需要任何配置,就可以在服务器启动的时候自动地完成初始化操作。

一个过滤器的生命周期和servlet是相同的。

doFilter方法中FitlerChain作用

 过滤器是执行两次的,一个过滤器本身可以对多个路径进行过滤。那么过滤器如何应用?

在实际开发中,应用最频繁的就是编码过滤和登录验证。

对应编码,所有的页面都需要使用,只要是页面,都需要编写request.setCharacterEncoding()方法对编码进行限制。

package org.lxh.filterdemo ;
import java.io.* ;
import javax.servlet.* ;
public class EncodingFilter implements Filter {
private String charSet ;
public void init(FilterConfig config)
throws ServletException{
// 接收初始化的参数
this.charSet = config.getInitParameter("charset") ;
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException{
request.setCharacterEncoding(this.charSet) ;
chain.doFilter(request,response) ;
}
public void destroy(){
}

进行web.xml配置

<filter>
<filter-name>encoding</filter-name>
<filter-class>org.lxh.filterdemo.EncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

至于登录验证操作,都需要session验证,但每个页面都写session判断,相当复杂,所以可以对一些需要限制的地方采用登录验证。

package org.lxh.filterdemo ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class LoginFilter implements Filter {
public void init(FilterConfig config)
throws ServletException{
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException{
// session属于http协议的范畴
HttpServletRequest req = (HttpServletRequest) request ;
HttpSession ses = req.getSession() ;
if(ses.getAttribute("userid") != null) {
// 已经登陆过了,则可以访问
chain.doFilter(request,response) ;
} else {
request.getRequestDispatcher("login.jsp").forward(request,response) ;
}
}
public void destroy(){
}
}

javaWeb中servlet开发——过滤器的更多相关文章

  1. javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II

    1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DA ...

  2. javaWeb中servlet开发(4)——servlet跳转

    servlet跳转 1.跳转类型 客户端跳转:跳转后地址栏改变,无法传递request范围内属性,是在所有的操作都执行完毕之后才发生跳转的操作,跳转语法是,response.sendRedict() ...

  3. javaWeb中servlet开发(3)——Servlet生命周期

    生命周期:是一个程序的存在周期,servlet由于是受容器的管理,所以容器来决定其生命周期 1.servlet生命周期 2.servlet生命周期对应的方法 3.servlet生命周期代码 publi ...

  4. javaWeb中servlet开发(2)——servlet与表单

    1.重写doGet方法 public class InputServlet extends HttpServlet{ public void doGet(HttpServletRequest req, ...

  5. javaWeb中servlet开发(1)——helloworld

    1.servlet 1.1 servlet简介 1.2 servlet流程 不管是servlet还是jsp,所有的程序都是在服务器端处理的,所以必须了解一个servlet基本流程 servlet和JS ...

  6. javaWeb中servlet开发——监听器

    监听的定义 对application的监听 application是servletContext接口的对象,表示的是整个上下文环境,如果要想实现对application监听则可以使用如下两个接口: s ...

  7. javaweb(五)——Servlet开发(一)

    一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  8. JavaWeb中servlet读取配置文件的方式

    我们在JavaWeb中常常要涉及到一些文件的操作,比如读取配置文件,下载图片等等操作.那我们能不能采用我们以前在Java工程中读取文件的方式呢?废话不多说我们来看看下我们以前在Java工程中读取文件是 ...

  9. javaweb(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

随机推荐

  1. jquery笔记(仅供个人参考)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. hdu 1728 bfs **

    简单bfs,记录好状态即可 #include<cstdio> #include<iostream> #include<algorithm> #include< ...

  3. JavaScript案例三:动态显示时间

    用JavaScript实现在页面上动态的显示时间 <!DOCTYPE html> <html> <head> <title>JavaScript动态显示 ...

  4. 在Linux下搭建SVN服务器

    svn不仅仅可以用于程序开发,还可以做很多事情,例如备份文档. CentOS下:安装 这样同一台服务器便可以运行多个svnserver了 检查端口 注:如果修改了svn配置,需要重启svn服务 -j ...

  5. OUYA游戏开发核心技术剖析OUYA游戏入门示例——StarterKit

    第1章  OUYA游戏入门示例——StarterKit StarterKit是一个多场景的游戏示例,也是OUYA官方推荐给入门开发者分析的第一个完整游戏示例.本章会对StarterKit做详细介绍,包 ...

  6. Quartz.Net 配置模板范例

        1.App.config <?xml version="1.0" encoding="utf-8"?> <configuration& ...

  7. 外部调用JS文件时出现中文乱码的解决办法

    若测试网页的编码格式为:gb2312,而调用外部JS文件时出现了乱码(前提是JS文件无错误),则将调用的外部JS文件用记事本打开,然后再保存成编码格式为UTF-8的JS文件即可. 若测试网页的编码格式 ...

  8. [文字雲產生器] Tagxedo 把文字串成雲、變成畫,印在 T-Shirt、馬克杯、詩袋….

    http://www.tagxedo.com/app.html 有種東西叫「Word Clouds」,就是把一堆文字依照不同的大小.顏色.角度與位置拼湊在一起,讓他變成像一朵雲一般.組合成各種不同的形 ...

  9. sql对应C#的类型

  10. 矢量图标转成16*16大小的SVG格式

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:一一链接:http://www.zhihu.com/question/32233782/answer/68629385来源:知 ...