您的位置:首页 > 编程语言 > Java开发

JavaWeb入门—解决Post请求中文乱码问题

2019-02-22 19:08 357 查看
版权声明:. https://blog.csdn.net/WildestDeram/article/details/87876435

解决Post请求中文乱码问题

1.乱码的由来

Tomcat默认使用字符集为ISO-8859-1,属于西欧字符集,如果输入的字符不属于西欧字符集,将出现乱码。

 

2.解决乱码

解决乱码的核心思路是将ISO-8859-1转换为UTF-8,Servlet中请求与响应都需要设置UTF-8字符集。

 

3.代码展示

charset_form.html

[code]<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/SerlvetAndJSP/CharsetServlet" method="post">
姓名:<input name="ename"><br><br>
地址:<input name="address"><br><br>
<input type="submit" value="提交">
</form>
</body>
</html>

CharsetServlet.java

[code]package com.imooc.Servletcharset;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class CharsetServlet
*/
@WebServlet("/CharsetServlet")
public class CharsetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public CharsetServlet() {
super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ename = request.getParameter("ename");
String address = request.getParameter("address");

//将指定的字符进行转换
String utf8Ename = new String(ename.getBytes("ISO-8859-1"),"UTF-8");
String utf8Address = new String(address.getBytes("iso-8859-1"),"utf-8");

System.out.println(utf8Ename);
System.out.println(utf8Address);
}

}

但是在实际开发中可能涉及到大量字符编码,一个一个转换显得麻烦,这里提供一个统一修改字符集的方法

[code]package com.imooc.Servletcharset;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class CharsetServlet
*/
@WebServlet("/CharsetServlet")
public class CharsetServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public CharsetServlet() {
super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//用于将修改请求体的字符集
request.setCharacterEncoding("UTF-8");

String ename = request.getParameter("ename");
String address = request.getParameter("address");

System.out.println(ename);
System.out.println(address);
}

}

注意:该方法只能在doPost()中使用,因为该方法是修改"请求体"中的字符集,doGet()是Get请求的方法,Get是没有请求体的,只有Post请求才有。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: