天天看点

struts2页面伪静态

                                                    myeye1.1博客系统简介

     说明:

        系统使用 mysql+ssh框架搭建而成,其原型为www.iteye.com,本系统为模仿其博客系统部分功能的练习作品,一方面是为了加强3

    大框架的组合运用能力,另一方面向给本人提供很多帮助的www.iteye.com网站致敬.

   1.0版本实现功能。

        1、用户可以通过登录页面登录到自己的博客首页,首页显示信息有用户头像、性别、昵称、访问过我的用户列表、用户博客

       标题等信息列表、等。

        2、用户可以发布自己的博客,发表博客包括、标题、博客类型(下拉框)、博客分类(下拉框)、博客正文、博客标签(标签

        可使用多个,用“,”分割)。

        3、用户可以通过博客列表上方的管理博客列表实现对博客的管理,管理博客页面使用分页显示的方式显示10条博客标题的列表,

        用户可以通过每一条博客后边的编辑,删除按钮实现对每一个博客的编辑。

        4、实现点击博客标题列表显示该条博客的信息 。 

        5、当其他用户访问我的空间点击查看文章内容后增加文章访问次数。

        6、 自己或者其他用户访问文章都可以再文章下面的回复内实现文章的回复功能。   

        7、用户可以编辑自定义博客类型列表,实现对类型表的删除和添加。

        8、用户可以对自己博客的评论进行管理,仿iteye评论只能查看、删除,不能编辑修改。   

        9、实现用户管理自己的信息 ,注册时只提供填写部分信息,如用户头像(刚注册使用默认头像、用户自我简介等都未填写,用户都可以再 在这个

        模块完善自己的信息。         

        10、实现用户注册功能,使用javamail对用户的注册进行确认,目前只支持qq邮箱。地址选择使用ajax三级联动,同时用户名和

        验证码的检测同样使用ajax局部刷新技术,避免用户名重复和验证码老是出错(当用户输完验证码如果错误,输入框变红);

-------------------------------------------------------------------------------------------------------------------------------------   

        11、所有的博客展示页面使用伪静态第一便于SEO网络收索,第二是地址更加美观,由原来的/showblog?blogid=1123变成了/showblog/1123.html

        但是大量使用伪静态会使得网页加载速度不佳,并发量减少,所有只有博客展示页面使用了伪静态。

     struts2实现页面伪静态是使用urlrewrite这个开源框架,其原理就是Filter过滤器,首先urlrewrite会按照你在urlrewrite.xml的配置过滤一些指定地址的访问,比如你在urlrewrite.xml中配置只拦截/xxxx/yyy.html,当然/xxxx/yyy.html是你想要的地址,事先写到jsp中的,在未使用伪静态前的地址是/xxxx?id=yyy当拦截到/xxxx/yyy.html后会根据一些规则(正则表达式)将地址映射成/xxxx?id=yyy然后转发以便action处理,先前的?带值得url就不存在了,这样便于seo也较美观,但是大量使用会使得网页加载速度不佳,并发量减少。所有使用需谨慎。

     struts2实现伪静态关键步骤如下:

         1、添加jar包,urlrewrite-3.1.0.jar

          2、在web.xml中配置UrlRewriterFilter,配置代码如下

                <!--伪静态配置  -->

    <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>WARN</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>UrlRewriteFilter</filter-name>

        <url-pattern>/*</url-pattern>

       <dispatcher>REQUEST</dispatcher>

        <dispatcher>FORWARD</dispatcher>

    </filter-mapping>

         3、编写urlrewrite.xml,名字必须一致且放到WEB-INF/下,和web.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">

           <urlrewrite>

               <rule>

             <from>^/(\w+)/(\d+)\.html$</from>

             <to type="forward" >/$1?blogid=$2</to>

             </rule>

             </urlrewrite>

                需要拦截多种格式的url则添加多个  <rule>即可。

              <from>^/(\w+)/(\d+)\.html$</from>表示需要拦截的uir过滤器会通过这个正则匹配访问的地址,如我的博客标题的url为

            <a href="...../showblog/223.html" target="_blank" rel="external nofollow" >博客标题</a>

              当拦截后映射成?带参数的形式$1匹配第一个正则即(\w+)$2匹配第一个正则即(\d+)最后生产的地址为/showblog?blogid=222

              需要注意有:

                 urlrewrite的过滤器必须在struts之前,且struts的配置在 <filter-mapping>下加上 <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

    <dispatcher>INCLUDE</dispatcher>   

                即struts2的配置如下:<filter>

    <filter-name>struts2</filter-name>

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

    <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

    <dispatcher>INCLUDE</dispatcher> 

  </filter-mapping>

       疑问:第一次访问的时候感觉明显速度很慢?不知道是我的问题还是大家都会有这样的问题,之后访问就和没有伪静态之前的速度一样了,求解。