Servlet request.getParameter乱码

1 post请求乱码

<form action="/WEB24/encodeServlet" method="post">
		<input type="text" name="username">
		<input type="submit" value="提交">
	</form>

servlet中打印输入内容

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String str = request.getParameter("username");
		System.out.println(str);
	}

在输入框中输入中文后,打印结果

哈å

在doGet()方法中加入这一句

request.setCharacterEncoding("UTF-8");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		
		String str = request.getParameter("username");
		System.out.println(str);
	}

重新输入中文后,打印结果

哈哈

2 get请求乱码

<form action="/WEB24/encodeServlet" method="get">
		<input type="text" name="username">
		<input type="submit" value="提交">
	</form>

doGet()方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String str = request.getParameter("username");
		System.out.println(str);
	}

输入中文后打印结果

哈å

在doGet()方法中加入String name = new String(str.getBytes("ISO8859-1"),"UTF-8");

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String str = request.getParameter("username");
		
		String name  = new String(str.getBytes("ISO8859-1"),"UTF-8");
		System.out.println(name);
	}

打印结果

哈哈

3 全局乱码处理

在每个servlet中处理乱码比较麻烦,所以使用过滤器处理

jsp中使用get请求

<form action="/WEB24/encodeServlet" method="get">
		<input type="text" name="username">
		<input type="submit" value="提交">
	</form>

过滤器

public class EncodeFilter implements Filter{

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		
		//当req调用getParameter()方法时,实际调用的是增强类对象的getParameter方法。
		EnhanceRequest enhanceRequest = new EnhanceRequest(req);
		chain.doFilter(enhanceRequest, response);
	}

	@Override
	public void destroy() {
		
	}
	
	
	/**
	 * 装饰着模式
	 * 增强getparameter()方法
	 * @author YeLiang
	 *
	 */
	static class EnhanceRequest extends HttpServletRequestWrapper{

		private HttpServletRequest request;
		
		public EnhanceRequest(HttpServletRequest request) {
			super(request);
			this.request = request;
		}
		
		@Override
		public String getParameter(String name) {
			String parameter = request.getParameter(name);
			
			try {
				parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			return parameter;
		}
		
	} 

}

web.xml中的配置

  <filter>
    <filter-name>EncodeFilter</filter-name>
    <filter-class>com.yeliang.encode.EncodeFilter</filter-class>
  </filter>
  
  <filter-mapping>
    <filter-name>EncodeFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

servlet中的doGet方法没有做操作

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String str = request.getParameter("username");
		
		System.out.println(str);
	}

打印结果

哈哈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值