项目从Resin迁移到Tomcat工具类库

项目组有两个老项目需要从resin迁移到tomcat,因为这两个项目的调用方比较多,所以要保证从resin迁移到tomcat过程中对调用方完全透明才行。这就需要对resin和tomcat的不同之处进行处理。

在修改过程中踩了若干坑,最终相关的Resin2Tomcat处理代码有了一个相对稳定的版本。于是把这部分相关处理代码抽成了一个maven工程,上传到公司仓库,方便以后其他同学使用。

1. 问题

目前遇到的问题主要是resin和tomcat对编码方式的不同,

  1. resin用gbk进行urlDecode,tomcat用utf-8进行urlDecode。
  2. 部分调用方的调用参数没有进行urlEncode,所以tomcat需要做iso8859-1到utf-8的转换。
  3. 调用方可能调用不规范,比如post请求的部分参数放在url中,部分放在body中。

2. 处理思路

做一个filter进行编码的转换,这样业务代码就不需要进行变动了,可以直接Resin切换到Tomcat。

3. 如何使用

  1. pom.xml中添加依赖
    <dependencies>
        <dependency>
            <groupId>com.netease.urs</groupId>
            <artifactId>resin2tomcat</artifactId>
            <version>0.1.0</version>
        </dependency>
    </dependencies>
  1. web.xml中添加filter
	<filter>
		<display-name>EncodingFilter</display-name>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>com.netease.urs.resin2tomcat.filter.EncodingFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/servlet/*</url-pattern>
	</filter-mapping>

4. 其他

删除lib下的Resin.jar,因为发现这个jar在tomcat中会报错

/** * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/ /* var disqus_config = function () { this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable }; */ (function() { // DON'T EDIT BELOW THIS LINE var d = document, s = d.createElement('script'); s.src = 'https://chenzz.disqus.com/embed.js'; s.setAttribute('data-timestamp', +new Date()); (d.head || d.body).appendChild(s); })();