Filter过滤器--课堂代码笔记

web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
						http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
	id="WebApp_ID" version="4.0">
	<!-- xml=可扩展的标记语言 -->
	<!-- ns=namespace命名空间 -->
	<!-- xsd=xml schema definition文档结构描述 -->

<!-- 	<servlet> -->
<!-- 		<servlet-name>Test1Servlet</servlet-name> -->
<!-- 		<servlet-class>test211230.Test1Servlet</servlet-class> -->
<!-- 	</servlet> -->
<!-- 	<servlet-mapping> -->
<!-- 		<servlet-name>Test1Servlet</servlet-name> -->
<!-- 		<url-pattern>/Test1Servlet</url-pattern>    -->
<!-- 	</servlet-mapping> -->
<!-- 		load-on-startup标签作用:tomcat启动时执行该servlet的初始化 -->
<!-- 		当值为负整数或未指定值时,该servlet是在第一次被调用时加载并初始化 -->
<!-- 		当值为0或正整数是,tomcat启动时会加载并初始化,值越小优先级越高 -->
<!-- 		一般会设置上,空间换时间,避免用户在使用是加载等待 -->
	<servlet>
		<servlet-name>Test3Servlet</servlet-name>
		<servlet-class>test211230.Test3Servlet</servlet-class>
		<init-param>
			<param-name>username</param-name>
			<param-value>zhangsan</param-value>
		</init-param>
		<init-param>
			<param-name>password</param-name>
			<param-value>123456</param-value>
		</init-param>		
	</servlet>
	<servlet-mapping>
		<servlet-name>Test3Servlet</servlet-name>
		<url-pattern>/Test3Servlet</url-pattern>   
	</servlet-mapping>
	
	
	<filter>
		<filter-name>TestFilter</filter-name>
		<filter-class>test220105.TestFilter</filter-class>
		<init-param>
			<param-name>username</param-name>
			<param-value>zhangsan</param-value>
		</init-param>
		<init-param>
			<param-name>password</param-name>
			<param-value>123123</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>TestFilter</filter-name>
		<url-pattern>/test/test220104/TestUpload.jsp</url-pattern>
<!-- 		<dispatcher>REQUEST</dispatcher> -->
<!-- 默认值是request -->
<!-- 		<dispatcher>FORWARD</dispatcher> -->
<!-- 		<dispatcher>INCLUDE</dispatcher> -->
	</filter-mapping>	
	<filter-mapping>
		<filter-name>TestFilter</filter-name>
		<url-pattern>/Test1Servlet</url-pattern>
	</filter-mapping>

	<filter>
		<filter-name>Test2Filter</filter-name>
		<filter-class>test220105.Test2Filter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Test2Filter</filter-name>
		<url-pattern>/test/test220104/TestUpload.jsp</url-pattern>
	</filter-mapping>	
	<filter-mapping>
		<filter-name>Test2Filter</filter-name>
		<url-pattern>/Test1Servlet</url-pattern>
	</filter-mapping>
	

	<display-name>demo211229</display-name>
	<welcome-file-list>
		<!-- 欢迎页 -->
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

TestUpload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传图片</title>
</head>
<body>
<!-- http://127.0.0.1:8080/demo211229/test/test220104/TestUpload.jsp -->
 <form action="/demo211229/UploadServlet" method="post" enctype="multipart/form-data">
 	<input type="file" name="uploadFile1" /><br>
 	<input type="file" name="uploadFile2" /><br>
 	<input type="text" name="coad" /><br>
 	<input type="submit" value="上传" />

 </form>
 <% System.out.print("---上传图片---");%>

</body>
</html>

TestFilter.java

package test220105;

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;
import javax.servlet.annotation.WebFilter;

//@WebFilter("/Test1Servlet")
//@WebFilter(urlPatterns = { "/Test1Servlet", "/test/test220104/TestUpload.jsp" }) // 过滤多个网络资源要用--标准写法
//@WebFilter("/*")//将所有路径进行过滤
//@WebFilter("/web/*")//将web文件下的所有路径进行过滤
public class TestFilter implements Filter {

	// Filter过滤器
	// 可以动态的过滤请求request或回复response
	// 可以将一个或多个filter加到一个或多个网络资源上 -- 和servlet最大的区别

	// 1-在客户端发送请求到服务器端之前,过滤处理请求request对象--(用的比较多)
	// 2-在服务器回复请求到客户端之前,过滤处理回复response对象

	// 1-创建一个类,实现了Filter接口
	// 2-配置web.xml / @WebFilter
	// 3-使用 重写doFilter方法

	public TestFilter() {
		System.out.println("TestFilter--构造方法");
	}
	
	public void init(FilterConfig fConfig) throws ServletException {//初始化
		System.out.println("TestFilter.init");
		String value = fConfig.getInitParameter("username");//得到初始话的参数名usernam对应的参数值
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {//FilterChain 过滤链-顺序问题:按照配置的顺序前后呈回路执行
		System.out.println("TestFilter.doFilter--之前");
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");//都要放在放行之前写
		chain.doFilter(request, response);//放行当前过滤器(执行)
		System.out.println("TestFilter.doFilter--之后");
	}


}

Test2Filter.java

package test220105;

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;
import javax.servlet.annotation.WebFilter;

public class Test2Filter  implements Filter{

	@Override
	public void doFilter(ServletRequest var1, ServletResponse var2, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("Test2Filter.doFilter--之前"); 
		chain.doFilter(var1, var2);//放行当前过滤器(执行)
		System.out.println("Test2Filter.doFilter--之后");
	}

}

CharFilter.java

package test220105;

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;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class CharFilter
 */
@WebFilter("/*")
public class CharFilter implements Filter {
	
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		req.setCharacterEncoding("UTF-8");//设置上字符的编码方式
		resp.setCharacterEncoding("UTF-8");//都要放在放行之前写
		chain.doFilter(req, resp);//放行当前过滤器(执行)
	}

  
}

UserFilter.java

package test220105;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class UserFilter implements Filter {
	// 防盗链
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		//核心问题:判断用户是否登录
		HttpServletRequest requset = (HttpServletRequest) req;
		HttpSession session = requset.getSession();
		Object user = session.getAttribute("user");
		if(user==null) {//跳转页面
			requset.getRequestDispatcher("").forward(req, resp);
		}else {
			chain.doFilter(req, resp);//放行访问
		}

	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值