- 浏览: 127482 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (145)
- java (145)
- Java网络编程 (1)
- SWT 文本框Text通过GC重绘改变边框颜色 (1)
- tomcat部署web工程的两种方法 (1)
- JAX-RS 从傻逼到牛叉 1:REST 基础知识 (1)
- FreyjaJdbcTemplate 大致上完工了,想请人重构。。 (1)
- 开始认识自己 (1)
- 设计模式-Abstract Factory 模式 (1)
- 数据库中主键的设计原则 (1)
- JNI中jstring类型与c语言中的字符串的转换 (1)
- mac环境变量 (1)
- STC单片机ADC转换的例子 (1)
- myeclipse 8下安装Ibator . (1)
- OSGI与Android结合 (1)
- CSDN BLOG EXPERT (1)
- Java中网络操作的开源库CommonsNet (1)
- Apache License Version 2.0 英文内容及中文翻译 (1)
- JTest (1)
- GeoCon 用C#编写的开源的地理信息数据转换工具 (1)
- ERP简易教程 (1)
- 提高站点在搜索引擎上的排名 (1)
- Wifi (1)
- 腾讯Q+开放平台,相信又是一次成功的模仿 (1)
- C#坦克大战网络版代码 (1)
- Problem16 (1)
- Ajax 应该变成 Ajaj (关于JSON 与 XML 的比较) (1)
- ava框架数据库连接池比较(c3p0 (1)
- dbcp和proxool)bonecp (1)
- 继续向成熟男人靠拢 (1)
- Qt4.7中 默认的构造函数 (1)
- xml CDATA (1)
- 只针对中英文混合分词的中文分词器 (1)
- 典型相关分析及其适用范围和spss操作(转) (1)
- llvm (1)
- java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access (1)
最新评论
-
xm3530:
什么鬼?都没法看,发出来干嘛
Android中利用App实现消息推送机制的代码实例 -
lvtenglongxiaohei:
太经典了!
学习一下!
ERP简易教程 -
lvtenglongxiaohei:
<br> 一天中午,丈 ...
ERP简易教程 -
hzw2312:
加油~~~!!!
开始认识自己 -
123048591:
显示乱码
tomcat部署web工程的两种方法
以前一直使用resin-3.0.x作为服务器,最近想升级到resin3.1,于是在官网上下载了resin3.1.7a,解压配置一切正常,但把应用重新部署上去的时候就出了问题,以前一直正常的页面,现在却报错:
<h1>500 servlet exception</h1>
<pre><script type="text/javascript"><!----></script><a>[show]</a> /index.jsp:1: contenttype 'text/vnd.wap.wml; charset=utf-8' conflicts withprevious value of contenttype 'text/html; charset=utf-8'. check the .jspand any included .jsp files for conflicts.1: <%@page contenttype="text/vnd.wap.wml; charset=utf-8"%>2: <%@page import="java.util.*"%>3: <%!</pre>
根据上面的提示,意思似乎是我在jsp里面第一行设置的contenttype是'text/vnd.wap.wml; charset=utf-8,和前面设置的'text/html; charset=utf-8'不同导致冲突,但这个文件的第一行就是<<a href='mailto:%@page'>%@page</a> contenttype="text/vnd.wap.wml;charset=utf-8" %>,根本没有设置过'text/html; charset=utf-8',这个提示真是让人很摸不着头脑。
后来想到可能是utf8文件格式的问题,就用ue打开文件,另存了一次,选的是不带bom的utf8格式的文件,这次就可以正常显示了。但服务器上那么多文件,不可能一个一个的改,还得想其他的办法解决。在网上找了很久都没有任何头绪,似乎遇到这个问题的人很少。
最后实在是没办法,只好把源代码下载下来研究一下看了,还真的找出了原因所在。
因为resin在处理jsp文件的时候,会首先读取前面的几个字节来判断文件的格式,如果第一个字节是0xef、第二个字节是0xbb、第三个字节是0xbf,那么就认为这个文件是utf8格式,于是就自作主张的把contenttype设置成了text/html; charset=utf-8,然后在后面的处理过程中,因为jsp程序里面会有设置contenttype的指令,遇到这个指令会发现和之前的text/html; charset=utf-8不同,因此就抛出了异常。而如果没有bom格式的utf8,前面就不会有那三个字节的标识,所以就不会被处理了。
相关代码:
<pre name='code' class='java'> case 0xef: if ((ch = stream.read()) != 0xbb) { stream.unread(); stream.unread(); } else if ((ch = stream.read()) != 0xbf) { throw error(l.l("expected 0xbf in utf-8 header. utf-8 pages with the initial byte 0xbb expect 0xbf immediately following. the 0xbb 0xbf sequence is used by some application to suggest utf-8 encoding without a directive.")); } else { _parsestate.setcontenttype("text/html; charset=utf-8"); _parsestate.setpageencoding("utf-8"); stream.setencoding("utf-8"); } break;</pre>
判断冲突的代码:
<pre name='code' class='java'> else if (content_type.equals(name)) { string oldcontenttype = _parsestate.getcontenttype(); if (oldcontenttype != null && ! value.equals(oldcontenttype)) throw error(l.l("contenttype '{0}' conflicts with previous value of contenttype '{1}'. check the .jsp and any included .jsp files for conflicts.", value, oldcontenttype)); _parsestate.setcontenttype(value); string charencoding = parsecharencoding(value); if (charencoding != null) _parsestate.setcharencoding(charencoding); }</pre>
真不明白为什么resin要这么做呢,如果是web网站可能影响不大,contenttype本来就是text/html,但如果是wap或者其他contenttype的站点这么“智能”的编码判断方式问题就比较麻烦了。
附:utf-8 编码的文件可以分为no bom 和 bom两种格式(转载)
何谓bom? "ef bb bf" 这三个字节就叫bom,bom的全称叫做"byte order mard".在utf-8文件中常用bom来表明这个文件是utf-8文件,而bom的本意实在utf16中用来表示高低字节序列的。<br/>在字节流之前有bom表示采用低字节序列(低字节在前面),而utf8不用考虑字节序列,所以其实有无bom都可以。
<br/>微软的记事本 word 等只能正确打开含bom的utf8文件,然后ultraedit却恰恰相反,回把bomutf8文件 误认为ascii编码。
<br/>utf-8的bom是 efbbbf,因为ue载入utf-8文件会转成utf16,上述的efbbbf 在utf16中是fffe(unicode-le的bom),ultraedit不认识bom又加多一個bom,所以有2个fffe。<br/>文件就被它破坏了。
<h1>500 servlet exception</h1>
<pre><script type="text/javascript"><!----></script><a>[show]</a> /index.jsp:1: contenttype 'text/vnd.wap.wml; charset=utf-8' conflicts withprevious value of contenttype 'text/html; charset=utf-8'. check the .jspand any included .jsp files for conflicts.1: <%@page contenttype="text/vnd.wap.wml; charset=utf-8"%>2: <%@page import="java.util.*"%>3: <%!</pre>
根据上面的提示,意思似乎是我在jsp里面第一行设置的contenttype是'text/vnd.wap.wml; charset=utf-8,和前面设置的'text/html; charset=utf-8'不同导致冲突,但这个文件的第一行就是<<a href='mailto:%@page'>%@page</a> contenttype="text/vnd.wap.wml;charset=utf-8" %>,根本没有设置过'text/html; charset=utf-8',这个提示真是让人很摸不着头脑。
后来想到可能是utf8文件格式的问题,就用ue打开文件,另存了一次,选的是不带bom的utf8格式的文件,这次就可以正常显示了。但服务器上那么多文件,不可能一个一个的改,还得想其他的办法解决。在网上找了很久都没有任何头绪,似乎遇到这个问题的人很少。
最后实在是没办法,只好把源代码下载下来研究一下看了,还真的找出了原因所在。
因为resin在处理jsp文件的时候,会首先读取前面的几个字节来判断文件的格式,如果第一个字节是0xef、第二个字节是0xbb、第三个字节是0xbf,那么就认为这个文件是utf8格式,于是就自作主张的把contenttype设置成了text/html; charset=utf-8,然后在后面的处理过程中,因为jsp程序里面会有设置contenttype的指令,遇到这个指令会发现和之前的text/html; charset=utf-8不同,因此就抛出了异常。而如果没有bom格式的utf8,前面就不会有那三个字节的标识,所以就不会被处理了。
相关代码:
<pre name='code' class='java'> case 0xef: if ((ch = stream.read()) != 0xbb) { stream.unread(); stream.unread(); } else if ((ch = stream.read()) != 0xbf) { throw error(l.l("expected 0xbf in utf-8 header. utf-8 pages with the initial byte 0xbb expect 0xbf immediately following. the 0xbb 0xbf sequence is used by some application to suggest utf-8 encoding without a directive.")); } else { _parsestate.setcontenttype("text/html; charset=utf-8"); _parsestate.setpageencoding("utf-8"); stream.setencoding("utf-8"); } break;</pre>
判断冲突的代码:
<pre name='code' class='java'> else if (content_type.equals(name)) { string oldcontenttype = _parsestate.getcontenttype(); if (oldcontenttype != null && ! value.equals(oldcontenttype)) throw error(l.l("contenttype '{0}' conflicts with previous value of contenttype '{1}'. check the .jsp and any included .jsp files for conflicts.", value, oldcontenttype)); _parsestate.setcontenttype(value); string charencoding = parsecharencoding(value); if (charencoding != null) _parsestate.setcharencoding(charencoding); }</pre>
真不明白为什么resin要这么做呢,如果是web网站可能影响不大,contenttype本来就是text/html,但如果是wap或者其他contenttype的站点这么“智能”的编码判断方式问题就比较麻烦了。
附:utf-8 编码的文件可以分为no bom 和 bom两种格式(转载)
何谓bom? "ef bb bf" 这三个字节就叫bom,bom的全称叫做"byte order mard".在utf-8文件中常用bom来表明这个文件是utf-8文件,而bom的本意实在utf16中用来表示高低字节序列的。<br/>在字节流之前有bom表示采用低字节序列(低字节在前面),而utf8不用考虑字节序列,所以其实有无bom都可以。
<br/>微软的记事本 word 等只能正确打开含bom的utf8文件,然后ultraedit却恰恰相反,回把bomutf8文件 误认为ascii编码。
<br/>utf-8的bom是 efbbbf,因为ue载入utf-8文件会转成utf16,上述的efbbbf 在utf16中是fffe(unicode-le的bom),ultraedit不认识bom又加多一個bom,所以有2个fffe。<br/>文件就被它破坏了。
发表评论
-
java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
2012-02-08 14:17 1058<div>Java数据库连接(JDBC)由 ... -
llvm
2012-02-07 16:29 880llvm ... -
典型相关分析及其适用范围和spss操作(转)
2012-02-07 15:43 1583看文章《科学学研 ... -
只针对中英文混合分词的中文分词器
2012-02-03 10:39 1013该版本说明 1、只针对中英文混合分词 需要一些中文和 ... -
xml CDATA
2012-02-03 08:45 1210<h2 style="font-si ... -
Qt4.7中 默认的构造函数
2012-02-01 09:14 1088<p><span style=&qu ... -
继续向成熟男人靠拢
2012-01-11 17:04 879转自徒儿的人人。 ... -
ava框架数据库连接池比较(c3p0,dbcp和proxool)bonecp
2012-01-11 14:13 1135<h1 style="text ... -
Ajax 应该变成 Ajaj (关于JSON 与 XML 的比较)
2011-12-28 15:23 963<span style="font- ... -
Problem16
2011-12-28 12:53 668package com.shui.mu.yao.io. ... -
C#坦克大战网络版代码
2011-12-20 13:09 983简单C#坦克大战网络版代码 写完单机版 http ... -
腾讯Q+开放平台,相信又是一次成功的模仿
2011-12-20 10:44 861今天看到两则新 ... -
Wifi
2011-12-19 13:14 1086. Confirm if Wifi is On ... -
提高站点在搜索引擎上的排名
2011-12-19 12:04 937对于拥有网站的各位站长来说,都希望自己的站点能够在各种 ... -
ERP简易教程
2011-12-16 16:47 922注明:下面的帖子 ... -
GeoCon 用C#编写的开源的地理信息数据转换工具
2011-12-14 12:29 956<p class="MsoNorma ... -
JTest
2011-12-14 09:00 1029接到parasoft公司一位先生打来的电话,说下个月第 ... -
Apache License Version 2.0 英文内容及中文翻译
2011-12-13 12:59 2338</span> <p class= ... -
Java中网络操作的开源库CommonsNet
2011-12-13 12:39 817<p class="MsoNorma ... -
CSDN BLOG EXPERT
2011-12-13 08:59 1094<img src="http://p. ...
相关推荐
总结来说,Resin的Eclipse插件是Java开发者在使用Eclipse开发基于Resin 3.1的应用时的重要辅助工具,它提供了一整套集成了Resin服务器管理、应用部署、日志查看等功能,极大地优化了开发流程。通过阅读提供的博文...
resin3.1安装包&中文说明配置文件。 官方说明如下: Resin’s Java EE certified architecture is cloud-enabling. You can choose to have Resin power your SaaS application or utilize it as the backbone of ...
标题 "resin-pro-i386-linux-win-vs-resin-i386-linux-win-3.2.1" 提供的信息表明,这是一个关于Resin服务器在不同操作系统和版本间的比较,特别是针对i386架构(32位)的Linux和Windows平台。Resin是一款开源的应用...
综上所述,Resin-Pro-3.1.8作为一个成熟的Java应用服务器,具备了高性能、易管理、安全稳定等特性,是企业级应用的理想选择。无论是对于Java Web开发者还是系统管理员,理解和掌握Resin的特性和操作都至关重要,能够...
- **Servlet和JSP支持**:Resin完全兼容Servlet和JSP规范,可以运行基于这些标准的应用。 - **Quercus**:Resin内嵌了Quercus,这是一个PHP解释器,使Resin能直接运行PHP应用程序。 在实际操作中,用户还需要了解...
1. resin-server.xml:服务器的配置文件,用于设置服务器的行为和参数。 2. lib目录:包含Resin运行所需的JAR库,如Servlet和JSP API等。 3. conf目录:包含各种配置文件,如webapps目录结构、虚拟主机配置、邮件...
配置 XML 解析器,使 Resin 在处理 XML 文件时使用 Caucho 自己的解析器。 **10. 集群配置** ```xml <cluster id="app-tier"> <root-directory>.</root-directory> <server-default> *" port="8080"/> ...
Resin 3.1 配置文件说明 Resin 3.1 配置文件是 Resin 服务器的核心组件之一,它负责管理和配置 Resin 服务器的各种设置和参数。本文将详细介绍 Resin 3.1 配置文件的结构和配置项。 一、配置文件结构 Resin 3.1 ...
(4) Linux下Nginx+Resin负载均衡,session问题解决实例 - 21 - 1) 测试环境: - 21 - 2) 安装步骤: - 22 - a)在server1 上安装配置 nginx + nginx_upstream_jvm_route - 22 - b)分别在两台机器上 安装 resin - 22 -...
- **/resin-admin堆内存转储页签**:可以获取服务器的堆内存快照,用于诊断内存泄漏等问题。 - **/resin-admin自定义配置**:支持用户自定义服务器行为,实现更灵活的管理需求。 #### 十二、监控与管理工具 - **JMX...
【标题】"resin-4.0.7-src" 是一款开源的应用服务器软件,它主要用于部署和管理Java Web应用程序。这个版本(4.0.7)的源代码被包含在这个压缩包中,允许开发者深入理解其工作原理并进行定制化开发。 【描述】...
"resin-prp-4.0.44"这个标题暗示我们正在讨论的是Resin Pro的第4.0.44版本,这是一个商业版的Resin服务器,提供了更多的功能和性能优化,适合企业级的应用场景。 Resin Pro 4.0.44是其在2008年左右发布的一个稳定...
在给定的压缩包文件中,`resin-pro-4.0.57.zip`和`resin-pro-3.1.16.zip`分别包含了Resin4和Resin3的Pro版本。Pro版本通常提供更多的企业级特性,如更高级的集群管理、更完善的安全特性、更强大的性能监控工具等。...
2. **resin-webapp**: 这个组件专门用于处理Web应用程序的部署和运行。在Resin中,Web应用程序可以以WAR(Web Application Archive)或目录结构的形式部署在此目录下。Resin会自动检测并加载这些应用,提供HTTP服务...
Resin 3.1配置文件详解 Resin是一款高性能、轻量级的Java应用服务器,尤其在处理Web应用方面表现出色。它以其优秀的性能、稳定性以及易于管理的特性,深受开发人员的喜爱。本文将深入探讨Resin 3.1版本中的配置文件...
2. **稳定性**:"resin-pro-3.1.9"被描述为“比较稳定的一个版本”,这意味着它经过了广泛的测试和优化,减少了系统崩溃和性能问题的发生,能够为生产环境提供可靠的运行保障。 3. **性能优化**:Resin Pro 3.1.9在...
在使用Resin Pro 3.1.14时,用户通常需要解压下载的"resin-pro-3.1.14.tar"压缩包,这个文件包含了服务器的安装文件和相关文档。解压后,根据官方文档或在线教程进行配置,设置服务器端口、虚拟主机、数据源等参数,...
Resin Pro 4.0.50 是一款高效、稳定且功能强大的Java应用服务器,尤其适合处理高并发和大规模Web应用...通过下载并解压"resin-pro-4.0.50.zip",用户可以开始体验并利用这些功能来构建和运行他们的Java Web应用程序。