struts2之通配符、页面跳转、拦截器

来源:互联网 发布:微信牛牛作弊器软件 编辑:程序博客网 时间:2024/05/17 05:51

一:通配符

         1.1:含义

              通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;

        2.2:实例

                 (jsp页面)

           <%@ page language="java" contentType="text/html; charset=UTF-8"
                 pageEncoding="UTF-8"%>
             <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
              <html>
               <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                   <title>Insert title here</title>
                </head>
               <body>

                <a href="studentadd_addsuccess.action">添加数据</a><br/><br/>
                <a href="studentupdate_add.action">修改数据</a><br/><br/>
                <a href="studentdelete.action">删除数据</a><br/><br/>
                <a href="studentquery.action">查询数据</a><br/><br/>

                </body>
                </html>

            

             ( struts.xml )

      <action name="student*_*" class="com.phy.action.StudentAction" method="{1}">
                <result name="{2}">/{2}.jsp</result>
            </action>


此处使用通配符,其中*匹配所有,在method中的{1}表示匹配第一个*,其中跳转页面的命名也是根据第一个*的值进行的。method中的{2}匹配name中的第二个*;result中页面的命名分别取name中的第一个*和第二个*。

二:jsp页面跳转

       一般我们转发有3种重定向(redirect)、转发(dispatcher--默认)、还一种是action的跳转,以前我们根据servlet跳转的话只要通过request和response来实现跳转就可以了,但是struts2我们只需要通过配置就可以实现了,通过<result>标签里面的type属性就可以实现了。

     <result name="add" type="redirect/dispatcher">add.action</result>  --jsp页面跳转

     <result name="tosuccess" type="chain/redirectAction">studentquery</result>    --action跳转
               


三:拦截器(Interceptor)

        拦截器和以前我们学的过滤器一样起到拦截作用,它分为两种一种是系统拦截另一种是自定义拦截,它是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。

         3.1:系统拦截器--Timer/Token

               Timer--测试方法执行的时间,在struts.xml里面的action标签进行配置

                    <interceptor-ref name="timer"></interceptor-ref>

                不过单纯这一句是不起作用的,我们还需要配置默认的

                    <interceptor-ref name="defaultStack"></interceptor-ref>

             Token-- 令牌:解决表单重复提交问题 

                   <interceptor-ref name="token"></interceptor-ref>

            这样的话在运行下会报错误,所以我们需要在配置

                   <result name="invalid.token">/error.jsp</result>

          还有一些其它系统拦截器,感兴趣的可以去官网看看

               

      3.2:自定义拦截器 

              我们需要自定义一个类并且需要继承AbstractInterceptor并重写intercept方法,然后在struts.xml里面配置拦截器

              <interceptors>
               
                    <interceptor name="one" class="com.phy.interceptor.OneIntercepter"></interceptor>
              </interceptors>

             然后在引用拦截器在action里面--属性名要和上面一样

                   <interceptor-ref name="token"></interceptor-ref>

           如果你这样运行的话你会发现业务根本就没有走,那是应为你在写自定义拦截器类的时候没有返回值,就把方法阻拦了,这时候就需要对它进行放行了

               @Override
           public String intercept(ActionInvocation arg0) throws Exception {
          // TODO Auto-generated method stub

          return arg0.invoke/invokeActionOnly();  ----
这里我们有两种放行第一种是会一直传播下去,而第二种的话就不会传播下去直接得到最终结果
             }