后台(26)——Filter(3)
发布日期:2021-06-30 11:17:59 浏览次数:2 分类:技术文章

本文共 3953 字,大约阅读时间需要 13 分钟。




版权声明

  • 本文原创作者:
  • 作者博客地址:

在这篇博客中我们利用Filter一并解决POST和GET请求的中文乱码。

测试表单

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
Welcome
用 户:
密 码:

该页面非常简单,在点击”登录”之后跳转到loginServlet


测试Servlet

/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */package cn.com;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGetAndPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGetAndPost(req, resp); } private void doGetAndPost(HttpServletRequest req, HttpServletResponse resp){ String username=req.getParameter("username"); System.out.println("---> username="+username); }}

在该页面中利用getParameter( )测试是否乱码


利用Filter过滤乱码

嗯哼,终于轮到今天的主角上场了

/** * 本文作者:谷哥的小弟 * 博客地址:http://blog.csdn.net/lfdfhl */package cn.com;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Map;import java.util.Map.Entry;import java.util.Set;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 javax.servlet.http.HttpServletResponse;public class TestFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest) req; HttpServletResponse response=(HttpServletResponse) res; request=new MyHttpServletRequest(request); chain.doFilter(request, response); } @Override public void destroy() { }}class MyHttpServletRequest extends HttpServletRequestWrapper{ HttpServletRequest request; boolean isFirst=true; public MyHttpServletRequest(HttpServletRequest request) { super(request); this.request=request; } @Override public String getParameter(String name) { Map
parameterMap=getParameterMap(); String[] values=parameterMap.get(name); String value=values[0]; return value; } @Override public String[] getParameterValues(String name) { Map
parameterMap=getParameterMap(); String[] values=parameterMap.get(name); return values; } @Override public Map
getParameterMap() { Map
parameterMap = request.getParameterMap(); if(isFirst){ Set
> entrySet = parameterMap.entrySet(); for(Entry
entry:entrySet){ String[] values = entry.getValue(); for(int i=0;i

在该类中通过继承HttpServletRequestWrapper实现自己的HttpServletRequest,即文中的MyHttpServletRequest。

  • 覆写getParameter( )使其最终调用getParameterMap( )
  • 覆写getParameterValues( )使其最终调用getParameterMap( )
  • 在getParameterMap( )中将每个请求参数用UTF-8重新编码

配置文件

TestFilter
cn.com.TestFilter
TestFilter
/*
loginServlet
cn.com.LoginServlet
loginServlet
/loginServlet
index.jsp

嗯哼,至此利用Filter同时解决了Post和Get请求时带来的中文乱码问题。

转载地址:https://it9527.blog.csdn.net/article/details/56894134 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:后台(27)——文件上传
下一篇:后台(25)——Filter(2)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月05日 08时37分17秒