15.过滤器-基础.md
目录
基础
过滤器相当于门的作用,用于在servlet获取之前,完成定义的过滤操作
- 过滤器是一个特殊的servlet类
- 过滤器实现接口javax.servlet.Filter
实例
package per.liyue.code.filter_demo;
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;
/*
 * 过滤器例子:
 * 1.普通的Java类实现javax.servlet.Filter接口
 * 2.这是一个特殊的servlet
 */
public class HelloFilter implements Filter{
    /*
     * 过滤器在服务器启动的过程中就创建了,这个不同于普通的servlet,servlet在访问请求的时候创建,除非在配置中设置
     */
    public HelloFilter(){
        System.out.println("1.构造过滤器。。。");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("2.初始化过滤器,实现一些过滤器的初始化工作...");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("3.进入过滤器,实现过滤...");
        //过滤完成后调用servlet
                //如果有其他的过滤器,则进入其他的过滤器,最后才进入servlet        chain.doFilter(request, response);
        System.out.println("5.过滤器中完成了servlet的代码...");
    }
    @Override
    public void destroy() {
        System.out.println("6.销毁过滤器...");
    }
}
package per.liyue.code.filter_demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
	/**
		* The doGet method of the servlet. <br>
		*
		* This method is called when a form has its tag value method equals to get.
		*
		* @param request the request send by the client to the server
		* @param response the response send by the server to the client
		* @throws ServletException if an error occurred
		* @throws IOException if an error occurred
		*/
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("4.进入servlet,执行servlet本身内容...");
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>WebDemo1</display-name>
    <!-- 过滤器配置 -->
    <!-- 过滤器本身的设置 -->
    <filter>
        <!-- 过滤器内部名称 -->
        <filter-name>HelloFilter??</filter-name>
        <!-- 过滤器类名称 -->
        <filter-class>per.liyue.code.filter_demo.HelloFilter</filter-class>
    </filter>
    <!-- 过滤器路径配置 -->
    <filter-mapping>
        <!-- 过滤器内部名称 -->
        <filter-name>HelloFilter??</filter-name>
        <!-- 过滤器所有的servlet -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 过滤器对应的servlet -->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>per.liyue.code.filter_demo.HelloServlet</servlet-class>
    </servlet>
    <!-- 过滤器对应的servlet地址 -->
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>  
图解
核心API
interface Filter过滤器接口
- void init(filterConfig); 初始化方法,在服务器启动时候执行
- void doFilter(request,response,filterChain); 过滤器拦截的业务处理方法
- void destroy(); 销毁过滤器实例时候调用
interface FilterConfig获取过滤器初始化信息
现在xml中配置初始化参数
<!-- 过滤器配置 -->
	<filter>
		<!-- 配置初始化参数 -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>path</param-name>
			<param-value>c:/...</param-value>
		</init-param>
		<!-- 内部名称 -->
		<filter-name>hello_filter</filter-name>
		<!-- 过滤器类的全名 -->
		<filter-class>cn.itcast.a_filter_hello.HelloFilter</filter-class>
	</filter>
	<filter-mapping>
		<!-- filter内部名称 -->
		<filter-name>hello_filter</filter-name>
		<!-- 拦截所有资源 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
再到过滤器中获取
@Override
   public void init(FilterConfig filterConfig) throws ServletException {
   	System.out.println("2. 执行过滤器初始化方法");
   	// 获取过滤器在web.xml中配置的初始化参数
   	String encoding = filterConfig.getInitParameter("encoding");
   	System.out.println(encoding);
   	// 获取过滤器在web.xml中配置的初始化参数 的名称
   	Enumeration<String> enums =  filterConfig.getInitParameterNames();
   	while (enums.hasMoreElements()){
   		// 获取所有参数名称:encoding、path
   		String name = enums.nextElement();
   		// 获取名称对应的值
   		String value = filterConfig.getInitParameter(name);
   		System.out.println(name + "\t" + value);
   	}
   }
interface FilterChain 过滤器参数,一个个过滤器形成执行链
指定过滤
- 默认拦截的类型:(直接访问或者重定向)
REQUEST
- 拦截转发:
FORWARD
- 拦截包含的页面(RequestDispatcher.include(/page.jsp); 对page.jsp也执行拦截)
INCLUDE
- 拦截声明式异常信息:
 ERROR
 Demo:
