- 浏览: 884242 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
一.引子
下面的servlet能显示中文吗?
public class SimpleServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
java.io.IOException{
resp.setContentType("text/html");
PrintWriter w = resp.getWriter();
System.out.println("响应的输出编码器:" + resp.getCharacterEncoding());
w.println("<html>");
w.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
w.println("<head>");
w.println("<title>文字与图片</title>");
w.println("</head>");
w.println("<body>");
w.println("文字与图片");
w.println("<hr />");
//w.println("<img src="gif/aa.jpg" />");
w.println("</body>");
w.println("</html>");
w.flush();
}
}
结果是:
?????
二.看服务器传回浏览器的原始包
[第一部份,包头(以字串方式显示)]
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Wed, 22 Oct 2008 08:37:29 GMT
[第二部分,包体(以二进制方式显示)]
c7[第一个包体长度]
485454502F312E3120323030204F4B0D0A5365727665723A204170616368652D436F796F74652F312E310D0A436F6E74656E742D547970653A20746578742F68746D6C3B636861727365743D49534F2D383835392D310D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A446174653A205765642C203232204F637420323030382030383A33373A323920474D540D0A0D0A63370D0A3C68746D6C3E0D0A3C21444F43545950452068746D6C205055424C494320222D2F2F5733432F2F445444205848544D4C20312E30205374726963742F2F454E222022687474703A2F2F7777772E77332E6F72672F54522F7868746D6C312F4454442F7868746D6C312D7374726963742E647464223E0D0A3C686561643E0D0A3C7469746C653E3F3F3F3F3F3C2F7469746C653E0D0A3C2F686561643E0D0A3C626F64793E0D0A3F3F3F3F3F0D0A3C6872202F3E0D0A3C2F626F64793E0D0A3C2F68746D6C3E0D0A0D0A300D0A0D0A
0[第二个包体长度]
从Content-Type中看出包体的编码方式是ISO-8859-1,这是Servlet的默认编码方式.以ISO-8859-1来翻译第一个包体的内容:
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x
html1/DTD/xhtml1-strict.dtd">
<head>
<title>?????</title>
</head>
<body>
?????
<hr />
</body>
</html>
三.原因
尽管我们在Servlet中设置了中文,但容器框架会把中文翻成ISO-8859-1编码,而ISO-8859-1并不支持中文,所以翻成了?????
四.解决
1.设置编码方式来解决问题:
public class SimpleServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
java.io.IOException{
resp.setContentType("text/html;charset=gb2312");
...
}
}
结果:
文字与图片
原始包:
485454502F312E3120323030204F4B0D0A5365727665723A204170616368652D436F796F74652F312E310D0A436F6E74656E742D547970653A20746578742F68746D6C3B636861727365743D6762323331320D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A446174653A205765642C203232204F637420323030382030383A34343A343020474D540D0A0D0A64310D0A3C68746D6C3E0D0A3C21444F43545950452068746D6C205055424C494320222D2F2F5733432F2F445444205848544D4C20312E30205374726963742F2F454E222022687474703A2F2F7777772E77332E6F72672F54522F7868746D6C312F4454442F7868746D6C312D7374726963742E647464223E0D0A3C686561643E0D0A3C7469746C653ECEC4D7D6D3EBCDBCC6AC3C2F7469746C653E0D0A3C2F686561643E0D0A3C626F64793E0D0ACEC4D7D6D3EBCDBCC6AC0D0A3C6872202F3E0D0A3C2F626F64793E0D0A3C2F68746D6C3E0D0A0D0A
CEC4D7D6D3EBCDBCC6AC正是"文字与图片"的gb2312编码
2.一定得设成gb2312吗?再试试UTF-8
public class SimpleServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
java.io.IOException{
resp.setContentType("text/html;charset=UTF-8");
...
}
}
结果:
文字与图片
仍是正确的,这是由于UTF-8支持汉字,不会以3f3f3f3f3f来代替.
原始包:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 22 Oct 2008 08:48:14 GMT
db
485454502F312E3120323030204F4B0D0A5365727665723A204170616368652D436F796F74652F312E310D0A436F6E74656E742D547970653A20746578742F68746D6C3B636861727365743D5554462D380D0A5472616E736665722D456E636F64696E673A206368756E6B65640D0A446174653A205765642C203232204F637420323030382030383A34383A313420474D540D0A0D0A64620D0A3C68746D6C3E0D0A3C21444F43545950452068746D6C205055424C494320222D2F2F5733432F2F445444205848544D4C20312E30205374726963742F2F454E222022687474703A2F2F7777772E77332E6F72672F54522F7868746D6C312F4454442F7868746D6C312D7374726963742E647464223E0D0A3C686561643E0D0A3C7469746C653EE69687E5AD97E4B88EE59BBEE789873C2F7469746C653E0D0A3C2F686561643E0D0A3C626F64793E0D0AE69687E5AD97E4B88EE59BBEE789870D0A3C6872202F3E0D0A3C2F626F64793E0D0A3C2F68746D6C3E0D0A0D0A
0
E69687E5AD97E4B88EE59BBEE78987是"图片与文字"的UTF-8编码
五.meta数据中的Content-Type
1.我们也可以在页面的<head>中通过<meta>来设置文件编码
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x
html1/DTD/xhtml1-strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>图片与文字</title>
</head>
<body>
图片与文字
<hr />
</body>
</html>
浏览器会按UTF-8来解析页面.
2.resp.setContentType("text/html;charset=gb2312")与<meta>都指定了,并且不一致.哪一个有效呢?
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
author: holly
Content-Type: text/html;charset=gb2312
Transfer-Encoding: chunked
Date: Thu, 23 Oct 2008 07:45:49 GMT
经过测试,浏览器依据前者来显示.
六.客户端提交的表单数据
我们可能也会希望,浏览器上送的request的包头的Content-Type项也指明表单数据的编码方式.可是没有:
Content-Type: application/x-www-form-urlencoded
servlet在解码的时候,同样会按照默认的编码来解,可能是ISO-8859-1.这样就造成了?.
所以在HttpServletRequest.getParameter之前,必须先设置HttpServletRequest.setCharacterEncoding("...")
也许会纳闷,怎么知道浏览器上送数据的编码方式呢?产生上送数据的页面不也是从服务器上传下去的吗?该页面的Content-Type中charset是什么,浏览器就会严格按照这个来编码.所以自始至终都应该主动设置每个页面的字符编码.
七.jsp的page指令
<%@page contentType="text/html;charset=gb2312" pageEncoding="gb2312"%>
1.contentType
jsp文件会被tomcat转换成servlet.
page指令中的contentType正好是HttpServletResponse.setContentType()语句,也就是响应包包头的Content-Type: text/html;charset=gb2312
2.pageEncoding
jsp文件本身是用什么编码方式保存的,这样转成servlet时,就能正确的解析文件中的汉字
八.结论
1.请通过HttpServletResponse.setContentType("text/html;charset=gb2312") 或HttpServletResponse.setCharacterEncoding("gb2312")来指定服务器下传内容的编码.
2.编码能支持汉字即可,不一定非为gb2312.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/csdn1234/archive/2008/10/22/3125628.aspx
发表评论
-
十条不错的编程观点
2011-04-07 13:26 838在Stack Overflow上有这样 ... -
系统架构图 转载
2011-03-10 23:56 1141以下文字和架构图均在本人相关系统设计 和架构方案中有所 ... -
VeloCity velocity 乱码问题 解决总结
2010-11-17 16:54 1388VeloCity velocity 乱码问题 解决总结 vel ... -
MyEclipse8.5如何安装svn
2010-11-11 10:36 1094本文主要是介绍MyEclipse8.5如何通过link方式安装 ... -
Velocity中的ComparisonDateTool、MathTool、NumberTool、SortTool、Escape...
2010-11-08 14:44 1680可以从Apache官方网站自带的例子中查找,位置\velo ... -
使用Synchronized关键字同步类方法1
2010-11-08 10:44 1228要想解决“脏数据”的 ... -
使用Synchronized块同步方法3
2010-11-08 10:40 1173synchronized关键字有两种用法。第一种就是在《使用 ... -
使用Synchronized关键字同步类方法(2)
2010-11-08 10:37 1146在使用synchronized关键字时有以下四点需要注意: ... -
Servlet RequestDispatcher 路径问题
2010-11-02 10:09 18717. RequestDispatcher.forward(re ... -
优秀Java程序员必须了解的GC工作原理
2010-10-29 23:02 737Weak引用对象与Soft引用对象的最大不同就在于:GC在进行 ... -
Java 2 引用类使用指南
2010-10-29 22:43 667学习如何有效地使用 SoftReference、WeakRef ... -
Java对象的强、软、弱和虚引用
2010-10-29 16:07 738在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程 ... -
编写对GC友好,又不泄漏的代码
2010-10-29 14:55 731作者:江南白衣 ,最新版链接:http:/ ... -
ThreadLocal源码分析
2010-10-29 01:04 1518在阅读《Java Concurrency In Practic ...
相关推荐
jakarta.servlet.jsp.jstl-api-2.0.0.jar
javax.servlet.jsp.jstl-api-1.2.1.jar
servlet-api.jar 和jsp-api 工具jar包
Jsp-Servlet复习笔记-----第3章 Servlet技术 - 堕落天使 - JavaEye技术网站.mhtJsp-Servlet复习笔记-----第3章 Servlet技术 - 堕落天使 - JavaEye技术网站.mht
9. **MIME类型映射**:Servlet容器可以根据文件扩展名或Content-Type头自动选择Servlet,这在部署描述符中通过`<mime-mapping>`元素定义。 10. **JSP与Servlet的关系**:JSP(JavaServer Pages)是Servlet的一种...
Servlet API定义了服务器端组件如何与Web客户端(如浏览器)进行交互,处理接收到的请求,并生成响应。它允许开发者用Java编写服务器端程序,这些程序可以处理来自HTTP客户端的请求,并将结果返回给客户端。 2. **...
赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....
jcaptcha-integration-simple-servlet-sample.jar 验证码, jcaptcha组件,验证码项目
【javax.servlet.jsp-api-2.3.2-b01.jar.zip】这个压缩包文件包含的是Java服务器页面(JSP)的Servlet API,具体版本为2.3.2-b01。这个API主要用于网络应用程序开发,特别是针对基于Java的Web应用。在JSP中,开发者...
【javax-servlet-api-3.0.1.jar】是一个重要的Java库,主要用于开发Servlet应用程序。Servlet是Java平台上的一个标准接口,它允许程序员创建能够处理HTTP请求的服务器端程序。这个JAR文件包含了Servlet API 3.0.1...
JavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源代码 servlet-apiJavaEE源...
jsp-api.jar和servlet-api.jar,jsp-api.jar和servlet-api.jarjsp-api.jar和servlet-api.jarjsp-api.jar和servlet-api.jar,实用
<import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
希望可以帮助大家,servlet-api.jar
SERVLET
下地址https://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/3.1.0/ 各个版本都有 javax.servlet-api-3.1.0-sources.jar
将“ Content-Security-Policy”或“ Content-Security-Policy-Report-Only”标头添加到响应中。 另请参阅: 通常,您只需要有限的数目,也不需要任何init参数。 如果未定义init参数,则Header将如下所示: ...
- **Page指令**和**声明**:JSP页面的元数据,如导入的包、页面编码、错误页等,以及在页面范围内声明的变量和方法。 - **JSP标签库**:JSP支持自定义标签,这些标签可以封装复杂的逻辑,使页面更加清晰。 ### 3. ...
javax.servlet-api-3.1.0.jar,处理找不到servlet JAR的问题
javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...