javaWeb中servlet开发——过滤器

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(){
    }
}
时间: 2024-07-29 22:59:46

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

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

1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DAO为主,出去了数据库外也包含业务处理. 3.model II 开发模式 servlet特点:可以接收用户的请求,还可以调用Java程序,由于本身就是以Java程序运行的,所以肯定要比jsp性能高,而且安全性能高. 最终,servlet所有的操作内容都有交个jsp显示,这样一来,servlet缺点就避

javaWeb中servlet开发——监听器

监听的定义 对application的监听 application是servletContext接口的对象,表示的是整个上下文环境,如果要想实现对application监听则可以使用如下两个接口: servletContextListener:是对整个上下文环境的监听 servletContextAttrubiteListener:是对属性的监听. import javax.servlet.* ; public class ServletContextListenerDemo implement

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

生命周期:是一个程序的存在周期,servlet由于是受容器的管理,所以容器来决定其生命周期 1.servlet生命周期 2.servlet生命周期对应的方法 3.servlet生命周期代码 public class LifeCycleServlet extends HttpServlet{ public void init() throws ServletException{ System.out.println("** 1.Servlet初始化 --> init()") ; }

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

1.重写doGet方法 public class InputServlet extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ String info = req.getParameter("info") ; // 假设参数名称为info PrintWriter out = resp.get

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

一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 二.Servlet的运行过程 Servlet程序是由WEB

深入分析JavaWeb Item5 -- Servlet开发

一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 二.Servlet的运行过程 Servlet程序是由WEB

javaweb学习--Servlet开发(一)

一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术: Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态资源(即开发一个java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个java类,实现servlet接口: 2.把开发好的Java类部署到web服务器中: 按照一中和约定俗成称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet: 二.Servlet的运行过程 Servlet程序是由WEB服务

javaWeb中 servlet 、request 、response

1.Servlet (1)Servlet是JavaEE的一个动态web资源开发技 术,就是在服务器上运行的小程序,这个小程序是由服务器调用的,服务器为了能调用这个小程序,就要求这样的程序必须实现一个Servlet接口或去继承 Servlet的实现类GenericServlet或HttpServlet. (2)在web应用的配置文件web.xml中配置Servlet的对外访问路径,再将整个web应用交给虚拟机管理. (3)Servlet的调用过程: ①服务器根据请求的包的host找到要访问的虚拟主

Javaweb之 servlet 开发详解1

1.1  Tip:Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 编写一个Java程序,向浏览器输出"hello servlet". 编写这个程序需要解决的2个问题: 在Java程序中,如何才能向IE浏