深入体验JavaWeb开发内幕——关于JEE中的response、resquest应答、请求头的编码问题的解决
2012-10-24 06:04
916 查看
当我们通过一个表单验证来连接数据库时,最关键的就是要确保浏览器的resquest端和服务器的response端能够统一编码,这样请求和返回的信息才能够正确,否则就会出现乱码问题。
如:
当编码不统一时返回信息:
统一编码后:
当然这样的问题还会出现在resquest端,当我们的resquest和response端编码不统一时就会出现如上的编码错误。
如:通过浏览器提交请求,通过resquest的相关方法获取到请求值之后输出结果如图。
在服务端输出:
统一编码后输出:
好了现在先来看关于response应答时的乱码问题的处理:
例如通过以不同的方式输出统一个”上海“ 字样时会有不同的结果,借此我们来解决所遇到的乱码问题。
问题一:
如:
但我们如果指定response的输入编码集时:
方法二:
解决方式:
方法三:
解决:
可正确输出”上海“
方法四及解决:
方法五及解决:
解决:
方法六及解决:
如图:
解决:
关于request:
问题:
解决后:
好了,现在你已经知道了如何去处理resquest和response的相关编码问题了,赶快自己试一试吧!
如:
当编码不统一时返回信息:
统一编码后:
当然这样的问题还会出现在resquest端,当我们的resquest和response端编码不统一时就会出现如上的编码错误。
如:通过浏览器提交请求,通过resquest的相关方法获取到请求值之后输出结果如图。
在服务端输出:
统一编码后输出:
好了现在先来看关于response应答时的乱码问题的处理:
例如通过以不同的方式输出统一个”上海“ 字样时会有不同的结果,借此我们来解决所遇到的乱码问题。
问题一:
MyServlet.java
package net.csdn.servlet; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { testEncoding1(response); }方法一:
public void testEncoding1(ServletResponse response) throws IOException{ String content = "上海"; OutputStream os = response.getOutputStream(); //这里默认的写入到response相应头中的编码方式为GB2312这正好要与浏览器默认编码方式相同 //所以可以正常解析 os.write(content.getBytes()); }
如:
但我们如果指定response的输入编码集时:
方法二:
public void testEncoding2(ServletResponse response) throws IOException{ String content = "上海"; OutputStream os = response.getOutputStream(); //这里由于指定了的写入到response相应头中的编码方式为utf-8而浏览器默认编码方却仍是GB2312 //所以解析出现乱码 os.write(content.getBytes("utf-8")); }
解决方式:
public void testEncoding3(ServletResponse response) throws IOException{ String content = "上海"; OutputStream os = response.getOutputStream(); //这里由于指定了的写入到response相应头中的编码方式为utf-8而浏览器默认编码方却仍是GB2312 //所以解析出现乱码 os.write(content.getBytes("utf-8")); //解决方法:为响应信息设置响应头告诉浏览器以utf-8的方式来解析编码或者在浏览器一端将编码方式 //改为utf-8也可解决该问题 response.setContentType("text/html;charset = utf-8"); }
方法三:
public void testEncoding4(HttpServletResponse response) throws IOException{ String content = "上海"; // response.setContentType("text/html;charset = utf-8"); OutputStream os = response.getOutputStream(); //这里由于指定了的写入到response相应头中的编码方式为utf-8而浏览器默认编码方却仍是GB2312 //所以解析出现乱码 os.write(content.getBytes("utf-8")); }
解决:
public void testEncoding4(HttpServletResponse response) throws IOException{ String content = "上海"; OutputStream os = response.getOutputStream(); //这里由于指定了的写入到response相应头中的编码方式为utf-8而浏览器默认编码方却仍是GB2312 //所以解析出现乱码 os.write(content.getBytes("utf-8")); //解决方法:为响应信息设置响应头告诉浏览器以utf-8的方式来解析编码或者在浏览器一端将编码方式 //改为utf-8也可解决该问题 // response.setContentType("text/html;charset = utf-8"); //以另一种方式设置响应头告知浏览器的解码方式 response.setHeader("Content-Type", "text/html;charset = utf-8"); }
可正确输出”上海“
方法四及解决:
public void testEncoding5(ServletResponse response) throws IOException{ String content = "上海"; OutputStream os = response.getOutputStream(); os.write(content.getBytes("utf-8")); //不是发送响应头而是向浏览器输出一段<meta />标签来告知浏览器按照相应的utf-8来解析 os.write("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>".getBytes()); }
方法五及解决:
public void testEncoding6(ServletResponse response) throws IOException{ String content = "上海"; //使用的默认编码集是iso8859-1而浏览器的编码却是utf-8故出现乱码问题 PrintWriter pw = response.getWriter(); pw.println(content); }同样会出现乱码
解决:
public void testEncoding6(ServletResponse response) throws IOException{ String content = "上海"; //解决方式同上: //设置响应头的编码方式 response.setCharacterEncoding("UTF-8"); //通过响应头告诉浏览器正确的解码方式 response.setContentType("text/html;charset = UTF-8"); //使用的默认编码集是iso8859-1而浏览器的编码却是utf-8故出现乱码问题 PrintWriter pw = response.getWriter(); pw.println(content); }
方法六及解决:
public void testEncoding7(ServletResponse response) throws IOException{ int content = 14; //使用的默认编码集是iso8859-1而浏览器的编码却是utf-8故出现乱码问题 PrintWriter pw = response.getWriter(); pw.write(content); }
如图:
解决:
public void testEncoding8(ServletResponse response) throws IOException{ int content = 14; //解决方式同上: //设置响应头的编码方式 response.setCharacterEncoding("UTF-8"); //通过响应头告诉浏览器正确的解码方式 response.setContentType("text/html;charset = UTF-8"); //使用的默认编码集是iso8859-1而浏览器的编码却是utf-8故出现乱码问题 PrintWriter pw = response.getWriter(); pw.println(content); }
关于request:
问题:
UserServlet.java
package com.user.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.userbean.User; import com.userdao.UserDao; import com.userimpl.UserImpl; public class UserServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println(username); System.out.println(password); UserDao ud = new UserImpl(); boolean b = ud.findUser(username, password); if(b == false){ response.setContentType("text/html;charset=UTF-8 "); response.getWriter().write("用户名或密码有误,请重新确认输入!"); }else{ response.setContentType("text/html;charset=UTF-8 "); response.getWriter().write("登陆成功!"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }如图:
解决后:
package com.user.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.userbean.User; import com.userdao.UserDao; import com.userimpl.UserImpl; public class UserServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //为request指定编码 request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println(username); System.out.println(password); UserDao ud = new UserImpl(); boolean b = ud.findUser(username, password); if(b == false){ response.setContentType("text/html;charset=UTF-8 "); response.getWriter().write("用户名或密码有误,请重新确认输入!"); }else{ response.setContentType("text/html;charset=UTF-8 "); response.getWriter().write("登陆成功!"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
好了,现在你已经知道了如何去处理resquest和response的相关编码问题了,赶快自己试一试吧!
相关文章推荐
- 深入体验JavaWeb开发内幕——关于JEE中的response、resquest应答、请求头的编码问题的解决
- 关于AJAX请求JSON数据(解决responseText空的问题)
- 关于乱码问题的解决与HttpServletResponse中的方法
- 关于ajax post请求,参数过大产生的问题解决 Java
- 关于解决 请求被中止:无法建立SSL / TLS安全通道(The request was aborted: Could not create SSL/TLS secure channel)的问题
- 关于解决JQuery发送Ajax请求后,IE缓存数据不更新的问题
- 关于脚本语言PERL的两个笔记(编码问题,未完全解决)
- 关于drupal HTTP 请求状态失败 问题解决方案
- 【okhttp】Post请求设置utf-8编码(解决汉语请求乱码问题)
- 发送带参数的get请求,并解决httpclient编码问题
- 关于通过vmware安装windows8的几个问题及解决--无人参与应答文件包含的产品密钥无效
- 关于python中json load出来编码为unicode的问题的解决
- Tomcat使用过程中解决get/post请求编码问题
- 巧用asp.net 过滤所有的Response请求并替换部分内容,彻底解决MVC虚拟路径问题.
- 关于java服务端给手机端(Anduroid && Ios)提供请求接口出现的问题及解决方法
- 关于在页面总嵌入iframe,ifram中发起请求,服务器端的session为空问题解决
- 关于使用CXF出现编码 GBK 的不可映射字符问题解决
- 在线聊天项目1.4版 使用Gson方法解析Json字符串以便重构request和response的各种请求和响应 解决聊天不畅问题 Gson包下载地址
- 关于web请求中的编码解码问题
- 关于HttpModule中像图片,*.css,*.js等资源文件也被请求问题的解决