<!-- 配置第二个过滤器 -->
	<!-- 演示: 拦截指定的请求 -->
	<filter>
		<filter-name>hello_filter2</filter-name>
		<filter-class>cn.itcast.a_filter_hello.HelloFilter2</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>hello_filter2</filter-name>
		<!-- 1. 拦截所有
		<url-pattern>/*</url-pattern>
		-->
		<!-- 2. 拦截指定的jsp
		<url-pattern>/index.jsp</url-pattern>
		<url-pattern>/list.jsp</url-pattern>
		-->
		<!-- 拦截所有的jsp
		<url-pattern>*.jsp</url-pattern>
		 -->
		 <!-- 3. 根据servlet的内部名称拦截
		 <servlet-name>IndexServlet</servlet-name>
		  -->
		 <!-- 拦截指定的servlet
		 <url-pattern>/index</url-pattern>
		 -->
		 <!-- 4. 指定拦截指定的类型 -->
		 <url-pattern>/*</url-pattern>
		 <dispatcher>REQUEST</dispatcher>
		 <dispatcher>FORWARD</dispatcher>
	</filter-mapping>
常见问题:
- 过滤器:
方法参数没有自动命名,说明没有关联源码---->关联tomcat或servlet源代码
- 连接池:
多刷新几次,报错---->连接没关
                        QueryRunner qr = new QueryRunner();
                        qr.update(con,sql);
                        // 这里con一定要关闭
                 ---->注意:dataSource 确定一个项目创建一次
                        QueryRunner qr = new QueryRunner(dataSource);
                           ---->修改连接池参数配置
- 编码
 // 设置POST提交的请求的编码
 request.setCharacterEncoding("UTF-8");
 // 设置相应体的编码
response.setCharacterEncoding("UTF-8");
 // 设置页面打开时候时候的编码格式、设置相应体的编码
response.setContentType("text/html;charset=UTF-8");
** 开发中:工作区间编码、项目编码、request/response、数据库编码一致!**
15.过滤器-基础.md的更多相关文章
- Servlet过滤器基础及使用场景
		Servlet过滤器详解 一.过滤器基础 1.Servlet过滤器是Servlet的一种特殊用法,主要用来完成一些通用的操作.比如编码的过滤,判断用户的登陆状态等等.Servlet过滤器的适用场合: ... 
- intellij idea 15 修改基础配置加载路径
		一.概述 intellij idea 15 默认配置的启动加载路径是"C:\Users\Administrator.IntelliJIdea15",这样会导致占用C盘的空间越来越多 ... 
- 一步步学习ASP.NET MVC3 (15)——过滤器
		请注明转载地址:http://www.cnblogs.com/arhat 今天老魏和大家一起讨论一下ASP.NET MVC中非常重要的一个知识:"过滤器".那么这个"过滤 ... 
- angularJS自定义 过滤器基础
		先写个简单的例子,该过滤器是指定规定的字符串长度: html: <div ng-app="app" ng-controller="ctrl"> &l ... 
- JAVA入门[15]-过滤器filter
		一.过滤器 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的: 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 参考:http:/ ... 
- Python 15 html 基础 - CSS &javascript &DOM
		本节内容 CSS基础 javascript基础 DOM 前言,这边这块楼主已经很熟悉了,CSS天天用到,简单的一些javascript也是所以就挑点重点说了.然后就是dom不怎么用,但是其实也用不到, ... 
- 第七章 过滤器基础 Filter
		简介:SUN从Servlet2.3开始添加一项激动人心的功能,就是过滤器(Filter).WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图 ... 
- AngularJs filter 过滤器基础【转】
		Filter Ng里的过滤器. currency:把一个数字格式化成货币模式(如$1,234.56).当没有提供任何货币符号时,默认使用当前区域的符号. 使用: HTML:{{ currency_ex ... 
- Python基础.md
		数据结构 列表 访问 list1 = ['java','C','C++','Python'] In [10]: list1[1] Out[10]: 'C' In [11]: list1[-1] Out ... 
随机推荐
- Linux常用指令之二
			1.用户权限 1).查看文件属性 ls -l file(ll别名) drwxr-x--- 2 root root 4096 Jan 20 19:39 mnt # ... 
- C++ 调用 Lua
			直接上代码: 1:c++代码 #include <lua.hpp> #include <LuaBridge/LuaBridge.h> #include <iostream ... 
- Synchronized常用用法
			我们都知道 Synchronized 是线程安全同步用的,大部分程序可能只会用到同步方法上面.其实 Synchronized 可以用到更多的场合,栈长列举了以下几个用法. 1.同步普通方法 这个也是我 ... 
- css实战第三天小结
			1.谈一谈对层级的理解: 如果对两个并列的子元素都设置了相对于同一个父元素(如果没有设置父元素那么默认相对于浏览器而言)进行了定位(相对定位),则这两个都具有相同的层级(默认为0),他们的trbl也默 ... 
- GitHub万星的ML算法面试大全
			项目地址:https://github.com/imhuay/Algorithm_Interview_Notes-Chinese 如下所示为整个项目的结构,其中从机器学习到数学主要提供的是笔记与面试知 ... 
- 避免crontab输出日志
			在cron的自动执行语句后加上> /dev/null 2>&1 例:4 3 * * * /usr/bin/a.sh > /dev/null 2>&1这样就OK拉 ... 
- python hashillb 模块
			hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 import hashlib # ## ... 
- js_字符转Unicode
			在开发中总会遇到关于Unicode的转码和解码,每次都找工具转/解码很麻烦 ,今天在网上get到一个简单的转/解Unicode的函数. var UnicodeFun = { toUnicode: fu ... 
- spring mvc 跨域问题。。。解决
			官方推荐方式: http://spring.io/blog/2015/06/08/cors-support-in-spring-framework 方式1: $.ajax({ //前台:常规写法.注意 ... 
- 44.scrapy爬取链家网站二手房信息-2
			全面采集二手房数据: 网站二手房总数据量为27650条,但有的参数字段会出现一些问题,因为只给返回100页数据,具体查看就需要去细分请求url参数去请求网站数据.我这里大概的获取了一下筛选条件参数,一 ... 
