首先,说说JSP/Servlet中的几个编码的作用。
在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、contentType= "text/html;charset=UTF-8"、request.setCharacterEncoding("UTF-8")和 response.setCharacterEncoding("UTF-8"),其中前两个只能用于JSP中,而后两个可以用于JSP和Servlet 中。
<!--自己的总结-->
1.对页面端发出的数据做一次encodeURI,服务器端使用new String(name.getBytes("iso8859-1","UTF-8"))
2.对页面端发出的数据做两次uncodeURI,服务器端使用URIDecoder.decode(name,“UTF-8”)
3.自己写一个filter,对req,resp进行setcode(UTF-8)
4.配置tomcat的server.xml文件
5.注意文件的属性,项目的属性
一般情况下,以上步骤可以搞定!
<!--自己的总结-->
1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。
众所周知,JSP在服务器上是要先被编译成Servlet的。pageEncoding="UTF-8"的作用就是告诉JSP编译器在将JSP文件编 译成Servlet时使用的编码。通常,在JSP内部定义的字符串(直接在JSP中定义,而不是从浏览器提交的数据)出现乱码时,很多都是由于该参数设置 错误引起的。例如,你的JSP文件是以GBK为编码保存的,而在JSP中却指定pageEncoding="UTF-8",就会引起JSP内部定义的字符 串为乱码。
另外,该参数还有一个功能,就是在JSP中不指定contentType参数,也不使用response.setCharacterEncoding方法时,指定对服务器响应进行重新编码的编码。
2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。
在不使用response.setCharacterEncoding方法时,用该参数指定对服务器响应进行重新编码的编码。服务器在将数据发送到浏览器前,对数据进行重新编码时,使用的就是该编码。
3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
该方法用来指定对浏览器发送来的数据进行重新编码(或者称为解码)时,使用的编码。
4、 response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。
服务器在将数据发送到浏览器前,对数据进行重新编码时,使用的就是该编码。
其次,要说一说浏览器是怎么样对接收和发送的数据进行编码的
response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。同时,浏览器也是根据这个 参数来对其接收到的数据进行重新编码(或者称为解码)。所以在无论你在JSP中设置response.setCharacterEncoding ("UTF-8")或者response.setCharacterEncoding("GBK"),浏览器均能正确显示中文(前提是你发送到浏览器的数 据编码是正确的,比如正确设置了pageEncoding参数等)。读者可以做个实验,在JSP中设置 response.setCharacterEncoding("UTF-8"),在IE中显示该页面时,在IE的菜单中选择"查看(V)"à"编码
(D)"中可以查看到是" Unicode(UTF-8)",而在在JSP中设置response.setCharacterEncoding("GBK"),在IE中显示该页面 时,在IE的菜单中选择"查看(V)"à"编码(D)"中可以查看到是"简体中文(GB2312)"。
浏览器在发送数据时,对URL和参数会进行URL编码,对参数中的中文,浏览器也是使用response.setCharacterEncoding 参数来进行URL编码的。以百度和GOOGLE为例,如果你在百度中搜索"汉字",百度会将其编码为"%BA%BA%D7%D6"。而在GOOGLE中搜 索 "汉字",GOOGLE会将其编码为"%E6%B1%89%E5%AD%97",这是因为百度的 response.setCharacterEncoding参数为GBK,而GOOGLE的 response.setCharacterEncoding参数为UTF-8。
浏览器在接收服务器数据和发送数据到服务器时所使用的编码是相同的,默认情况下均为JSP页面的
response.setCharacterEncoding参数(或者contentType和
pageEncoding参数),我们称其为浏览器编码。当然,在IE中可以修改浏览器编码(在IE的菜单中选择"查看(V)"à"编码(D)"中修 改),但通常情况下,修改该参数会使原本正确的页面中出现乱码。一个有趣的例子是,在IE中浏览GOOGLE的主页时,将浏览器编码修改为"简体中文 (GB2312)",此时,页面上的中文会变成乱码,不理它,在文本框中输入"汉字",提交,GOOGLE会将其编码为"%BA%BA%D7%D6",可 见,浏览器在对中文进行URL编码时,使用的就是浏览器编码。
弄清了浏览器是在接收和发送数据时,是如何对数据进行编码的了,我们再来看看服务器是在接收和发送数据时,是如何对数据进行编码的。
对于发送数据,服务器按照response.setCharacterEncoding—contentType—pageEncoding的优先顺序,对要发送的数据进行编码。
对于接收数据,要分三种情况。一种是浏览器直接用URL提交的数据,另外两种是用表单的GET和POST方式提交的数据。
因为各种WEB服务器对这三种方式的处理也不相同,所以我们以Tomcat5.0为例。
无论使用那种方式提交,如果参数中包含中文,浏览器都会使用当前浏览器编码对其进行URL编码。
对于表单中POST方式提交的数据,只要在接收数据的JSP中正确request.setCharacterEncoding参数,即将对客户端请求 进行重新编码的编码设置成浏览器编码,就可以保证得到的参数编码正确。有写读者可能会问,那如何得到浏览器编码呢?上面我们提过了,在默认请情况下,浏览 器编码就是你在响应该请求的JSP页面response.setCharacterEncoding设置的值。所以对于POST表单提交的数据,在获得数 据的JSP页面中request.setCharacterEncoding要和生成提交该表单的JSP页面的 response.setCharacterEncoding设置成相同的值。
对于URL提交的数据和表单中GET方式提交的数据,在接收数据的JSP中设置request.setCharacterEncoding参数是不行 的,因为在Tomcat5.0中,默认情况下使用ISO-8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码),而不使用该 参数对URL提交的数据和表单中GET方式提交的数据进行
重新编码(解码)。要解决该问题,应该在Tomcat的配置文件的Connector标签中设置useBodyEncodingForURI或者
URIEncoding属性,其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding
参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false(Tomcat4.0中该参数默认为true); URIEncoding参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)进行统一的重新编码(解码)的编码。 URIEncoding和useBodyEncodingForURI区别是,URIEncoding是对所有GET方式的请求的数据进行统一的重新编码 (解码),而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数 据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码。所以对于URL提交的数据和表单中GET方式提交的数据,可以修改 URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true,并且在获得数据的JSP页面中 request.setCharacterEncoding参数设置成浏览器编码。
下面总结下,以Tomcat5.0为WEB服务器时,如何防止中文乱码。
1、 对于同一个应用,最好统一编码,推荐为UTF-8,当然GBK也可以。
2、 正确设置JSP的pageEncoding参数
3、 在所有的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),从而间接实现对浏览器编码的设置。
4、 对于请求,可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")。同
时,要修改Tomcat的默认配置,推荐将useBodyEncodingForURI参数设置为true,也可以将URIEncoding参数设置为
UTF-8(有可能影响其他应用,所以不推荐)。
总结:
1、做一个编码过滤器,类似于:
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-
throws IOException,ServletException {
- String strRequestURI = ((HttpServletRequest) request).getRequestURI();
- String encoding = selectEncoding(request);
-
request.setCharacterEncoding(“UTF- 8 ”);
- chain.doFilter(request, response);
- }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException,ServletException {
String strRequestURI = ((HttpServletRequest) request).getRequestURI();
String encoding = selectEncoding(request);
request.setCharacterEncoding(“UTF-8”);
chain.doFilter(request, response);
}
2、在JSP页面中加上:
<%@ page contentType="text/html;charset=UTF-8" %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
3、修改Tomcat5.0的D:\jakarta-tomcat-5.0.30\conf\server.xml
找到connector部分
加上useBodyEncodingForURI="true" URIEncoding="UTF-8"
比如:
- < Connector
-
port = "8080"
-
maxThreads = "150" minSpareThreads = "25" maxSpareThreads = "75"
-
enableLookups = "false" redirectPort = "8443" acceptCount = "100"
-
debug = "0" connectionTimeout = "20000"
-
disableUploadTimeout = "true" useBodyEncodingForURI = "true" URIEncoding = "UTF-8" />
分享到:
相关推荐
**JSP中文乱码过滤器详解** 在Java Web开发中,JSP(JavaServer Pages)是一种常见的用于创建动态网页的技术。然而,当处理包含中文字符的数据时,可能会遇到乱码问题,这通常与字符编码设置有关。为了解决这个问题...
JSP利用过滤器解决request中文乱码问题 JSP中requestgetParameter中文乱码问题是经常遇到的问题,解决这个问题有多种方法,但利用过滤器解决request中文乱码问题是其中最有效的一种方法。本文将详细介绍如何使用...
在IT行业中,尤其是在Web开发领域,字符编码问题是一个常见的挑战,特别是当涉及到JSP(Java...对于"乱码问题.txt"这个文件,我们可以假设它可能是记录了问题的详细日志,分析其中的内容可能有助于找出问题的具体原因。
### javaweb servlet(jsp)的乱码问题原理及解决 #### HTTP协议的基本理解与乱码问题背景 HTTP协议作为互联网应用中最为广泛使用的通信协议之一,它定义了客户端和服务端之间的交互规则。HTTP请求主要分为GET和...
10. **JDBC操作**:在插入或查询包含中文的数据库记录时,确保SQL语句中的字符串使用正确的转义方式,避免乱码。 11. **配置服务器**:在应用服务器(如Tomcat)的配置文件中,如`server.xml`或`web.xml`,设置全局...
在讨论JSP(Java Server Pages)传值时,遇到的本地无乱码而测试机出现乱码的问题是一个典型的编码问题,常见于网络编程和Web开发中。以下是对标题、描述和部分内容所涉知识点的详细解析。 ### 知识点解析 #### ...
10. **调试技巧**:在排查乱码问题时,可以使用`System.out.println`或日志记录工具打印出原始的非编码字符串,以便查看乱码是否在传输过程中就已经产生。 通过以上步骤,你应该能够有效地解决Servlet页面的乱码...
### JSP 入门教程知识点概览 #### 1. JSP 概念与应用场景 - **JSP**(Java Server Pages)是一种基于Java技术的Web开发标准,它允许开发者在HTML页面中嵌入Java代码,从而使得动态内容的生成变得更为简便。JSP非常...
此外,除了解决请求乱码问题,过滤器还可以用于其他目的,如登录验证、权限控制、日志记录、性能监控等。在上述标签中提到的`js`和`jsp`,通常与前端交互有关,而过滤器主要处理服务器端的问题,但理解前端的编码...
总之,这个"springboot集成jsp的简单例子"是一个很好的学习资源,它涵盖了Spring Boot与JSP集成的基本操作,以及在实际开发中经常遇到的拦截器和中文乱码问题的解决方案。对于初学者来说,这是一个很好的起点,可以...
jsp 基础的学习笔记 第一章语法和el表达式语言的使用 JSP学习要点记录 jsp乱码解决大全 基础开发入门级:JSP与ASP的比较 用EL访问javabean pro jsp第三章第五节代码 .......
对于防止乱码问题,确保在JSP页面、Servlet和数据库中统一设置正确的字符编码。在JSP头部添加`;charset=UTF-8" %>`来设定页面编码。在连接数据库时,可以设置`useUnicode=true&characterEncoding=UTF-8`参数确保数据...
本文详细介绍了JSP和Servlet中关于请求与响应的关键知识点,包括JSP内置对象的作用、请求与响应对象的使用方法、中文乱码问题及其解决办法、转发与重定向的区别以及Servlet的基本创建和配置流程。希望这些内容能够...
实验五:JSP乱码问题 解决字符编码问题,确保网页和数据库之间的数据传输正确无误。学生需要理解字符集和编码转换,并能正确设置HTTP头和响应头。 实验六:分页 学习如何实现动态网页的分页展示,提高用户体验。这...
jsp/servlet阶段测试 本资源总结了jsp和servlet的阶段性测试,涵盖了servlet和jsp的基础知识点,包括servlet的生命周期、jsp的隐含对象、Filter的用途、Listener的类型、Request、Session和Application的区别等。 ...
可能使用了如Java Database Connectivity (JDBC) API来连接到数据库,执行SQL查询,如插入、更新和检索短消息记录。 3. **用户身份验证与登录**:实现登陆功能需要理解会话管理,这通常涉及到HTTP Cookie或Session...
通过过滤器,我们可以实现诸如字符编码转换、权限验证、日志记录等功能,而本项目中的过滤器就是用于处理中文乱码问题的。 中文乱码的产生通常与字符编码有关。在不同的系统、不同的编程语言中,字符编码可能会有所...
5. **调试和日志记录**:在解决问题的过程中,使用日志记录工具记录PD4ML的输出信息,可以帮助定位问题所在。例如,查看PD4ML是否成功加载了指定的字体,或者编码设置是否被正确应用。 在提供的“test”文件中,...