关于javaWeb的Filter过滤器
2016-05-04 23:15
465 查看
关于javaWeb的Filter过滤器
Filter是如何实现拦截的?
Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。
调用目标资源之后,让一段代码执行。
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对 象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方 法,即web资源就会被访问,否则web资源不会被访问。
其实Filter和Servlet很类似,读者可以根据servlet来比较着学习Filter
下面通过一个完整 的项目来介绍Filter的作用。
先要继承Filter接口:
对账号的验证:
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">package com.cn.zhu; 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 Unamefilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("开始执行,doFilter"); String inuname=fliterconfig.getInitParameter("uname1"); String uname=request.getParameter("uname"); if(!inuname.equals(uname)){ request.setAttribute("message", "用户名不正确"); request.getRequestDispatcher("/login.jsp").forward(request, response); return; } chain.doFilter(request, response);//放行 } private FilterConfig fliterconfig; public void init(FilterConfig filter) throws ServletException { this.fliterconfig=filter; System.out.println("开始执行,init"); } } </span></span></span>对密码的验证
<span style="font-size:18px;"><span style="font-size:18px;">package com.cn.zhu; 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 Unamefilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("开始执行,doFilter"); String inuname=fliterconfig.getInitParameter("uname1"); String uname=request.getParameter("uname"); if(!inuname.equals(uname)){ request.setAttribute("message", "用户名不正确"); request.getRequestDispatcher("/login.jsp").forward(request, response); return; } chain.doFilter(request, response);//放行 } private FilterConfig fliterconfig; public void init(FilterConfig filter) throws ServletException { this.fliterconfig=filter; System.out.println("开始执行,init"); } }</span></span>一个登陆的请求:login.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style type="text/css"> <!-- body { background-color:#6F00D2; background-image: url(image/12885844_113021655000_2[1].jpg); } .ww1 { height: 30px; width: 180px; } </style> <script language="javascript"> //javascript check函数,用于检查表单中输入的用户昵称和登录密码是否为空 function check() { return true; } </script> </head> <body> <h1 align="center">管理员登录</h1> <form action="hello.jsp" method="post"> <table align="center"> <tr> <td height="45"> 账号 <input type="text" name="uname" value="${param.uname}" height="45"/><br> </td> <td><font color="red">${message }</font> </td> </tr> <tr> <td height="45"> 密码 <input type="password" name="upassword" height="45"/><br> </td> <td> <font color="red">${passmessage }</font> </td> </tr> <tr> <td> <button onclick="return check();" style="background: rgb(0, 142, 173); padding: 7px 10px; border-radius: 4px; border: 1px solid rgb(26, 117, 152); border-image: none; color: rgb(255, 255, 255); font-weight: bold;" >登录</button> </td> </tr> </form> </table> </body> </html>
web.xml配置信息如下 账号默认为Tom,密码为123456,
这个账号密码,可以换成数据库的信息。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" 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_2_5.xsd"> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>Liststudentss</servlet-name> <servlet-class>com.mvc.Liststudentss</servlet-class> </servlet> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>Deletestudent</servlet-name> <servlet-class>com.mvc.Deletestudent</servlet-class> </servlet> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>InsertStudent</servlet-name> <servlet-class>com.mvc.InsertStudent</servlet-class> </servlet> <servlet-mapping> <servlet-name>Liststudentss</servlet-name> <url-pattern>/liststudents</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Deletestudent</servlet-name> <url-pattern>/deletestudent</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>InsertStudent</servlet-name> <url-pattern>/InsertStudent</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!--过滤器配置--!> <context-param> <param-name>upassword</param-name> <param-value>123456</param-value> </context-param> <filter> <display-name>Unamefilter</display-name> <filter-name>Unamefilter</filter-name> <filter-class>com.cn.zhu.Unamefilter</filter-class> <init-param> <param-name>uname1</param-name> <param-value>Tom</param-value> </init-param> </filter> <filter-mapping> <filter-name>Unamefilter</filter-name> <url-pattern>/hello.jsp</url-pattern> </filter-mapping> <filter> <display-name>PasswordFilter</display-name> <filter-name>PasswordFilter</filter-name> <filter-class>com.cn.zhu.PasswordFilter</filter-class> </filter> <filter-mapping> <filter-name>PasswordFilter</filter-name> <url-pattern>/hello.jsp</url-pattern> </filter-mapping> </web-app>
界面如下
测试界面:如果账号或密码输入不正确,Filter会直接拦截。
JSP+servlet+Filter完整的项目在这里,如有需要请点击下载
地址: http://pan.baidu.com/s/1ckc5hO 密码 dhp8
相关文章推荐
- Java-Fork/Join的简单例子(入门)
- KMP_java实现
- java将xml转成对象是如此轻松-Unmarshaller
- 第一章 JAVA入门(JDK目录简介)
- 22.Eclipse 的 Java Web 项目环境搭建 - IntelliJ IDEA 使用教程
- 第一章 JAVA入门(下载安装JDK JRE)
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)
- Java Web基础知识之文件下载:当你下载文件的时候到底发生了什么?
- 关于java中文乱码问题,我有话要说。
- An internal error occurred during: "Map/Reduce location status updater". java.lang.NullPointerExcept
- Java NIO 完全学习笔记(转)
- 使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新浏览器无法及时显示修改后的页面
- Fork and Join: Java编写并发程序(重要)
- Java汉字转拼音pinyin4j用法
- 《java入门第一季》之面向对象(static关键字内存图解)
- 《java入门第一季》之面向对象(static关键字内存图解)
- Sublime Text 3搭建Java开发环境及输出编码问题解决方法
- java中length,length(),size()区别
- axis和xfire以及CXF三种方式实现WebServices分别有什么优缺
- 《java入门第一季》之面向对象(static关键字)