Javaweb---Servlet过滤器
Servlet过滤器从字面上的字意理解为景观一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。
过滤器的基本概念

- public void init(FilterConfig filterConfig) throws ServletException
- public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
- public void destroy()
- public void doFilter(ServletRequest request,ServletResponse response) throws IOException,ServletException

package com.oumyye.过滤器;
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 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("** 过滤器销毁。");
}
}

配置web.xml

<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>

过滤器的应用 —— 编码过滤

package com.oumyye.过滤器;
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; // 设置字符编码
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); // 设置统一编码
}
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>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

过滤器的应用---登陆验证

package com.oumyye.过滤器; import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*; public class FilterLogin extends HttpServlet implements Filter {
private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws ServletException,
IOException {
HttpSession session=((HttpServletRequest)request).getSession();
response.setCharacterEncoding("gb2312"); //响应客户端类型
if(session.getAttribute("user")==null){ //判断session中是否有user这个对象
PrintWriter out=response.getWriter(); //创建一个输出流
//如果为空则通过javaScript脚本出输出提示并跳转到index.jsp页面
out.print("<script language=javascript>alert('您还没有登录!!!');window.location.href='../index.jsp';</script>");
}else{
filterChain.doFilter(request, response);//否则继续执行
}
}
public void destroy() {
}
}

User.java

package com.mr.filter;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}

配置web.XML

<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>filterUser</filter-name>
<filter-class>com.mr.filter.FilterLogin</filter-class>
</filter>
<filter-mapping>
<filter-name>filterUser</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

jsp页面:
index.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/style.css" rel="stylesheet" type="text/css" >
<script language="javascript" type="">
function checkEmpty(){
if(document.form.name.value==""){
alert("用户名不能为空")
document.form.name.focus();
return false;
}
if(document.form.password.value==""){
alert("密码不能为空")
document.form.password.focus();
return false;
}
}
</script> <title>使用过滤器身份验证</title>
</head> <body>
<h3> </h3>
<p align="center">使用过滤器身份验证</p>
<form name="form" method="post" action="loginresult.jsp" onSubmit="return checkEmpty()">
<table width="220" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="808080"> <tr>
<td align="center">用户名:</td>
<td ><input name="name" type="text"></td>
</tr>
<tr>
<td align="center">密 码:</td>
<td><input name="password" type="password"></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" name="Submit" value="登录">
<input type="submit" value="退出"/>
</td>
</tr>
</table><br>
</form> </body>
</html>

loginresult.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
<%@ page import="com.mr.filter.User"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>使用过滤器身份验证</title>
</head>
<%
request.setCharacterEncoding("gb2312");
String name=request.getParameter("name");
String password=request.getParameter("password");
User user=new User();
user.setUsername(name);
user.setPassword(password);
session.setAttribute("user",user); response.sendRedirect("filter/loginsuccee.jsp");
%>
<body>
</body>
</html>

loginsuccee.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="com.mr.filter.User"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>使用过滤器身份验证</title>
</head>
<body><div align="center"> <table width="333" height="285" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<p>您己成功登录</p>
<p><br>
<a href="backtrack.jsp">返回</a>
</p></td>
</tr>
</table>
</div> </body>
</html>

backtrack.jsp
<%
session.invalidate();
out.print("<script language='javascript'>window.location.href='../index.jsp';</script>");
%>
小结:
Javaweb---Servlet过滤器的更多相关文章
- TODO java-web相关 servlet过滤器+监听器
servlet过滤器 定义: 过滤器是小型的web组件,它负责拦截请求和响应,以便查看.提供或以某种方式操作正在客户机和服务器之间交换的数据. 与过滤器相关的servlet共包含3个简单接口:Filt ...
- JavaWeb学习篇之----Servlet过滤器Filter和监听器
首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: ************************************************************** ...
- Servlet过滤器
Servlet过滤器 [TOC] 1.过滤器的基本概念 1.1.基本概念 过滤器(Filter)属于tomcat服务器中的Servlet功能.在普通的javaweb服务中,jsp中的请求要被Servl ...
- [JavaWeb] Servlet Filter
作用: Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servle ...
- IT兄弟连 JavaWeb教程 过滤器1
Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭.创建过滤器和监听器需要继承相应接口,并对其进行配置. ...
- Servlet过滤器Filter用法
1 Servlet 过滤器方法 过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法:public void ...
- Servlet过滤器和监听器
1,Servlet过滤器 <filter> <filter-name>charset</filter-name> <filter-class>org.g ...
- Servlet 过滤器
一.过滤器介绍 在Servlet 2.3中定义了过滤器,它能够对Servlet容器的请求和响应进行检查和修改. Servlet过滤器能够在Servlet被调用之前检查Request对象,并修改Requ ...
- Servlet基础知识(四)——Servlet过滤器Filter
一.什么是过滤器: 政府大楼的安检保安,它既能对进入政府大楼的人员进行检查,只允许检查符合要求的进入:同时他也负责对出大楼的人进行检查,看他带出的东西是否符合要求. 同样的,Servlet中的过滤器既 ...
- Servlet过滤器——过滤器分析流量
1.概述 Servlet过滤器可以对用户提交的数据或服务器返回的数据进行更改.任何到达服务器的请求都会首先经过过滤器的处理.本实例应用过滤器的这个特点,编写了一个在过滤器中统计网站流量的实例. 本实例 ...
随机推荐
- css3 github javascript
欢迎关注我的 github github博客地址 github地址
- tab切换,滑动门
<SCRIPT type=text/javascript> jQuery(document).ready(function () { changediv([" ...
- 技术博客(初用markdown)。
技术博客 菜鸟教程在这个网站我学到许多有趣的东西,并且弥补了我之前的一些不足之处. 以下为我学习到的内容 输出不同的三位数 以下为代码和输出结果 *** #include<stdio.h> ...
- C语言 homework (3)
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { ; char c; do{ ...
- 剑指Offer 和为S的两个数字
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思路 ...
- JavaScript深入浅出2-表达式和运算符
慕课网教程视频地址:Javascript深入浅出 表达式是指能计算出值的任何可用程序单元 原始表达式:常量.直接量 3.14,“test” 关键字 null,this 变量 i,k,j 表达式含:原始 ...
- NOIP2015 斗地主
Sol 暴力搜索...不用搜1,2张的情况,直接统计出来就可以了. 还有处理一下2和大王小王的位置,扔到最后面或者最前面就可以了. 搜索就搜 3+3,2+2+2,1+1+1+1+1 这三个就可以了. ...
- COGS 2416.[HZOI 2016]公路修建 & COGS 2419.[HZOI 2016]公路修建2 题解
大意: [HZOI 2016]公路修建 给定一个有n个点和m-1组边的无向连通图,其中每组边都包含一条一级边和一条二级边(连接的顶点相同),同一组边中的一级边权值一定大于等于二级边,另外给出一个数k( ...
- linux ssh 登录同时执行其他指令
目的:懒的敲一些重复的指令,比如登录后cd到某个目录. 咋办: ssh -t user@xxx.xxx.xxx.xxx "cd /directory_wanted ; bash" ...
- C/C++程序员必须熟练应用的开源项目[转]
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应 ...