(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]+)&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