监听器(Listener)就是一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即被执行。Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截,从而实现一些特殊的功能。Filter就是过滤从客户端向服务器发送的请求。
目录
2、ServletContextListener监听器的使用
4、ServletRequestListener监听器的使用
监听器中的常用术语如下:
在Servlet中定义了多种类型的监听器,它们用于监听的事件源分别是ServletContext、HttpSession和ServletRequest这三个域对象。
Servlet中监听器的分类主要如下:
它是用来监听ServletContext域对象的创建和销毁的监听器。
监听ServletContext对象的创建和销毁方法:

下面编写一个类实现ServletContextListener接口并重写监听方法,如下:
-
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
-
- public class MyServletContextListener implements ServletContextListener {
- @Override
- public void contextInitialized(ServletContextEvent servletContextEvent) {
- System.out.println("ServletContext对象被创建了");
- }
-
- @Override
- public void contextDestroyed(ServletContextEvent servletContextEvent) {
- System.out.println("ServletContext对象被销毁了");
- }
- }
需要在web.xml中配置监听器,如下:
- "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">
- <listener>
- <listener-class>listener.MyServletContextListenerlistener-class>
-
- listener>
- web-app>
该监听器是用来监听HttpSession对象的创建和销毁的。
用于监听HttpSession对象的创建和销毁的方法:

下面编写代码实现监听HttpSession对象的创建和销毁:
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
-
- public class MyHttpSessionListener implements HttpSessionListener {
-
- @Override
- public void sessionCreated(HttpSessionEvent httpSessionEvent) {
- System.out.println("HttpSession对象被创建了");
- }
-
- @Override
- public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
- System.out.println("HttpSession对象被销毁了");
- }
- }
需要在web.xml文件中配置监听器,具体如下:
- "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">
- <listener>
- <listener-class>listener.MyServletContextListenerlistener-class>
- listener>
- <listener>
- <listener-class>listener.MyHttpSessionListenerlistener-class>
- listener>
- web-app>
需要注意:
该监听器是用来监听ServletRequest对象的创建和销毁。
监听ServletRequest对象的创建和销毁的方法如下:

编写该监听器代码如下:
- import javax.servlet.ServletRequestEvent;
- import javax.servlet.ServletRequestListener;
-
- public class MyServletRequestListener implements ServletRequestListener {
-
- @Override
- public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
- System.out.println("servletRequest对象被创建了");
- }
-
- @Override
- public void requestInitialized(ServletRequestEvent servletRequestEvent) {
- System.out.println("servletRequest对象被销毁了");
- }
- }
在web.xml中配置监听器如下:
- "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">
- <listener>
- <listener-class>listener.MyServletContextListenerlistener-class>
- listener>
- <listener>
- <listener-class>listener.MyHttpSessionListenerlistener-class>
- listener>
- <listener>
- <listener-class>listener.MyServletRequestListenerlistener-class>
- listener>
- web-app>
注意:

对上述案例的实现,编写一个显示在线人数的JSP页面,如下:
- <%--
- Created by IntelliJ IDEA.
- User: nuist__NJUPT
- Date: 2022-08-19
- Time: 20:06
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>显示当前在线人数title>
- head>
- <body>
- <h1>在线人数:${count}h1>
- body>
- html>
编写监听器类,如下:
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
-
- public class MyHttpSessionListener implements HttpSessionListener {
-
- @Override
- public void sessionCreated(HttpSessionEvent httpSessionEvent) {
- HttpSession httpSession = httpSessionEvent.getSession() ;
- System.out.println(httpSession.getId()+"上线了");
- Integer count = (Integer) httpSession.getServletContext().getAttribute("count");
- count ++ ;
- httpSession.getServletContext().setAttribute("count",count);
- }
-
- @Override
- public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
- HttpSession httpSession = httpSessionEvent.getSession() ;
- System.out.println(httpSession.getId()+"离线了");
- Integer count = (Integer) httpSession.getServletContext().getAttribute("count");
- count -- ;
- httpSession.getServletContext().setAttribute("count",count);
- }
- }
需要在web.xml中配置监听器:
- "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">
- <listener>
- <listener-class>listener.MyServletContextListenerlistener-class>
- listener>
- <listener>
- <listener-class>listener.MyHttpSessionListenerlistener-class>
- listener>
- web-app>



