Java 如何实现URL的重写 在线等 本帖最后由 bruce_w 于 2010-11-30 14:57:41 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道你的规则是什么,如果只是GET的话可以用Filter。如果是post的话会有问题。Filterpackage test;import java.io.IOException;import java.util.Enumeration;import java.util.logging.Level;import java.util.logging.Logger;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;/** * * @author oushuuryuu */public class TestRedirectFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { redirect((HttpServletRequest)request, (HttpServletResponse)response); } @Override public void destroy() { } private void redirect(HttpServletRequest request, HttpServletResponse response) { String uri = request.getRequestURI(); String newURL = uri.replaceAll(".do", ".html"); Enumeration<String> paramNms = request.getParameterNames(); while (paramNms.hasMoreElements()) { String paramName = paramNms.nextElement(); newURL = newURL.concat("_").concat(paramName).concat(request.getParameter(paramName)); } try { response.sendRedirect(newURL); } catch (IOException ex) { Logger.getLogger(TestRedirectFilter.class.getName()).log(Level.SEVERE, null, ex); } }}web.xml <filter> <filter-name>RedirectFilter</filter-name> <filter-class>test.TestRedirectFilter</filter-class> </filter> <filter-mapping> <filter-name>RedirectFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> 查询下 urlrewrite 方面资料 里面有提到 urlrewrite.jar 把它添加到项目中 然后再WEB-INF下配置下 urlrewrite重写规则 之后就可以访问了 类似<urlrewrite> <rule> <from>XXXX.html_XX([0-9]+)</from> <to type="redirect">/XXXX.do\?XX=$1</to> </rule></urlrewrite> jacob错误 关于struts2中执行action里面哪个方法的疑问 Hibernate session.get方法的问题 哪位高手有BBS系统 开源的... java 怎么将%u5927之类的转化成汉字 richface中tree 的 nodeSelectListener不起作用 请高手帮我看看错在哪儿? 为什么会找不到??? 怎样判断客户端能否运行applet javabeans的一个问题!!! 怎么在jsp网页中分页显示数据库中的数据 java 操作 服务器 磁盘
package test;import java.io.IOException;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;
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;/**
*
* @author oushuuryuu
*/
public class TestRedirectFilter implements Filter { @Override
public void init(FilterConfig filterConfig) throws ServletException {
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
redirect((HttpServletRequest)request, (HttpServletResponse)response);
} @Override
public void destroy() {
} private void redirect(HttpServletRequest request, HttpServletResponse response) {
String uri = request.getRequestURI(); String newURL = uri.replaceAll(".do", ".html"); Enumeration<String> paramNms = request.getParameterNames();
while (paramNms.hasMoreElements()) {
String paramName = paramNms.nextElement();
newURL = newURL.concat("_").concat(paramName).concat(request.getParameter(paramName));
}
try {
response.sendRedirect(newURL);
} catch (IOException ex) {
Logger.getLogger(TestRedirectFilter.class.getName()).log(Level.SEVERE, null, ex);
}
}}
web.xml <filter>
<filter-name>RedirectFilter</filter-name>
<filter-class>test.TestRedirectFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RedirectFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<urlrewrite>
<rule>
<from>XXXX.html_XX([0-9]+)</from>
<to type="redirect">/XXXX.do\?XX=$1</to>
</rule>
</urlrewrite>