servlet 过滤器是客户端与目标间的中间层组建,用于拦截客户端的请求与相应信息。
首先先看如下例子:
(1) 创建网站
(2) 创建Servlet, Servlet 名称是Servletnew ,包名是:com.jht
(3) 增加Apache Tomcat到Library
(4)WebContent/WEB-INF 增加web.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 声明字符编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.jht.CharacterEncodingFilter</filter-class>
<!-- 设置初始化参数 -->
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<!-- 映射字符编码过滤器 -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!-- 与所有请求关联 -->
<url-pattern>/*</url-pattern>
<!-- 设置过滤器对应的请求方式 -->
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<!-- Servlet配置 -->
<servlet>
<servlet-name>MyServletnew</servlet-name>
<servlet-class>com.jht.MyServletnew</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletnew</servlet-name>
<url-pattern>/MyServletnew</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
(5) 在WebConntent下面增加index.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<!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=GBK">
<title>Insert title here</title>
</head>
<body>
<form action="MyServletnew" method="post">
<p>
请输入你的中文名字:
<input type="text" name="name">
<input type="submit" value="提 交">
</p>
</form>
</body>
</html>
(6) 创建类文件CharacterEncodingFilter,实现过滤。
package com.jht;
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;
/**
* 字符编码过滤器
* @author
*/
public class CharacterEncodingFilter implements Filter{
// 字符编码(初始化参数)
protected String encoding = null;
// FilterConfig对象
protected FilterConfig filterConfig = null;
// 初始化方法
public void init(FilterConfig filterConfig) throws ServletException {
// 对filterConfig赋值
this.filterConfig = filterConfig;
// 对初始化参数赋值
this.encoding = filterConfig.getInitParameter("encoding");
}
// 过滤器处理方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 判断字符编码是否有效
if (encoding != null) {
// 设置request字符编码
request.setCharacterEncoding(encoding);
// 设置response字符编码
response.setContentType("text/html; charset="+encoding);
}
// 传递给下一过滤器
chain.doFilter(request, response);
}
// 销毁方法
public void destroy() {
// 释放资源
this.encoding = null;
this.filterConfig = null;
}
}
(7) MyServletnew.java 文件内容如下:
package com.jht;
import java.io.IOException;
import java.io.PrintWriter;
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 MyServletnew
*/
@WebServlet("/MyServletnew")
public class MyServletnew extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public MyServletnew() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
// 获取表单参数
String name = request.getParameter("name");
if(name != null && !name.isEmpty()){
System.out.println(name);
out.print("你好 " + name);
out.print(",<br>欢迎来到我的主页。");
}else{
out.print("请输入你的中文名字!");
}
out.print("<br><a href=index.jsp>返回</a>");
out.flush();
out.close();
}
}