通过实现响应的接口就可以对属性的变更进行监听,和上面的监听类似,这里不再演示。
Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截,从而实现一些特殊的功能。Filter就是过滤从客户端向服务器发送的请求。
Filter的创建和销毁是由web服务器负责。Web应用程序启动的时候,web服务器创建Filter的实例对象。并调用其init方法进行初始化(filter对象只会创建一次,init方法也只会执行一次)。每次filter进行拦截的时候,都会执行doFilter的方法。当服务器关闭的时候,应用从服务器中移除的时候,服务器会销毁Filter对象。
首先编写一个类实现Filter接口,进行过滤操作,并在web.xml文件中配置Filter.
-
- import javax.servlet.*;
- import java.io.IOException;
-
- public class MyFilter implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
-
- }
-
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- System.out.println("MyFilter被执行了...");
- //放行
- filterChain.doFilter(servletRequest,servletResponse);
- }
-
- @Override
- public void destroy() {
-
- }
- }
- "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">
- <filter>
- <filter-name>MyFilterfilter-name>
- <filter-class>filter.MyFilterfilter-class>
- filter>
- <filter-mapping>
- <filter-name>MyFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
- web-app>
它是用来获得Filter的相关的配置的对象。该对象的常用API如下:

演示代码如下:
- import javax.servlet.*;
- import java.io.IOException;
- import java.util.Enumeration;
-
- public class MyFilter implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- //获得过滤器的名称
- String name = filterConfig.getFilterName() ;
- System.out.println(name);
- //获得初始化参数
- String username = filterConfig.getInitParameter("username") ;
- String password = filterConfig.getInitParameter("password") ;
- System.out.println(username + " " + password);
- //获得所有的初始化参数
- Enumeration
names = filterConfig.getInitParameterNames(); - while (names.hasMoreElements()){
- String name1 = names.nextElement() ;
- String value = filterConfig.getInitParameter(name1) ;
- System.out.println(name1 + " " + value);
- }
- }
-
- @Override
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
- System.out.println("MyFilter被执行了...");
- //放行
- filterChain.doFilter(servletRequest,servletResponse);
- }
-
- @Override
- public void destroy() {
-
- }
- }
在web.xml中配置过滤器如下:
- "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">
- <filter>
- <filter-name>MyFilterfilter-name>
- <filter-class>filter.MyFilterfilter-class>
- <init-param>
- <param-name>usernameparam-name>
- <param-value>rootparam-value>
- init-param>
- <init-param>
- <param-name>passwordparam-name>
- <param-value>123param-value>
- init-param>
- filter>
- <filter-mapping>
- <filter-name>MyFilterfilter-name>
- <url-pattern>/*url-pattern>
- filter-mapping>
- web-app>
案例需求:
现在一个网站上需要有登录的功能,在登录成功后,重定向到后台的成功页面(后台的页面有很多)。如果现在没有登录直接在地址栏上输入后台页面地址。
编写一个过滤器:可以对没有登录的用户进行拦截。(没有登录,回到登录页面。如果已经登录,放行。)
过滤器的拦截代码如下:如果得到的用户为null,说明未登录,则提示msg信息回写到浏览器,否则过滤器放行。
- import com.domain.User;
-
- 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.http.HttpServletRequest;
-
- /**
- *
- */
- public class PrivilegeFilter implements Filter{
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
-
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- // 判断:判断用户是否已经登录了。如果已经登录,放行。如果没有登录,回到登录页面!
- HttpServletRequest req = (HttpServletRequest) request;
- User existUser = (User) req.getSession().getAttribute("existUser");
- // 判断:
- if(existUser == null){
- // 没有登录:
- req.setAttribute("msg", "您还没有登录!没有权限访问!");
- req.getRequestDispatcher("/login.jsp").forward(req, response);
- }else{
- // 已经登录:
- chain.doFilter(req, response);
- }
- }
-
- @Override
- public void destroy() {
-
- }
-
- }
首先需要做数据准备,创建数据库和表,并写入一些数据,如下:
- create database if not exists web05;
- use web05;
- create table if not exists user(
- id int primary key auto_increment,
- username varchar(20),
- password varchar(20)
- );
- insert into user values (null,'aaa','123');
视图层的登录页面login.jsp如下:
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- 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 heretitle>
- head>
- <body>
- <h1>登录页面h1>
- <h3><font color="red">${ msg }font>h3>
- <form action="${ pageContext.request.contextPath }/UserServlet" method="post">
- <table border="1" width="400">
- <tr>
- <td>用户名td>
- <td><input type="text" name="username">td>
- tr>
- <tr>
- <td>密码td>
- <td><input type="password" name="password">td>
- tr>
- <tr>
- <td colspan="2"><input type="submit" value="登录">td>
- tr>
- table>
- form>
- body>
- html>
视图层登录成功的success.jsp代码入下:
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- 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 heretitle>
- head>
- <body>
- <h1>您已经登录成功!欢迎:${ existUser.username }h1>
- <a href="${ pageContext.request.contextPath }/jsp/sub.jsp">提交数据a>
- body>
- html>
控制层的servlet代码如下:
- import com.domain.User;
- import com.model.UserModel;
-
- import java.io.IOException;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
-
- /**
- * 用户登录的Servlet
- */
- public class UserServlet extends HttpServlet {
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- try{
- // 接收数据:
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- // 封装数据:
- User user = new User();
- user.setUsername(username);
- user.setPassword(password);
- // 处理数据:
- UserModel userModel = new UserModel();
- User existUser = userModel.login(user);
- // 根据处理结果页面跳转:
- if(existUser == null){
- // 登录失败
- request.setAttribute("msg", "用户名或密码错误!");
- request.getRequestDispatcher("/login.jsp").forward(request, response);
- }else{
- // 登录成功
- request.getSession().setAttribute("existUser", existUser);
- response.sendRedirect(request.getContextPath()+"/jsp/success.jsp");
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- }
-
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
- doGet(request, response);
- }
-
- }
封装用户信息的JavaBean代码如下:
- public class User {
- private Integer id;
- private String username;
- private String password;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
-
- }
处理查询任务的Model层代码如下:
- import java.sql.SQLException;
-
- import com.domain.User;
- import com.utils.JDBCUtils;
- import org.apache.commons.dbutils.QueryRunner;
- import org.apache.commons.dbutils.handlers.BeanHandler;
-
- public class UserModel {
-
- public User login(User user) throws SQLException {
- QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
- String sql = "select * from user where username = ? and password = ?";
- User existUser = queryRunner.query(sql, new BeanHandler
(User.class), user.getUsername(),user.getPassword()); - return existUser;
- }
-
- }
使用的获得连接池的工具类如下:
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
-
- import javax.sql.DataSource;
-
- import com.mchange.v2.c3p0.ComboPooledDataSource;
-
- public class JDBCUtils {
- // 创建一个连接池:但是这个连接池只需要创建一次即可。
- private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
-
- /**
- * 获得连接的方法
- * @throws SQLException
- */
- public static Connection getConnection() throws SQLException{
- return dataSource.getConnection();
- }
-
- /**
- * 获得连接池:
- */
- public static DataSource getDataSource(){
- return dataSource;
- }
-
- }
数据库的参数配置如下:
- "1.0" encoding="UTF-8"?>
- <c3p0-config>
- <default-config>
- <property name="driverClass">com.mysql.jdbc.Driverproperty>
- <property name="jdbcUrl">jdbc:mysql:///web05property>
- <property name="user">rootproperty>
- <property name="password">123456property>
-
- <property name="initialPoolSize">5property>
- <property name="minPoolSize">5property>
- <property name="maxPoolSize">20property>
- default-config>
- c3p0-config>
web.xml中的配置如下:
- "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>UserServletservlet-name>
- <servlet-class>com.controller.UserServletservlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>UserServletservlet-name>
- <url-pattern>/UserServleturl-pattern>
- servlet-mapping>
-
- <filter>
- <filter-name>PrivilegeFilterfilter-name>
- <filter-class>com.filter.PrivilegeFilterfilter-class>
- filter>
-
- <filter-mapping>
- <filter-name>PrivilegeFilterfilter-name>
- <url-pattern>/jsp/*url-pattern>
- filter-mapping>
- web-app>
网站,需要向后台提交中文的数据(有可能是GET也有可能是POST)。中文处理根据不同的请求方式,处理的方式也是不一样的。
需要调用request.getParameter();方法接收数据,但是这个时候无论是get还是post接收的数据都是存在乱码。现在调用request.getParameter()方法无论是get还是post请求提交的中文,都没有乱码。
此处使用增强的类对字符串乱码进行处理,使用过滤器直接调用即可。
提交数据的jsp页面:
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- 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 heretitle>
- head>
- <body>
- <h1>get提交方式h1>
- <form action="${ pageContext.request.contextPath }/ServletDemo1" method="get">
- 姓名:<input type="text" name="name"/><br>
- <input type="submit" value="提交">
- form>
- <h1>post提交方式h1>
- <form action="${ pageContext.request.contextPath }/ServletDemo1" method="post">
- 姓名:<input type="text" name="name"/><br>
- <input type="submit" value="提交">
- form>
- body>
- html>
接收数据的servlet:
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- /**
- * 接收数据的Servlet
- */
- public class ServletDemo1 extends HttpServlet {
-
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String name = request.getParameter("name");
- System.out.println("GET方式接收的名称:"+name);
- }
-
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
- {
- String name = request.getParameter("name");
- System.out.println("POST方式接收的名称:"+name);
- }
-
- }
增强的类,处理乱码问题:
- import java.io.UnsupportedEncodingException;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
-
- public class MyHttpServletRequest extends HttpServletRequestWrapper{
-
- private HttpServletRequest request;
-
- public MyHttpServletRequest(HttpServletRequest request) {
- super(request);
- this.request = request;
- }
-
- @Override
- // 增强request.getParameter()方法:
- public String getParameter(String name) {
- // 获得请求方式:
- String method = request.getMethod();
- // 根据get还是post请求进行不同方式的乱码的处理:
- if("GET".equalsIgnoreCase(method)){
- // get方式的请求
- String value = super.getParameter(name);
- try {
- value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return value;
- }else if("POST".equalsIgnoreCase(method)){
- // post方式的请求
- try {
- request.setCharacterEncoding("UTF-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
-
- return super.getParameter(name);
- }
-
- }
通用字符编码过滤器:
- 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.http.HttpServletRequest;
-
-
- public class GenericEncodingFilter implements Filter{
-
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
-
- }
-
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- // 在过滤器中增强request对象,并将增强后的request对象传递给Servlet:
- HttpServletRequest req = (HttpServletRequest) request;
- // 增强req:
- MyHttpServletRequest myReq = new MyHttpServletRequest(req);
- chain.doFilter(myReq, response);
- }
-
- @Override
- public void destroy() {
-
- }
-
- }
在web.xml配置servlet和filter:
- "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>UserServletservlet-name>
- <servlet-class>com.controller.UserServletservlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>UserServletservlet-name>
- <url-pattern>/UserServleturl-pattern>
- servlet-mapping>
- <servlet>
- <servlet-name>ServletDemo1servlet-name>
- <servlet-class>com.controller.ServletDemo1servlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>ServletDemo1servlet-name>
- <url-pattern>/ServletDemo1url-pattern>
- servlet-mapping>
- <filter>
- <filter-name>PrivilegeFilterfilter-name>
- <filter-class>com.filter.PrivilegeFilterfilter-class>
- filter>
-
- <filter-mapping>
- <filter-name>PrivilegeFilterfilter-name>
- <url-pattern>/jsp/*url-pattern>
- filter-mapping>
- <filter>
- <filter-name>GenericEncodingFilterfilter-name>
- <filter-class>com.filter.GenericEncodingFilterfilter-class>
- filter>
-
- <filter-mapping>
- <filter-name>GenericEncodingFilterfilter-name>
- <url-pattern>/jsp/*url-pattern>
- filter-mapping>
- web-app>