日期:2014-05-18  浏览次数:20749 次

高分求助在tomcat里面实现URL重写
网站已经基本完成,到后期才发现,如果用户关闭了cookie,是没有办法保持session的,上网查了下资料,也知道可以通过response.encodeURL()来实现URL的重写,但目前网站已经写了大部分(没有使用struts和其它的taglib标记库),再回头一个一个改为response.encodeURL()工作量又大又容易出错,请问大家有没有什么好的办法来完成这个麻烦的任务?

尝试过(http://tuckey.org/urlrewrite/)库,但也没有解决问题。

------解决方案--------------------
urlrewrite不能解决问题么?这个就是专门用于重写的
------解决方案--------------------
你可以写一个程序,遍历你所有的java文件,自动替换为response.encodeURL。
这样就不用你一个一个改了。并且以后的开发还可以用得到
------解决方案--------------------
不会.或者如楼上方法.
------解决方案--------------------
一个简单的方法就是自定义一个继承Filter的类来处理
web.xml配置添加

<filter>
<filter-name> EncodeURLFilter </filter-name>
<filter-class> com.avantouch.action.EncodeURLFilter </filter-class>
<init-param>
<param-name> encode </param-name>
<param-value> gb2312 </param-value>
</init-param>
</filter>
<filter>

<filter-mapping>
<filter-name> HibernateFilter </filter-name>
<url-pattern> /* </url-pattern> //可以指定目录及文件类型如:/webbackend/*.jsp
</filter-mapping>

package com.avantouch.action;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EncodeURLFilter implements Filter {
private String encode = "gb2312 ";
public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(this.encode);
response.setContentType( "text/html;charset= " + encode);
HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
HttpServletResponse httpServletResponse = ((HttpServletResponse) response);
httpServletResponse.encodeURL(httpServletRequest.getRequestURI());
chain.doFilter(httpServletRequest, httpServletResponse);
}

public void init(FilterConfig config) throws ServletException {
this.encode = config.getInitParameter( "encode ");
}

}

------解决方案--------------------
关注
------解决方案--------------------
<?xml version= "1.0 " encoding= "utf-8 "?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN "
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd ">
<urlrewrite>
<rule>
<from> //deluser([0-z]+).html </from>
<to> /delete.jsp?username=$1 </to>
</rule>
</urlrewrite>