Java-Filter过滤器用于过滤整个项目的编码
2024-08-27 21:22:29
整个分为实现类以及在web.xml文件中对编写的filter类进行注册
代码如下
- package cn.itcast.itcaststore.web.filter;
- import java.io.IOException;
- import java.io.UnsupportedEncodingException;
- import java.util.Map;
- 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;
- import javax.servlet.http.HttpServletRequestWrapper;
- /**
- * 编码过滤器(用于统一项目编码)
- */
- public class EncodingFilter implements Filter {
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- // 处理请求乱码
- HttpServletRequest httpServletRequest = (HttpServletRequest) request;
- HttpServletRequest myRequest = new MyRequest(httpServletRequest);
- // 处理响应乱码
- response.setContentType("text/html;charset=utf-8");
- chain.doFilter(myRequest, response);
- }
- public void destroy() {
- }
- }
- // 自定义request对象
- class MyRequest extends HttpServletRequestWrapper {
- private HttpServletRequest request;
- private boolean hasEncode;
- public MyRequest(HttpServletRequest request) {
- super(request);// super必须写
- this.request = request;
- }
- // 对需要增强方法 进行覆盖
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Map getParameterMap() {
- // 先获得请求方式
- String method = request.getMethod();
- if (method.equalsIgnoreCase("post")) {
- // post请求
- try {
- // 处理post乱码
- request.setCharacterEncoding("utf-8");
- return request.getParameterMap();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- } else if (method.equalsIgnoreCase("get")) {
- // get请求
- Map<string, string[]=""> parameterMap = request.getParameterMap();
- if (!hasEncode) { // 确保get手动编码逻辑只运行一次
- for (String parameterName : parameterMap.keySet()) {
- String[] values = parameterMap.get(parameterName);
- if (values != null) {
- for (int i = 0; i < values.length; i++) {
- try {
- values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- }
- }
- }
- hasEncode = true;
- }
- return parameterMap;
- }
- return super.getParameterMap();
- }
- @Override
- public String getParameter(String name) {
- @SuppressWarnings("unchecked")
- Map<string, string[]=""> parameterMap = getParameterMap();
- String[] values = parameterMap.get(name);
- if (values == null) {
- return null;
- }
- return values[0]; // 取回参数的第一个值
- }
- @Override
- public String[] getParameterValues(String name) {
- @SuppressWarnings("unchecked")
- Map<string, string[]=""> parameterMap = getParameterMap();
- String[] values = parameterMap.get(name);
- return values;
- }
- }
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>cn.itcast.itcaststore.web.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
最新文章
- chrome 不支持window.webkitNotifications.createNotification消息通知API了
- ZOJ-3686 A Simple Tree Problem 线段树
- 什么是CGI(Common Gateway Interface)?
- JavaScript与html5写的贪吃蛇完整代码
- java基础知识(二)
- 10-UIKit(UIDatePicker、UIPickerView、UIWebView、Storyboard)
- 为数据元素DATA Element分配搜索帮助
- 安装配置sentry服务
- Android为TV端助力:RecyclerView更新数据时焦点丢失
- PHP----------linux下如何安装redis扩展。安装redis可以在我的博客redis里面寻找。
- Cmder + Babun 打造 Windows 好用的终端工具
- ALGO-6_蓝桥杯_算法训练_安慰奶牛
- GPO配置时的注意事项
- NYOJ-451-光棍节的快乐
- leetcode——Search for a Range 排序数组中寻找目标下标范围(AC)
- gradle 配置java 项目maven 依赖
- crontab基本操作部分
- c语言-猜生日算法
- jQuery学习笔记1——操作属性
- c 结构体中存在指针,指针的不同赋值方法
热门文章
- 8种Java排序算法整理
- Callable+Future+newFixedThreadPool的应用
- iOS 主题/皮肤之 SakuraKit
- Eclipse配置Tomcat服务器
- try...catch...finally语句块
- 基于dijkstra算法求地铁站最短路径以及打印出所有的路径
- 公司python入职培训流程
- Centos 7系统启动修复
- NSA武器库知识整理
- 【转义字符】HTML 字符实体&;lt; &;gt: &;amp;