原创

jsp页面样式不生效

1.背景

springMVC项目,jsp页面,在tomcat7中运行正常

jsp页面中有定义:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

spring过滤器:

public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) {
	//这句话导致css文件在tomcat8中不生效
	res.setContentType("text/html;charset=UTF-8");
	chain.doFilter(req, res);
}

2.问题

jsp页面在tomcat8中运行,样式文件不生效

样式文件,浏览器F12查看响应头:Content-Type: text/html;charset=UTF-8,这是不对的

样式文件,响应头内容类型应该是:Content-Type: text/css;charset=UTF-8,这样才会正常显示

3.解决办法

过滤器不能将所有请求类型都指定为:Content-Type: text/html;charset=UTF-8,需要排除css文件即可。

public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) {
	//页面css文件不生效,此处css文件不能设置为text/html
	HttpServletRequest httpServletRequest = (HttpServletRequest) req;
	if(!httpServletRequest.getRequestURI().endsWith(".css")) {
		res.setContentType("text/html;charset=UTF-8");
	}
	chain.doFilter(req, res);
}

另外一个办法是注释掉jsp页面中的DOCTYPE定义,这样tomcat8将不会按定义的标准解析,不过需要修改所有页面,不是好的办法,按上面方法修改过滤器即可。

<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">--%>
正文到此结束