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. Z-XML团队 软件工程课之我感我思我收获

    <软件工程>这门课像我们的诤友,不断督促我们前进,又不断指引我们收获.时间飞逝,我们Z-XML团队一个个完成了课程中的所有任务,一步步走到了期末年末. 走的远了,也该回头看看.全员7人回顾 ...

  2. 补间动画TweenAnimation

    animation_translate = AnimationUtils.loadAnimation(MainActivity.this, R.anim.transalte); imageview.s ...

  3. 框架模式 MVC 在Android中的使用

    算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...

  4. libswscale图像格式转换与放大缩小

    缩放,例如640x360拉伸为1280x720 注意:没有裁剪! ======================== 有2种使用方法: 简单的初始化方法 (1)       sws_getContext ...

  5. 最短路(Bellman_Ford) POJ 1860 Currency Exchange

    题目传送门 /* 最短路(Bellman_Ford):求负环的思路,但是反过来用,即找正环 详细解释:http://blog.csdn.net/lyy289065406/article/details ...

  6. stack UVA 442 Matrix Chain Multiplication

    题目传送门 题意:给出每个矩阵的行列,计算矩阵的表达式,如果错误输出error,否则输出答案 分析:表达式求值,stack 容器的应用:矩阵的表达式求值A 矩阵是a * b,B 矩阵是b * c,则A ...

  7. HDU4859 海岸线(最小割)

    题目大概就是说一个n*m的地图,地图上每一块是陆地或浅海域或深海域,可以填充若干个浅海域使其变为陆地,问能得到的最长的陆地海岸线是多少. 也是很有意思的一道题. 一开始想歪了,想着,不考虑海岸线重合的 ...

  8. HDU2222 Keywords Search(AC自动机模板)

    AC自动机是一种多模式匹配的算法.大概过程如下: 首先所有模式串构造一棵Trie树,Trie树上的每个非根结点都代表一个从根出发到该点路径的字符串. 然后每个结点都计算出其fail指针的值,这个fai ...

  9. POJ2125 Destroying The Graph(二分图最小点权覆盖集)

    最小点权覆盖就是,对于有点权的有向图,选出权值和最少的点的集合覆盖所有的边. 解二分图最小点权覆盖集可以用最小割: vs-X-Y-vt这样连边,vs和X部点的连边容量为X部点的权值,Y部和vt连边容量 ...

  10. ural 1156. Two Rounds

    1156. Two Rounds Time limit: 2.0 secondMemory limit: 64 MB There are two rounds in the Urals Champio ...