过滤器和监听器的使用
程序员文章站
2022-05-22 20:26:12
...
Filter
- xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>javaFilterStudying</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--Servlet 依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!--JSP 依赖-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<!--JSTL表达式的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!--standard标签库-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!--数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
</project>
- 编写过滤器
package com.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @author 125827
*/
public class CharacterEncodingFilter implements Filter {
// 初始化
public void init(FilterConfig filterConfig) {
System.out.println("characterEncodingFilter初始化");
}
//filter Chain过滤链
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("CharacterEncodingFilter执行前....");
//让我们的请求继续走,如果不写,科序到这里就被拦截停止!
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("CharacterEncodingFilter执行后....");
}
// 销毁
public void destroy() {
System.out.println("characterEncodingFilter销毁");
}
}
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>showServlet</servlet-name>
<servlet-class>com.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>showServlet</servlet-name>
<url-pattern>/servlet/show</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>showServlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
</web-app>
- servlet类
package com.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author 125827
*/
public class ShowServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("你好,世界!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
监听器
实现一个监听器的接口;(有N种)
1、编写一个监听器实现
监听器的接口.….
package com.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @author 125827
* @ 统计网站在线人数
*/
public class OnlineListener implements HttpSessionListener {
// 创建session监听:看你的一举一动
//一旦创建Session就会触发一次这个事件
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
System.out.println( httpSessionEvent.getSession().getId());
Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
if(onlineCount == null ){
onlineCount = new Integer(1);
}else{
int count = onlineCount.intValue();
onlineCount = new Integer(count + 1);
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
//销毁session监助
//一旦销毁Session就会触发一次这个事件!
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount = (Integer) servletContext.getAttribute("OnlineCount");
if(onlineCount == null ){
onlineCount = new Integer(0);
}else{
int count = onlineCount.intValue();
onlineCount = new Integer(count - 1);
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
/* <!--session销毁;
1.手动销毁 getsession().invalidate( );
2.自动销毁-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
*/
}
2、注册监听器(xml)
<!--注册监听器-->
<listener>
<listener-class>com.listener.OnlineListener</listener-class>
</listener>
3、看情况是否使用
上一篇: JavaWeb学习笔记-Web基础-03
推荐阅读
-
Falsk 与 Django 过滤器的使用与区别详解
-
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
-
python ChainMap的使用和说明详解
-
webpack使用教程(webpack5和4的区别)
-
SQL Server遍历表中记录的2种方法(使用表变量和游标)
-
SQL Server 日期函数CAST 和 CONVERT 以及在业务中的使用介绍
-
sqlserver中delete、update中使用表别名和oracle的区别
-
使用phonegap克隆和删除联系人的实现方法
-
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
-
Python3里的super()和__class__使用介绍