15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > 大数据从入门到深入:JavaEE 之 动态网页开发基础 过滤器的简单使用

大数据从入门到深入:JavaEE 之 动态网页开发基础 过滤器的简单使用

时间:2023-05-24 22:18:02 | 来源:网站运营

时间:2023-05-24 22:18:02 来源:网站运营

大数据从入门到深入:JavaEE 之 动态网页开发基础 过滤器的简单使用:

第六章 JSP拓展 : 过滤器的简单使用

6.1 过滤器概述

6.1.1 什么是过滤器?

Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的 处理链。

优点:过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后 面的过滤器和请求的内容。

而在实际使用时,就要特别注意过滤链的执行顺序问题;

6.1.2 主要作用

在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest 。

根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和据。

在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。

根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据。

所以我们可以利用过滤器,在我们每次真正处理页面请求之前,设定request的编码这样我们就 不用挨个servlet设置编码了;

6.2 过滤器概述

6.2.1 创建一个过滤器

在项目的util包中点击鼠标右键,选择 "new" ­­> "other"

在弹出的窗口中 输入 filter,选择Filter 点击 "next"

在弹出的页面中输入过滤器名称

输入名称后点击 "Finish" 即可

package com.hnxy.web;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;/** * Servlet Filter implementation class EncodingFitler */public class EncodingFitler implements Filter { /** * Default constructor. */ public EncodingFitler() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here // pass the request along the filter chain chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub }}

6.2.2 过滤器方法介绍

1.public void init(FilterConfig filterConfig) throws ServletException
由 Web 容器调用,指示将放入服务中的过滤器。servlet 容器只在实例化过滤器之后调用一次 init 方法。 在要求过滤器做任何过滤工作之前,init 方法必须成功完成。如果 init 方法抛出 ServletException或没有 在 Web 容器定义的时间段内返回,则 Web 容器无法将过滤器放入服务中。这个和Servlet的生命周期有 点类似,也是只初始化一次,destroy()也是执行一次。

2.public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
每次由于对链末尾的某个资源的客户端请求而通过链传递请求/响应对时,容器都会调用 Filter 的 doFilter 方法。传入此方法的 FilterChain 允许 Filter 将请求和响应传递到链中的下一个实体。
此方法的典型实现遵循以下模式:
1. 检查请求
2. 有选择地将带有自定义实现的请求对象包装到用于输入过滤的过滤器内容或头中
3. 有选择地将带有自定义实现的响应对象包装到用于输出过滤的过滤器内容或头中
4. a) 既可以使用 FilterChain 对象 (chain.doFilter()) 调用链中的下一个实体,
4. b) 也可以不将请求/响应对传递给过滤器链中的下一个实体,从而阻塞请求处理
5. 在调用过滤器链中的下一个实体之后直接设置响应上的头。

3.public void destroy()
由 Web 容器调用,指示将从服务中取出的过滤器。此方法仅在过滤器的 doFilter 方法中的所有线程都已 退出之后调用一次,或者在过了超时期之后调用。在调用此方法之后,Web 容器不会再对此过滤器实例 调用 doFilter 方法。此方法为过滤器提供了一个清除持有的所有资源(比如内存、文件句柄和线程)的 机会,并确保任何持久状态都与内存中该过滤器的当前状态保持同步。

6.2.3 过滤器简单使用

1) 修改拦截规则,打开web.xml找到过滤器的配置部分(和servlet很像就是名称不一样)

<filter> <display-name>EncodingFitler</display-name> <filter-name>EncodingFitler</filter-name> <filter-class>com.hnxy.web.EncodingFitler</filter-class> </filter> <filter-mapping> <filter-name>EncodingFitler</filter-name> <url-pattern>/EncodingFitler</url-pattern> </filter-mapping>url­Pattern 设置拦截过则 /* 代表任何对servlet的请求 过滤器都要先拦截处理后再交给具体 servlet

<filter> <display-name>EncodingFitler</display-name> <filter-name>EncodingFitler</filter-name> <filter-class>com.hnxy.web.EncodingFitler</filter-class> </filter> <filter-mapping> <filter-name>EncodingFitler</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>2) 编写doFilter方法

/** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 设置请求流编码 request.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); }完成效果

package com.hnxy.web;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 EncodingFitler */public class EncodingFitler implements Filter { /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 设置请求流编码 request.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub }}3) 测试

页面 :

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><div> <form action="Test1Action" method="post"> <p> 请输入名称 : <input type="text" name="userName" /> </p> <p> <button type="submit">提交</button> </p> </form></div></body></html>servlet :

package com.hnxy.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class Test1Action */public class Test1Action extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(request.getParameter("userName")); }}我们可以看到,现在servlet没有对数据做任何参数上的处理,如果没有过滤器是这样的:

设置过滤器前

设置过滤器后

6.3 过滤器实战­druid的web监控页面配置

其实我们学习过滤器主要是学过滤器的原理与配置,以后需要我们自己写过滤器的时候很少, 都是别的技术写好过滤器我们引用即可,就好比我们现在使用的数据源

druid就是其中之一,druid数据源不光有出色的数据库连接的管理功能,它还有很强悍的web管 理功能!现在我们就来简单配置一个druid的web管理功能

很简单一共修改两个地方即可

1) 修改数据库连接类打开SQLweb统计功能

package com.hnxy.utils;import java.sql.SQLException;import com.alibaba.druid.pool.DruidDataSource;/** * 数据库连接工具类 * @author My * */public class JdbcUtil { // 创建数据库的连接对象 private static final String CONN_DRIVER = "com.mysql.jdbc.Driver"; private static final String CONN_URL = "jdbc:mysql://127.0.0.1:3306/userdb?characterEncoding=UTF-8"; private static final String CONN_USER = "root"; private static final String CONN_PASSWORD = "root"; // 创建数据源对象 private static DruidDataSource dataSource = new DruidDataSource(); // 赋值 static{ dataSource.setDriverClassName(CONN_DRIVER); dataSource.setUrl(CONN_URL); dataSource.setUsername(CONN_USER); dataSource.setPassword(CONN_PASSWORD); // 开启SQL语句的统计功能 try { dataSource.addFilters("stat"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 添加获取数据源的方法 * @return */ public static DruidDataSource getDataSource() { return dataSource; }}2) web.xml中加入druid的核心servlet和过滤器即可

<!-- Druid,监控数据库,以及WEB访问连接信息 --> <filter> <filter-name>DruidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> </filter> <filter-mapping> <filter-name>DruidWebStatFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置 Druid 监控信息显示页面 --> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> <init-param> <!-- 允许清空统计数据 --> <param-name>resetEnable</param-name> <param-value>true</param-value> </init-param> <init-param> <!-- 用户名 --> <param-name>loginUsername</param-name> <param-value>admin</param-value> </init-param> <init-param> <!-- 密码 --> <param-name>loginPassword</param-name> <param-value>admin123</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping>配置好之后正常开启tomcat,正常访问项目,你会发现加不加都没有什么问题!你可以先玩一会 儿项目,然后在访问下面的地址

http://127.0.0.1:8080/javaweb_class3_tp2/druid

你就会发现druid的管理界面了

我们设置的是 用户名 admin 密码 admin123 输入即可登录

登录后显示druid的监控主页面,主页面中可以查看当前数据源,SQL语句性能监控,web 请求 URL和HttpSession的监控

SQL监控页面

HTTP URL监控:

到此,我们JavaEE的web基础阶段全部完事!

关键词:基础,过滤,使用,简单,入门,数据,深入,动态

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