J2EE中get方式和post请求方式乱码的解决办法
2016-12-05 15:18
351 查看
J2EE中中文乱码的问题
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>
②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>
每一次服务器给我们通过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来进行解码,这样
就不会造成乱码了。
相关文章推荐
- 详解get请求和post请求参数中文乱码的解决办法
- 解决servlet中文乱码问题及get、post请求方式的讲解
- Tomcat下GET方式提交请求乱码解决办法
- 关于get和post请求中文乱码的解决办法
- JSP中解决中文乱码问题 对于post有效 对于get请求方式无效。
- tomcat下get方式提交请求乱码解决办法
- post,get请求中文乱码解决办法
- get post 中文请求乱码解决方式
- Web容器下的get和post方式请求的乱码问题解决
- Post请求和get请求乱码方式解决
- JSP下get方式提交请求乱码解决办法
- tomcat下get方式提交请求乱码解决办法
- Webservice 用http get方式无法请求到的解决办法
- [java]webwork使用get提交方式乱码的解决办法
- Webservice 用http get方式无法请求到的解决办法
- javaweb之request乱码解决(数据提交以post方式和get方式)
- 解决用jquery的get或者post提交方式提交到struts2中的action中文乱码问题
- Struts2中解决POST请求和GET请求中的中文乱码问题
- myeclipse jsp post方式提交中文乱码解决办法
- 表单提交方式由POST改为GET出现乱码的解决