UrlRewriter url 地址重写

方法一:参考地址http://tuckey.org/urlrewrite/

方法二:使用spring mvc restful

方法三:页面静态化、伪静态化,这里可以使用Apache、nginx 等工具。


====================================================================================================================================


用Url Rewrite Filter重写url

今天发现一个好东西

Url Rewrite Filter

它可以实现url重写,从而隐藏实际的url,同时使url看起来更美观,简单

最令人兴奋的是它一下解决了一值在寻找的blog用户访问自己的空间的问题

比如http://hi.baidu.com/liuspring 就显示我的空间

1、下载Url Rewrite Filter

2、在项目的web.xml配置过滤器

XML语言:
<filter> 
<filter-name>UrlRewriteFilter </filter-name> 
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter </filter-class> 
<init-param> 
<param-name>logLevel </param-name> 
<param-value>debug </param-value> 
</init-param> 
</filter> 
<filter-mapping> 
<filter-name>UrlRewriteFilter </filter-name> 
<url-pattern>/* </url-pattern> 
</filter-mapping>


3、将urlrewrite-2.6.0.jar放入lib文件夹
4、新建urlrewrite.xml文件置于WEB-INF目录
5、配置urlrewrite.xml

<?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"> 

<!-- 

Configuration file for UrlRewriteFilter 
http://tuckey.org/urlrewrite/ 

--> 
<urlrewrite> 
<rule> 
<from>^/([a-z]+)/?$ </from> 
<to  type=  "forward"  >/blogView.do?go=$1 </to> 
</rule> 

<rule> 
<note> 这是一个通用请求url rewrite </note> 
<from>^/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)/?$ </from> 
<to  type=  "forward"  >/$2.do?go=$1 </to> 
</rule> 


<outbound-rule> 
<note> 
The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
the url /rewrite-status will be rewritten to /test/status/. 

The above rule and this outbound-rule means that end users should never see the 
url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks 
in your pages. 
</note> 
<from>/rewrite-status </from> 
<to>/test/status/ </to> 
</outbound-rule> 

</urlrewrite>




url匹配使用正则表达式的规则,
实验中发现一个问题,就是必须把里面的正则表达式用小括号括起来,在正则表达式中叫分组
不然会报异常:
java.lang.IndexOutOfBoundsException: No group 2
哈哈,前几日还费劲的自己写Servlet重写url呢,原来这有现成的,更加觉得自己现在的水平遇到的问题网上的前辈们早都遇到过了,一定要站在巨人的肩膀上,少走弯路啊。


把我的servlet贴在这,呵呵,参考自blojsom

package com. capinfo. servlet

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

import com.capinfo.util.PageConstraint; 
import com.capinfo.util.PigBlogUtil; 


import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 


/** 
* 
* @author Administrator 
* 
*/ 
public  class PigBlogServlet  extends HttpServlet { 

protected Log _logger = LogFactory. getLog(PigBlogServlet. class); 



/** 
* Initialize 
* 
* @param servletConfig {@link ServletConfig} 
* @throws ServletException If there is an error initializing 
*/ 
public  void init(ServletConfig servletConfig)  throws ServletException { 
super. init(servletConfig); 


/** 
* Handle requests made to 
* 
* @param httpServletRequest {@link HttpServletRequest} request 
* @param httpServletResponse {@link HttpServletResponse} response 
* @throws ServletException If there is an error serving the request 
* @throws IOException If there is an error serving the request 
*/ 
protected  void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)  throws ServletException, IOException { 


// Make sure that we have a request URI ending with a / otherwise we need to 
// redirect so that the browser can handle relative link generation 
// if (!httpServletRequest.getRequestURI().endsWith("/")) { 
// StringBuffer redirectURL = new StringBuffer(); 
// redirectURL.append(httpServletRequest.getRequestURI()); 
// redirectURL.append("/"); 
// if (httpServletRequest.getParameterMap().size() > 0) { 
// redirectURL.append("?"); 
// redirectURL.append(PigBlogUtil.convertRequestParams(httpServletRequest)); 
// } 
// 
// if (_logger.isDebugEnabled()) { 
// _logger.debug("Redirecting the user to: " + redirectURL.toString()); 
// } 
// 
// httpServletResponse.sendRedirect(redirectURL.toString()); 
// 
// return; 
// } 



// Check for an overriding id 
String blogId = httpServletRequest. getParameter(PageConstraint. GO); 
if (PigBlogUtil. checkNullOrBlank(blogId)) { 
String blogIdFromPath = PigBlogUtil. getBlogFromPath(httpServletRequest. getPathInfo()); 
if (blogIdFromPath ==  null) { 
blogId = PageConstraint. GO1
else { 
blogId = blogIdFromPath; 



if (PigBlogUtil. checkNullOrBlank(blogId)) { 
httpServletResponse. sendError(HttpServletResponse. SC_NOT_FOUND"Blog ID not specified"); 

return

StringBuffer redirectURL =  new StringBuffer(); 

//redirectURL.append(httpServletRequest.getContextPath()); 
System. out. println(httpServletRequest. getRequestURI()); 
if(httpServletRequest. getRequestURI(). indexOf( "/blog/") > - 1 && httpServletRequest. getRequestURI(). indexOf( ".jsp") == - 1 ){ 
if(!httpServletRequest. getRequestURI(). endsWith( "/") && httpServletRequest. getRequestURI(). indexOf( ".do") > - 1){ 
redirectURL. append(httpServletRequest. getRequestURI(). substring(httpServletRequest. getRequestURI(). lastIndexOf( "/"), httpServletRequest. getRequestURI(). length())); 

} else  if(httpServletRequest. getRequestURI(). indexOf( "/blog/") == - 1){ 

} else
redirectURL. append( "/blogView.do"); 


redirectURL. append( "?go="); 
redirectURL. append(blogId); 

httpServletRequest. getRequestDispatcher(redirectURL. toString()) 
. forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse); 
//httpServletResponse.sendRedirect(redirectURL.toString()); 
} else
httpServletRequest. getRequestDispatcher(httpServletRequest. getRequestURI()) 
. forward((ServletRequest)httpServletRequest, (ServletResponse)httpServletResponse); 
//httpServletResponse.sendRedirect(httpServletRequest.getRequestURI()); 

System. out. println(redirectURL. toString()); 
return




/** 
* Take out of service 
*/ 
public  void destroy() { 
super. destroy(); 

if (_logger. isDebugEnabled()) { 
_logger. debug( " destroyed"); 


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值