在将spring3.x 升级为4.3.x,jdk1.7 tomcat7升级到jdk1.8、tomcat8.5过程中,碰到了很多问题,也学习到了很多东西,现将这些问题分享出来,方便大家后续遇到同样问题时快速定位处理。

1、tomcat8.5不可在类似.test.com域名下写cookie

之前代码类似如下:

Cookie cookie = new Cookie("__admin__" ,"");
cookie.setDomain(".baidu.com");
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);

这样写在tomcat8.0上是没问题的,但是把它放到tomcat8.5上就报错了,tomcat启动报错信息如下:java.lang.IllegalArgumentException: An invalid domain [.baidu.com] was specified for this cookie

网上查阅资料,问题根源在于tomcat8.5本身的规则限制:

问题解决及原因分析帖子地址如下:

https://blog.csdn.net/cml_blog/article/details/52135115

https://blog.csdn.net/cml_blog/article/details/52135397

2、jackson-all包

之前项目用到了jackson-all的jar包,maven依赖如下:

<dependency>
<groupId>jackson-all</groupId>
<artifactId>jackson-all</artifactId>
<version>2.0.1</version>
</dependency>

在springmvc4.x以上版本中会出现兼容问题,需升级jackson版本 2.7以上,且Jackson 2.x版提供了三个JAR包供下载:

  1. Core库:streaming parser/generator,即流式的解析器和生成器。

    下载:

    http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.1.0/jackson-core-2.1.0.jar

  2. Annotations库:databinding annotations,即带注释的数据绑定包。

    下载:

    http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.1.0/jackson-annotations-2.1.0.jar

  3. Databind库:ObjectMapper, Json Tree Model,即对象映射器,JSON树模型。

    下载:

    http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.1.0/jackson-databind-2.1.0.jar

从Jackson 2.0起,

核心组件包括:jackson-annotations、jackson-core、jackson-databind。

数据格式模块包括:Smile、CSV、XML、YAML。

替换maven依赖如下:

<jackson.version>2.8.11</jackson.version>

 <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>

3、.html请求返回application/json数据报406问题

之前代码存在.html结尾请求json数据的代码,升级之后报406 error,代码如下:

    @ResponseBody
@RequestMapping(value = "/test/captcha.html", produces = "application/json;charset=UTF-8")
public String captcha(String callback) {
logger.warn("/test/captcha.html 验证码 ");
.....

我的解决方案是将produces = "application/json;charset=UTF-8"后面注解去掉,然后在spring-mvc.xml中添加一下代码如下:

<mvc:annotation-driven>
<mvc:message-converters>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>

网上参考解决方案参考:https://www.jianshu.com/p/eea6e2551749

4、tomcat 请求出现RFC 7230 and RFC3986的错误

在一些get请求中,带有{}的请求报400 error,tomcat控制台出现了RFC 7230 and RFC3986错误,网上查阅资料,发现是tomcat8.5对于一些特殊字符有限制,这个问题是高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。而我们的系统在通过地址传参时,在url中传了一段json,传入的参数中有"{"不在RFC3986中的保留字段中,所以会报这个错。

解决方案有两种:

  1. 修改get请求,将path中的特殊字符进行转码后再传到后台 encodeURIComponent()
  2. 修改tomcat中的配置…/conf/catalina.properties,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=|  ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|{},表示把{}放行

参考解决方案:https://blog.csdn.net/weixin_41986096/article/details/82785118

最新文章

  1. 为支持ASP.NET5跨平台,Jexus再添新举措
  2. pod setup 安装的最新办法(大坑啊)
  3. linux系统下nodejs安装过程随记
  4. 深入Java核心 Java内存分配原理精讲
  5. Hadoop SequenceFile数据结构介绍及读写
  6. ES6入门之函数的扩展
  7. 彻底解决:请求被中止: 未能创建 SSL/TLS 安全通道
  8. ActionBar Fragment运用最佳实践
  9. Visual Studio 2013使用SASS和Compass--SASS和Compass安装
  10. 在windows下配置对github的操作--基本操作
  11. Windows Phone 8初学者开发—第19部分:设置RecordAudio.xaml页面
  12. DOM:文档对象模型 --树模型
  13. javascript之内置函数
  14. 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结
  15. 保存标注对象到txt 制作xml
  16. Docker 容器连接
  17. python_flask 基础巩固(自定义URL转换器)
  18. Linux动态调频系统CPUFreq之一:概述【转】
  19. python之模块3
  20. etl数据同步工具 kettle

热门文章

  1. Jmeter_使用IE代理录制脚本
  2. Django 错误:TypeError at / &#39;bool&#39; object is not callable
  3. linux系统安全及应用——系统引导和登录控制
  4. Scanner类的用法
  5. 存入azure table时忽略某个属性
  6. 190310HTML&amp;CSS&amp;JS
  7. 【离散数学】 SDUT OJ 哪款赛车最佳?
  8. 分享记录一批免费VIP视频解析接口,不定时更新!
  9. STM32F0 中 ADC 多通道转换结果相同的问题
  10. 洛谷 P4108 / loj 2119 [HEOI2015] 公约数数列 题解【分块】