java编程之伪静态(urlrewrite)

(Notice:欢迎交流和沟通,Wx:IT_Ezra,QQ 654303408。仅个人观点和个人理解有问题讨论也可联系我。)

对于伪静态,解释一下就是假的静态,说的官方点就是“地址重写,用户得到的全部地址都是经过处理后的URL地址”。

那么为什么要伪静态呢?

答:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多,另外还可以美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL,更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息

应用场景是什么?

最直接的就是SEO优化(上面“为什么要伪静态呢?”已提到)

效果图

效果图

后台代码后台代码

效果图

可以看到效果图,其实我们页面是没有15.html这个真实存在的html的,但是可以通过伪静态的方式,实现这种页面的访问。其本质有一种url重写和重定向的请求(个人理解)。

那么接下来给大家手把手教学实现:

1.导入依赖。都9012年了 大家都会用maven了吧。

<!-- 伪静态url -->
<dependency>
	<groupId>org.tuckey</groupId>
	<artifactId>urlrewritefilter</artifactId>
	<version>4.0.4</version>
</dependency>

2.配置web.xml

<!--伪静态url重写-->
<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>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
</filter-mapping>

3.新建urlrewrite.xml文件。

其中路径根据controller的请求mapping的value,自行理解。

<urlrewrite>
<rule>
    <from>^/news/news.html$</from>
    <to>/news/news.jsp</to>
</rule>
<rule>
    <from>^/news/([0-9]+).html$</from>
    <to>/news/news/?Id=$1</to>
</rule>
<outbound-rule>
    <from>^/news/news/\?Id=([0-9]+)$</from>
    <to>/news/$1.html</to>
</outbound-rule>
</urlrewrite>

在这里我给大家介绍一下请求的顺序。首先我们的url为http://localhost:8080/official/news/?id=15.html。先进入 outbound-rule里面,进行from,根据form的正则匹配规则,那么news/?id=15.html就被获取到。$1表示正则表达式里面 []的第一个参数,也就是[0-9]+, (ps:不懂正则匹配的可以自行学习),然后获取到这个之后进行“重写”,也就是to规则,变成了http://localhost:8080/official/news/15.html。这个规则就是图1里面的显示地址,然后再通过这个地址进行rule里面。根据from规则。匹配到,15.html,然后进行“重写”,变成http://localhost:8080/official/news/15。这样的一个地址实际上也就是一个请求,也是我们熟悉的springmvc的请求,然后就可以走后台服务器,进行数据交互,最终返给前段。

同样,还有一个重点就是,outbound-rule并不是必要的。如果你的请求格式一开始就是http://localhost:8080/official/news/15.html这种类型,那么就可以直接通过rule规则了,那么outbound-rule规则的意义在什么地方呢?那就是,他可以带参数,甚至多参数。通过&连接。举个例子http://localhost:8080/servlet/detail?magid=520&categoryId=205。那么outbound-rule就是

<outbound-rule>
  <from>/servlet/detail\?magid=([0-9]+)&amp;categoryId=([0-9]+)</from>
  <to>/servlet/detail/$1_$2.html</to>
 </outbound-rule>

怎么样,用java实现伪静态很简单吧。快去操作吧。

参考博客 https://blog.csdn.net/leroy008/article/details/8534199

参考博客 https://www.cnblogs.com/cat520/p/9579134.html

发布了25 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sinat_29039125/article/details/100518660