J2EE中中文乱码的问题
J2EE中中文乱码的问题主要就是出现在浏览器给服务器提交参数数据的时候出现的。而浏览器与服务器传递数据的方式有两种
①post提交方式,因为post提交方式都是把请求参数放在请求体(请求行,请求消息头,请求内容)里面的。
在服务器端服务器会将客户端提交的请求数据都放到HttpServletRequest实例当中,但可以通过HttpServletRequest
实例对象的setCharacterEncoding(“编码集”)方法来给请求参数设置合适的解码集,那样就会防止乱码的情况了。
②get提交方式
对于get方式的请求参数是附加在url地址的后面的,而不是放在请求体中的所以用HttpServletRequest实例对象的
setCharacterEncoding()方法设置编码集是没有效果的。而且服务器对于客户端提交的url默认使用iso-8859-1的编码方式
对其进行编码,也就是说get请求方式的数据参数都是通过服务器默认的iso-8859-1进行编码的。所以对其编码就要使用特殊的
解码方式来完成。
java代码实例如下登陆还是用的上面的Login.jsp页面:
每一次服务器给我们通过get方式提交的数据用我们想要它使用的编码集来对数据进行编码呢?
很简单只需要我们在服务器的配置文件server.xml中配置
<Connector URIEncoding="utf-8" connectionTimeout="20000" maxThreads="150" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
这样服务器在接收到客户端通过get方式提交的参数时就会使用utf-8对象进行编码,当获取参数时也会使用utf-8来进行解码,这样
就不会造成乱码了。
J2EE中中文乱码的问题主要就是出现在浏览器给服务器提交参数数据的时候出现的。而浏览器与服务器传递数据的方式有两种
①post提交方式,因为post提交方式都是把请求参数放在请求体(请求行,请求消息头,请求内容)里面的。
在服务器端服务器会将客户端提交的请求数据都放到HttpServletRequest实例当中,但可以通过HttpServletRequest
实例对象的setCharacterEncoding(“编码集”)方法来给请求参数设置合适的解码集,那样就会防止乱码的情况了。
java代码实例如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/J2EE_Codeing_Test/LoginServlet" method="post">
用户名:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
Servlet接收参数做设置即可
package com.yd.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//post方式来获得正确格式的参数防止乱码
request.setCharacterEncoding("utf-8");
String name=request.getParameter("username");
//System.out.println(name);
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out=response.getWriter();
out.println("form"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
②get提交方式
对于get方式的请求参数是附加在url地址的后面的,而不是放在请求体中的所以用HttpServletRequest实例对象的
setCharacterEncoding()方法设置编码集是没有效果的。而且服务器对于客户端提交的url默认使用iso-8859-1的编码方式
对其进行编码,也就是说get请求方式的数据参数都是通过服务器默认的iso-8859-1进行编码的。所以对其编码就要使用特殊的
解码方式来完成。
java代码实例如下登陆还是用的上面的Login.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/J2EE_Codeing_Test/LoginServlet" method="get">
用户名:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
在servlet类中要解码后重新设置其编码集即可
package com.yd.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通过get方式传递的参数数据
String name=request.getParameter("username");
//因为服务器默认对url进行iso-8859-1进行编码了
//先通过iso-8859-1的方式对字符串解码成字节数组 然后在给字符串设定要使用的编码集
name=new String(name.getBytes("iso-8859-1"),"utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out=response.getWriter();
out.println("form"+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
③当然因为我们的Tomcat服务器默认是使用iso-8859-1的编码方式来对客户端通过get方式提交的数据进行编码,那么我们如何让每一次服务器给我们通过get方式提交的数据用我们想要它使用的编码集来对数据进行编码呢?
很简单只需要我们在服务器的配置文件server.xml中配置
<Connector URIEncoding="utf-8" connectionTimeout="20000" maxThreads="150" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
这样服务器在接收到客户端通过get方式提交的参数时就会使用utf-8对象进行编码,当获取参数时也会使用utf-8来进行解码,这样
就不会造成乱码了。