url重写

[b]1.什么是url重写?[/b]
其实就是把带一大堆参数的url,变成一个看上去很规矩的url。
例:/test.jsp?id=1234 ,重写后,可以用/test/1234.html

[b]2.url重写的好处[/b]
第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。
而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。
第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。
第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。
第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。

url重写的缺点:降低性能(它就是一个简单的过滤器(Filter),将请求的url 转换成我们想要的url,再对它进行请求的过程。 )

[b]3.如何实现url重写[/b]

i.配置过滤器一般在web.xml中
<filter> 
<filter-name>urlFilter</filter-name>
<filter-class>com.url.filter.URLFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>urlFilter</filter-name>
<url-pattern>*.shtml</url-pattern>
</filter-mapping>


ii.新建解析规则配置文件 urlrewrite.xml
<?xml version="1.0" encoding="utf-8"?> 
<urlrewrite>
<rule>
<from>^/(\w+)_(\w+)_(\d+)\.shtml$</from> 匹配表达式-正则表达式 (你自己定义的访问地址 )
<to type="forward">/$1.do?$2=$3</to> 解析后URL (实际访问地址)
</rule>
</urlrewrite>


iii.过滤器处理类 URLFilter.java
public class URLFilter implements Filter { 
public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws
IOException,ServletException
{
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String realPath
=request.getSession().getServletContext().getRealPath("/");

String fileName = realPath + "WEB-INF\\urlrewrite.xml";
String uri = request.getServletPath();
String rewriteUrl = getRewriteUrl(uri, fileName);
if (null != rewriteUrl) {
request.getRequestDispatcher(rewriteUrl).forward(request, response);
return;
}
filterChain.doFilter(servletRequest, servletResponse);

}


private String getRewriteUrl(String url, String fileName) {
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = f.newDocumentBuilder();
Document document = builder.parse(fileName);
NodeList list = document.getElementsByTagName_r("rule");
for (int i = 0; i < list.getLength(); i++) {
Element elemnt = (Element) list.item(i);
NodeList list2 = elemnt.getElementsByTagName_r("from");
Element element = (Element) list2.item(0);
String formValue = element.getFirstChild().getNodeValue();
NodeList list3 = elemnt.getElementsByTagName_r("to");
Element element2 = (Element) list3.item(0);
String type = element2.getAttribute("type");
String toValue = element2.getFirstChild().getNodeValue();
String rewriteUrl = url.replaceAll(formValue, toValue);
if (url != null && !"".equals(url.trim()) &&
!url.equals(rewriteUrl)) {

return rewriteUrl;

}

}

} catch (Exception ex) {

ex.printStackTrace();

}

return null;

}

}

[b]iv.tomcat配置[/b]
A.将urlrewrite-2.6.0.jar拷到classpath下。
B.将urlrewrite.xml文件拷贝到WEB-INF目录。
C.在web.xml中初始化。加上下面的代码:
  <filter> 
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>*.shtml</url-pattern>
</filter-mapping>



[b]v.错误界面处理[/b]
当请求时肯定是找不见相关页面了,那就跳到Error.jsp 进行相应的处理
A.加入错误跳转配置 web.xml
<error-page> 
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>


B.写错误页面 Error.jsp
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%> 
<%
response.setStatus(HttpServletResponse.SC_OK);
String key = (String)
request.getAttribute("javax.servlet.forward.servlet_path");
String reg = "^/(\\w+)_(\\w+)_(\\d+).shtml$";
String rewriteUrl = key.replaceAll(reg,"/$1.do?$2=$3&pageSize=15");
if(key != null || !key.equals(rewriteUrl)){
request.getRequestDispatcher(rewriteUrl).forward(request,response);
}
else{
out.print("对不起,您请求的页面没有找到! ");
}
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值