0

解决问题的核心在于修改Tomcat的配置,在Server.xml文件中添加一个名为URIEncoding的属性,它用于对HTTP请求中的get方法传过来的URL进行编码。如果直接从Apache站点中下载Tomcat,无论是安装版的exe文件,还是解压缩的ZIP文件,内置的对于get协议中的URL编码都是ISO-8859-1,这个字符集不能直接支持中文等双字节的信息,而中文文件的下载链接恰恰是通过get协议进行的。以下说明修改Tomcat安装目录中的config文件夹中的server.xml文件的方法。 

打开config/server.xml文件,如果没有修改过这个文件,应该可以在其中找到如下代码: 

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" /> 

这段代码规定了Tomcat监听HTTP请求的端口号等信息,可以在这里添加一个属性:URIEncoding,将该属性值设置为UTF-8,即可让Tomcat不再以ISO-8859-1的编码处理get请求。更改后的代码如下所示(红色部分为新添加的代码): 

<Connector port="8080" 
URIEncoding="utf-8"
protocol="HTTP/1.1" 
connectionTimeout="20000" 
redirectPort="8443" /> 
 

URL不区分大小写:

默认情况下,tomcat的URL是区分大小写的。如http://localhost:8080/web和http://localhost:8080/Web是不一样的。

这样做的原因可能是因为tomcat支持jsp和servlet,而Java语言是区分大小写的。一般来说这样做是没有问题的。

但是如果某些网站程序或者页面制作过程中忽略了大小写问题,则就会导致网页显示不正常。 
    可以在其<Context>(位于tomcat根目录下:conf/context.xml文件中)元素中增加“caseSensitive="false"”来使其不区分大小写(对Tomcat7之后的版本无效)。 

只是这样设置只能保证该Context定义的路径下的内容不区分大小写。其他Context定义的路径仍然区分大小写,除非也加上 caseSensitive="false"的选项。 
    当然这样设置只能是对链接地址有效,至于jsp和Servlet中的语法还是区分大小写的,不是说做个该设置就全部是不区分大小写了。


这段时间客户要求url可以任意大小写,调查了很多资料,试了很多方法,最后总结一下

 

1、在server.xml的Context 中,设置caseSensitive="false"

jsp的文件名要全部小写,url中就可以任意大小写,但是这个方法有问题,当jsp中有server端代码时就会报页面找不到。不符合自己当前的情况,不适用。

 

2、重写doFilter

在web.xml中,追加

 <filter>
   <filter-name>Filter</filter-name>
   <filter-class>com.filter.PrFilter</filter-class>
   </filter>
   <filter-mapping>
   <filter-name>Filter</filter-name>
   <url-pattern>*.jsp</url-pattern>

   </filter-mapping>

然后新建java文件com.filter.PrFilter.java

package com.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import java.io.IOException;

public class PrFilter implements Filter {

 public void doFilter(ServletRequest req, ServletResponse res,
   FilterChain chain) throws IOException, ServletException {


  ((HttpServletResponse) res).sendRedirect(((HttpServletRequest) req).getRequestURL().toString().toLowerCase());

 chain.doFilter(req, res);
 }

 @Override
 public void destroy() {
 }

 @Override
 public void init(FilterConfig arg0) throws ServletException {
 }
}

这个方法用了之后发现,死循环了,不停的进入doFilter方法,猜想原因是页面转换之后,没找到正确的页面,所以不停的刷。(注释掉转换大小写的页面后,url指向的页面不刷了,但是刷新验证码的jsp还在闪个不停,故猜测是转换后找不到正确的页面)没找到具体错在哪里,所以只能再想办法。

 

后来把sendRedirect()方法换成了request.getRequestDispatcher,哈哈,总算成功了。

request.getRequestDispatcher(url).forward(request,response);

搞了那么久总算成功了。


转自:http://blog.csdn.net/ppzhangj/article/details/7867282
http://blog.csdn.net/fuchen_yan/article/details/8988042
关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.