get请求全局编码过滤器
MyEncodingFilter.java
package com.gyf.web.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.Map.Entry; 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; import org.apache.catalina.connector.RequestFacade; public class MyEncodingFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void destroy() {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //1.设置POST请求中文乱码的问题 request.setCharacterEncoding("UTF-8"); System.out.println("拦截请求:" + request); //2.解决get请求的中文乱码问题 //request : RequestFacade; HttpServletRequest hsr = (HttpServletRequest)request; if(hsr.getMethod().equalsIgnoreCase("get")){ MyRequest myRequest = new MyRequest(hsr); //放行请求 chain.doFilter(myRequest, response); }else{ chain.doFilter(request, response); } } } /** * Wrapper包装类,装饰设计模式,内部有个真实对象的引用 * @author gyf * */ class MyRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; private boolean isEncoding = false;//是否已经utf-8编码 public MyRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public String getParameter(String name) { return getParameterMap().get(name)[0]; } @Override public Map<String, String[]> getParameterMap() { Map<String, String[]> map = request.getParameterMap(); if(isEncoding == true){ return map; } //遍历vlaue,改成utf-8编码 for(Entry<String, String[]> entry : map.entrySet()){ //取数组值 String[] values = entry.getValue(); for(int i=0;i<values.length;i++){ try { values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } isEncoding = true; return map; } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>day18-20180403</display-name> <!-- 配置编码的过滤器 --> <filter> <filter-name>myEncodingFilter</filter-name> <filter-class>com.gyf.web.filter.MyEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>myEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?