方法一:参考地址http://tuckey.org/urlrewrite/
方法二:使用spring mvc restful
方法三:页面静态化、伪静态化,这里可以使用Apache、nginx 等工具。
====================================================================================================================================
用Url Rewrite Filter重写url
今天发现一个好东西
它可以实现url重写,从而隐藏实际的url,同时使url看起来更美观,简单
最令人兴奋的是它一下解决了一值在寻找的blog用户访问自己的空间的问题
比如http://hi.baidu.com/liuspring 就显示我的空间
2、在项目的web.xml配置过滤器
<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
<!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
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");
}
}
}