[1]过滤器的原理

[2]过滤链

[3]Filter接口

*public void init(FilterConfig filterConfig)throws ServletException//过滤器初始化方法,此方法在过滤器初始化时被调用
*public void doilter(ServletRequest request , ServletResponse response,FilterChain chain)throws IOException, ServletException//对请求进行过滤 处理
*public void destroy();//销毁方法,以便释放资源
[4]FilterConfig接口

*public Strng getFilterName();//用于获取过滤器的名字
*public ServletContext getServletContent();//获取Servlet上下文
*public String getInitParameter(String name);//获取过滤器的初始化参数值
*public Enumeration getInitParameterNames();//获取过滤器的所有初始化参数
[5]FilterChain接口
public void doFilter(ServletRequest request request, ServletResponse response)throws IOException , ServletException
[6]过滤器的配置
-
-
<</SPAN>filter> -
-
<</SPAN>filter-name>CharactorFilter</</SPAN>filter-name> -
-
<</SPAN>filter-class>com.lyq.CharactorFilter</</SPAN>filter-class> -
-
<</SPAN>init-param> -
-
<</SPAN>param-name>encoding</</SPAN>param-name> -
-
<</SPAN>param-value>UTF-8</</SPAN>param-value> -
</</SPAN>init-param> -
</</SPAN>filter> -
-
<</SPAN>filter-mapping> -
-
<</SPAN>filter-name>CharactorFilter</</SPAN>filter-name> -
-
<</SPAN>url-pattern>/*</</SPAN>url-pattern> -
</</SPAN>filter-mapping>
CharactorFilter
com.lyq.CharactorFilter
encoding
UTF-8
CharactorFilter
/*
[7]实现字符乱码过滤器处理实例
JSP文件
- <</SPAN>body>
-
<</SPAN>form action="AddServlet" method="post"> -
<</SPAN>table align="center" border="1" width="350"> -
<</SPAN>tr> -
<</SPAN>td class="2" align="center" colspan="2"> -
<</SPAN>h2>添加图书信息</</SPAN>h2> -
</</SPAN>td> -
</</SPAN>tr> -
<</SPAN>tr> -
<</SPAN>td align="right">图书编号:</</SPAN>td> -
<</SPAN>td> -
<</SPAN>input type="text" name="id"> -
</</SPAN>td> -
</</SPAN>tr> -
<</SPAN>tr> -
<</SPAN>td align="right">图书名称:</</SPAN>td> -
<</SPAN>td> -
<</SPAN>input type="text" name="name"> -
</</SPAN>td> -
</</SPAN>tr> -
<</SPAN>tr> -
<</SPAN>td align="right">作 者:</</SPAN>td> -
<</SPAN>td> -
<</SPAN>input type="text" name="author"> -
</</SPAN>td> -
</</SPAN>tr> -
<</SPAN>tr> -
<</SPAN>td align="right">价 格:</</SPAN>td> -
<</SPAN>td> -
<</SPAN>input type="text" name="price"> -
</</SPAN>td> -
</</SPAN>tr> -
<</SPAN>tr> -
<</SPAN>td class="2" align="center" colspan="2"> -
<</SPAN>input type="submit" value="添 加"> -
</</SPAN>td> -
</</SPAN>tr> -
</</SPAN>table> - </</SPAN>form>
-
</</SPAN>body>
添加图书信息 | |
| 图书编号: | |
| 图书名称: | |
| 作 者: | |
| 价 格: | |
servlet文件
- public
void doPost(HttpServletRequest request, HttpServletResponse response) -
throws ServletException, IOException { -
request.setCharacterEncoding("utf-8"); -
response.setContentType("text/html;charset=utf-8"); -
//获取PrintWriter -
PrintWriter out = response.getWriter(); -
//获取图书编号 -
String id = request.getParameter("id"); -
//获取图书名称 -
String name=request.getParameter("name"); -
//获取作者 -
String author =request.getParameter("author"); -
//获取价格 -
String price= request.getParameter("price"); -
//添加成功 -
out.print("<</SPAN>h2>图书信息添加成功</</SPAN>h2><</SPAN>hr>"); -
out.print("图书编号:"+id+"<</SPAN>br>"); -
out.print("图书名称:"+name+"<</SPAN>br>"); -
out.print(" 作者:"+author+"<</SPAN>br>"); -
out.print("体格:"+price+"<</SPAN>br>"); -
out.flush();//刷新流 -
out.close();//关闭流 -
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取PrintWriter
PrintWriter out = response.getWriter();
//获取图书编号
String id = request.getParameter("id");
//获取图书名称
String name=request.getParameter("name");
//获取作者
String author =request.getParameter("author");
//获取价格
String price= request.getParameter("price");
//添加成功
out.print("
图书信息添加成功
");
out.print("图书编号:"+id+"
");
out.print("图书名称:"+name+"
");
out.print(" 作者:"+author+"
");
out.print("体格:"+price+"
");
out.flush();//刷新流
out.close();//关闭流
}
过滤器文件
- package
com.lyq; - 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; -
- public
class CharactorFilter implements Filter { -
// 字符编码 -
String encoding = null; -
public void destroy() { -
encoding = null; -
} -
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 init(FilterConfig filterConfig) throws ServletException { -
// 获取初始化参数 -
encoding = filterConfig.getInitParameter("encoding"); -
} - }
package com.lyq;
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;
public class CharactorFilter implements Filter {
// 字符编码
String encoding = null;
public void destroy() {
encoding = null;
}
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 init(FilterConfig filterConfig) throws ServletException {
// 获取初始化参数
encoding = filterConfig.getInitParameter("encoding");
}
}
web配置文件
-
-
<</SPAN>filter> -
-
<</SPAN>filter-name>CharactorFilter</</SPAN>filter-name> -
-
<</SPAN>filter-class>com.lyq.CharactorFilter</</SPAN>filter-class> -
-
<</SPAN>init-param> -
-
<</SPAN>param-name>encoding</</SPAN>param-name> -
-
<</SPAN>param-value>UTF-8</</SPAN>param-value> -
</</SPAN>init-param> -
</</SPAN>filter> -
-
<</SPAN>filter-mapping> -
-
<</SPAN>filter-name>CharactorFilter</</SPAN>filter-name> -
-
<</SPAN>url-pattern>/*</</SPAN>url-pattern> -
</</SPAN>filter-mapping> -
<</SPAN>servlet> -
<</SPAN>description>This is the description of my J2EE component</</SPAN>description> -
<</SPAN>display-name>This is the display name of my J2EE component</</SPAN>display-name> -
<</SPAN>servlet-name>AddServlet</</SPAN>servlet-name> -
<</SPAN>servlet-class>com.lyq.AddServlet</</SPAN>servlet-class> -
</</SPAN>servlet> -
-
<</SPAN>servlet-mapping> -
<</SPAN>servlet-name>AddServlet</</SPAN>servlet-name> -
<</SPAN>url-pattern>/AddServlet</</SPAN>url-pattern> -
</</SPAN>servlet-mapping> -
<</SPAN>welcome-file-list> -
<</SPAN>welcome-file>index.jsp</</SPAN>welcome-file> -
</</SPAN>welcome-file-list>
本文介绍了一个用于解决HTTP请求中字符编码问题的Java过滤器。该过滤器通过配置文件指定字符集,自动设置请求和响应的编码,有效避免了中文乱码问题。文中详细展示了过滤器的实现代码、配置步骤及应用示例。
9501

被折叠的 条评论
为什么被折叠?



