struts2 jsp跳转action 404_Struts2 学习笔记(三)

9c9d9bcc089fd96740ca16b6f2faed98.png

1. Struts2的拦截器

1.1 拦截器概述

1.1.1 什么是拦截器

  • Interceptor:拦截器,起到拦截Action的作用;
    • Filter:过滤器,过滤从客户端向服务器发送的请求;
    • Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。
  • Struts2框架核心的功能都是依赖拦截器实现的;

1.1.2 Struts2的执行流程

客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。

Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按照一定的顺序连接成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按照其之前的顺序被调用。

de2d5fc99524d2de25f8fd966be8b5d7.png

1.2 拦截器入门

1.2.1 搭建Struts2的环境

1.2.2 编写拦截器类

编写一个类实现Interceptor接口或者继承AbstractInterceptor类。

  • Interceptor接口的定义代码:
public interface Interceptor extends Serializable{
    void init();
    // init方法在拦截器被创建之后会立即被调用,它在拦截器的生命周期内只被调用一次,可以在该方法中对相关资源进行初始化;
    void destory();
    // destory方法在实例销毁之前被调用,将调用该方法用来释放和拦截器相关的资源,也只被调用一次;
    String intercept(ActionInvocation invocation) throws Exception;
    // 用来添加真正的拦截工作的代码。它返回一个字符串作为逻辑视图。系统根据返回的字符串跳转到对应的视图资源。
    // 该方法的ActionInvocation参数包含了被拦截的Action的引用,可以通过该参数的invoke()方法,将控制权转给下一个拦截器或者转给Action的execute()方法
}
  • AbstractInterceptor类的定义代码:
public abstract class AbstractInterceptor implements Interceptor{
    // 空实现
    public void init(){}
    // 空实现
    public void destory() {}
    public abstract String intercept(ActionInvocation invocation) throws Exception;
}
  • 实例
public class InterceptorDemo1 extends AbstractInterceptor{
    @Override
    public String intercept(ActionInvocation invocation) throws Exception{
        System.out.println("InterceptorDemo1执行了...");
        String obj = invocation.invoke();
        System.out.println("InterceptorDemo1执行结束了...");
    }
}

1.2.2 对拦截器进行配置

  • 定义拦截器进行配置

要想让拦截器起作用,首先需要对它进行配置,拦截器的配置是在struts.xml文件中完成的,它通常以<interceptor>标签开头,以</interceptor>标签结束,定义拦截器的语法如下:

a3f8ea455c52bdc3307c83b4ccd51d82.png

name属性用来指定拦截器的名称,class属性用于指定拦截器的实现类,有时在定义拦截器时需要传入参数,这时候需要指定<param>标签。name属性用来指定参数的名称,paramValue表示参数的值。

3e461d2a77965ce7826eb1c7508bcb5b.png
  • 定义一个拦截器栈的方式

在实际开发过程中,经常需要在Action执行前同时执行多个拦截动作,这是可以把多个拦截器组成一个拦截器栈。在使用时,可以将栈内的多个拦截器当成一个整体来引用。当拦截器被附加到一个Action上时,在执行Action之前必须先执行拦截器栈中的每一个拦截器。

56cebe91fcb213b20534011729dd693e.png

2. Struts2的标签库

对于一个MVC框架而言,重点是实现两个部分:业务逻辑控制器部分和视图页面部分。Struts22作为一个优秀的MVC框架,也把重点放在这两个部分。控制器主要由Action来提供支持。而视图则是由大量的标签来提供支持。

2.1 Struts2标签库概述

2.1.1 Struts2标签库概述

在JavaWeb中,Struts2标签库是一个比较完善,而且功能强大的标签库,它将所有标签都统一到一个标签库中,从而简化了标签的使用。它还提供主题和模板的支持,极大地简化了视图页面的代码编写,同时它还提供Ajax的支持,大大丰富了视图的表现效果。

2.1.2 Struts2标签库的分类

472dda655bf4c25f8a6b5101f45a6480.png

普通标签主要是在页面生成时,控制执行的流程;UI标签则是以丰富而可复用的HTML文件来显示数据。普通标签又分为控制标签和数据标签,控制标签用来完成条件逻辑、循环逻辑的控制,也可用来做集合的操作。数据标签用来输出后台的数据和完成其他数据访问功能。UI标签则分为表单标签、非表单标签和Ajax标签。表单标签主要用来生成HTML页面中的表单元素,非表标签主要用来生成HTML的div标签及输出Action中封装的信息等,Ajax标签主要用来提供Ajax技术支持。

2.2 Struts2标签的使用

Struts2标签库被定义在struts.tags.tld文件中。要是用struts标签库,一般只要在JSP文件中使用taglib指令导入Struts2标签库:

<%@ taglib profix="s" uri="/struts-tags" %>

2.2.1 控制标签

  • <s:if>、<s:elseif>、 <s:else>

34168bed125492979e61c65351c5e1b5.png
  • <s:iterator>

4448d28a4e82d21b88364edeb8533fa3.png

2.2.2 数据标签

  • <s:property>

该标签用于输出指定的值,通常输出的是value属性指定的值。

  1. id:可选属性,指定该元素的标识;
  2. default:可选属性,如果要输出的属性为null,则显示default属性的指定值;
  3. escape:可选属性,指定是否忽略HTML代码;
  4. value:可选属性,制定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。
  • <s:a>标签

标签用于构造HTML页面中的超链接。

属性 | 是否必须 | 类型 | 描述 -- | -- | -- | -- action | 否 | String | 指定超链接Action地址 href | 否 | String | 超链接地址 namespace | 否 | String | 指定Action地址 id | 否 | String | 指定其id method | 否 | String | 指定Action调用方法

<s:a href="连接地址"></s:a>
<s:a namespace="" action="">superp1peng.xyz</s:a>
  • <s:debug>标签

该标签用于在调试程序时输出更多的调试信息,主要输出ValueStack和StackContext中的信息。

2.2.3 Struts2的模板的使用

Struts2的UI标签都是基于模板的。常见的主题有四种:simple、XHTML、css_xhtml、Ajax。通常,通过设置struts.ui.theme,来改变默认主题。

struts.xml文件中:
<constant name="struts.ui.theme" value="simple" />
或者struts.properties
struts.ui.theme = simple

2.2.4 Struts2的表单标签

  • 表单标签的公共属性:

ed35d4ee512d275d868bdac827414f48.png
  • <s:form>标签

5fcd29853fd23caa300277386a675ee2.png

标签用来呈现HTML语言中的表单元素,其中一般还会包括其他表单元素,textfield,radio等;

  • <s:submit>标签

5f79650698dfb3e32b4b1f97242a54ae.png
  • 其他一些标签
<s:textfield> <s:textarea>
    <s:password>
    <s:radio>
    <s:checkboxlist>
    <s:select>
    <s:hidden>
    <s:reset>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值