近日使用Tomcat调试的时候,使用response写入一个Cookie,发现Cookie的值带上了双引号,百思不得其解,查找源码发现Tomcat在写入Cookie值有"/" 的时候,为避免错误,Tomcat做了以下处理:
org.apache.tomcat.util.http.ServerCookie
private static void maybeQuote (StringBuffer buf, String value) {
if (value==null || value.length()==0) {
buf.append("\"\"");
} else if (CookieSupport.alreadyQuoted(value)) {
buf.append('"');
buf.append(escapeDoubleQuotes(value,1,value.length()-1));
buf.append('"');
} else if (CookieSupport.isHttpToken(value) &&
!CookieSupport.ALLOW_HTTP_SEPARATORS_IN_V0 ||
CookieSupport.isV0Token(value) &&
CookieSupport.ALLOW_HTTP_SEPARATORS_IN_V0) {
buf.append('"');
buf.append(escapeDoubleQuotes(value,0,value.length()));
buf.append('"');
} else {
buf.append(value);
}
}
查询Tomcat文档,解释如下:
org.apache.catalina. STRICT_SERVLET_COMPLIANCE
If this is true
the following actions will occur:
- any wrapped request or response object passed to an application dispatcher will be checked to ensure that it has wrapped the original request or response. (SRV.8.2 / SRV.14.2.5.1)
- a call to
Response.getWriter()
if no character encoding has been specified will result in subsequent calls toResponse.getCharacterEncoding()
returningISO-8859-1
and theContent-Type
response header will include acharset=ISO-8859-1
component. (SRV.15.2.22.1) - every request that is associated with a session will cause the session's last accessed time to be updated regardless of whether or not the request explicitly accesses the session. (SRV.7.6)
-
cookies will be parsed strictly, by default v0 cookies will not work with any invalid characters.
If set tofalse
, any v0 cookie with invalid character will be switched to a v1 cookie and the value will be quoted. -
the path in
ServletContext.getResource
/getResourceAsStream
calls must start with a "/".
If set tofalse
, code likegetResource("myfolder/myresource.txt")
will work.
If this is true
the default value will be changed for:
org.apache.catalina.connector.Request. ALLOW_EMPTY_QUERY_STRING
property- The
webXmlValidation
attribute of any Context element. - The
webXmlNamespaceAware
attribute of any Context element. - The
tldValidation
attribute of any Context element.
If not specified, the default value of false
will be used.
解决办法:
在catalina.properties里边增加一行:
org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true
或者自行修改源码
影响版本:暂时确认有Tomcat 6、7
相关推荐
为了更好地理解上述配置是如何工作的,接下来将对Tomcat 5.x 和 6.x/7.x 的源代码进行简单的分析。 ##### 1. Tomcat 5.x 源码解析 在Tomcat 5.x 中,`SESSION_COOKIE_NAME` 的定义如下: ```java public static ...
### tomcat启动不了问题处理 在IT领域,Tomcat服务器是一款非常流行的开源Web服务器,它主要用来部署Java Web应用程序。然而,在使用过程中,用户可能会遇到Tomcat无法启动的问题。本文将详细探讨导致Tomcat启动...
tomcat中server配置文件的结构,以及处理一个http请求的全过程
此外,Tomcat 8在性能和安全性上都有所提升,增强了对大型应用的处理能力。 Tomcat 9则是在2013年晚些时候发布,主要增加了对Java EE 7的支持,包括WebSocket 1.1、JMS 2.0和JSON-P等新特性。它改进了多线程模型,...
Tomcat8的另一个亮点是对WebSocket协议的支持,这使得开发实时Web应用变得更加容易。 **Tomcat9**: Tomcat9是在2014年推出,主要支持Java Servlet 4.0和JSP 2.3规范。此版本进一步提升了性能和安全性,尤其是在...
1. 发布时间:Tomcat 7在2011年发布,作为Tomcat 6的升级版,提供了对Java EE 6的支持。 2. Java EE支持:Tomcat 7支持Servlet 3.0、JSP 2.2、EL 2.2和WebSocket 1.0等规范,使得开发者能够利用新的特性进行Web应用...
tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat...
### Tomcat环境配置详解及问题处理 #### 一、Tomcat简介 Apache Tomcat是一款开源的Servlet容器,它能够提供对Servlet和JavaServer Pages技术的支持,并且可以作为HTTP Web服务器来使用。通常用于开发和部署Web...
1. **Servlet 3.0支持**:Tomcat 7.0引入了对Servlet 3.0规范的支持,这意味着开发者可以利用新的特性,如异步处理、注解配置、动态注册Servlet和过滤器,以及初始化参数等,简化开发流程。 2. **JSP 2.2支持**:...
基于tomcat服务器的跨域处理, 包含cors-filter-1.7.jar,Java -property-utils-1.9.jar 配置跨域 <!--跨域--> <groupId>com.thetransactioncompany</groupId> <artifactId>Java-property-utils <version>...
通过深入学习,读者能够对Tomcat的内部机制有全面而深入的理解,从而更好地优化和调试应用。 Tomcat是一款广泛使用的开源Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,是开发和部署Java ...
Tomcat 5.0是Tomcat的一个重要里程碑,它引入了对Servlet 2.4和JSP 2.0规范的支持,提供了更好的多线程处理能力,并对内存管理进行了改进,提升了服务器的稳定性和性能。同时,它还改进了安全管理,增强了日志功能,...
1. **Servlet 3.0支持**:Tomcat 7全面支持Servlet 3.0规范,这引入了诸如异步处理、注解配置、动态部署等功能,提高了Web应用的开发效率和性能。 2. **JSP 2.2支持**:它包含对JSP 2.2的实现,提供了更多的EL...
tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0
Tomcat,全称Apache Tomcat,是Apache软件基金会的一个开源项目,它是一个实现了Java Servlet和JavaServer Pages(JSP)技术的Web应用服务器,主要用于处理Java的动态内容。Tomcat是轻量级的,相比其他如IBM ...
3. **会话管理**:Tomcat如何实现Session跟踪,包括Cookie、URL重写和基于数据库的持久化策略。 4. **连接器与协议处理**:Coyote如何处理HTTP请求,包括解析请求头、读取请求体、构建响应,以及处理Keep-Alive和...
虽然Tomcat也可以作web服务器,但其处理静态html的速度比不上Apache,且其作为web服务器的功能远不如Apache,因此把Apache和Tomcat集成起来,将html和Jsp的功能部分进行明确分工,让Tomcat只处理Jsp部分,其他的由...
2. **线程模型**:Tomcat使用了多线程模型来处理并发请求。源码中的`Catalina`和` Coyote`组件涉及到了这部分内容,包括Acceptor线程和Worker线程的管理。 3. **生命周期管理**:每个Tomcat组件都有自己的生命周期...
4. **配置管理**:支持对Tomcat的配置进行自定义,包括端口号、工作目录等,满足不同项目的特定需求。 5. **日志查看**:方便查看Tomcat服务器的日志输出,帮助开发者定位和解决问题。 **二、安装与使用** 1. **...
1. **Tomcat 5**:这是Tomcat的一个重大升级,主要引入了对Servlet 2.4和JSP 2.0规范的支持。此外,它增强了安全性,提供了更好的管理工具,以及对NIO(非阻塞I/O)的支持,提高了并发性能。 2. **Tomcat 6**:此...