struts2拦截器_Struts2 学习笔记(一)

e0077d162e3749efef6c283c9006bac2.png

1. Struts的概述

1.1 什么是Struts2

Struts2是一个基于MVC设计模式的Web应用框架,它的本质就相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是在Struts和WebWork的技术的基础上进行合并的全新的框架。Struts2以WebWork为核心,采用拦截器的机制来处理的请求。这样的设计使得业务逻辑控制器能够与ServletAPI完全脱离开。

  • Struts2是一个基于MVC设计模型的WEB层框架

1.2 常见的web层框架

  • Struts2
  • Struts1
  • WebWork
  • SpringMVC

1.3 WEB层的框架都会基于前端控制器的模式

在传统方式的开发中,有一次请求就会对应一个Servlet,这样会导致出现很多的Servlet。而Struts2将所有的请求都先经过一个前端控制器。在前端控制器中实现框架的部分功能,剩下具体操作要提交到具体的Action中。那么所有的请求都会经过前端控制器。

如何来实现前端控制器呢?过滤器就是最好的一个实现方式,因为需要所有的请求都可以被过滤器拦截,然后在过滤器中实现部分的功能。

1af55da5e0d67abcdf997eb68dceffd0.png

2. Struts2入门

2.1 下载Struts2的开发环境

http://struts.apache.org/

2.2 解压Struts2的开发包

040265c6d0eba11e34cb9240dae807e1.png
  • apps:该文件夹存放官方提供的Struts2示例程序。
  • docs:Struts2的官方文档
  • lib:该文件夹用于存放Struts2的核心类库,以及Struts2的第三方插件类库。
  • src:该文件夹用于存放该版本Struts2框架对应的源码

2.3 创建一个web项目,并引入jar包

  • 引入jar包

2f595c279d4c928afe8b52ba99512ee3.png

这些包的基本含义:

f0434be5c9a874d3349bd5b3f5a55ed2.png

2.4 创建一个JSP页面

首先需要在WebContent下创建一个目录demo1,在demo1下创建一个新的jsp,在jsp中编写一个Action的访问路径。

<h1>Struts2的入门案例</h1>
<a href="${pageContext.request.contextPath }/hello.action">访问Struts2的Action</a>

2.5 编写一个Action

public class HelloAction{
    /**
    * 提供一个默认的执行方法:execute
    */
    public String execute(){
        System.out.println("HelloAction执行了...");
        return null;
    }
}

2.6 完成Action的配置

  • 在src下创建(提供)名称叫做struts.xml的配置文件

0b3ea27cd9c4fd1ab39c499f98464c35.png

现在Action类已经配置好了,但是还不是不能执行。之前介绍过WEB层框架都有一个特点就是基于前端控制器的模型,这个前端控制器是由过滤器实现的,所以我们需要配置Struts2的核心过滤器。这个过滤器的名字叫做:StrutsPrepareAndExecuteFilter

2.7 配置(前端控制器)核心过滤器

在web.xml中

bbe16eab397e5eba094191555ff1b1c1.png

到这里,我们的程序就可以执行了,但是到了Action以后,页面并没有跳转,只是会在控制台输出Action中的内容。但是在开发中,处理了请求之后,还需要进行页面的跳转。

这时候我们需要修改Action类中的execute方法的返回值了,这个方法返回了一个String类型,这个String类型的值就是一个逻辑视图(逻辑视图:相当于对一个真实的页面,取了一个别名)

2.8 修改Action,将方法设置一个返回值

107254de9235106289dfed6d9bff1069.png

2.9 改写struts.xml

d58cf74ce48c3e626e8570270bb4dcba.png

2.10 编写success.jsp页面

b52389fdbb13844989fee499352f87ba.png

3. Struts2的执行流程

7d07ea52bc7199dd747fa81d1628ca7a.png

当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。

4. Struts2的常见配置

4.1 XML的提示问题

4.1.1 配置XML的提示

02746956015131db008ae03df84b360e.png

4.2 Struts2的配置文件的加载顺序

每次从客户端发送请求到服务器都要经过Struts2的核心过滤器StrutsPrpareAndExecuteFilter,这个过滤器有两个功能:预处理和执行。在预处理过程中主要就是加载配置文件,对于的是过滤器中的init方法,而执行时用来执行一组拦截器完成部分功能,对应的是过滤器的doFilter方法。

dff2ba7ef0ca6e1f31d8deb07073bf30.png
  • init_DefaultProperties() // [1]----加载default.properties
  • init_TraditionalXmlConfigurations(); // [2] ----加载struts-default.xml、struts-plugin.xml、struts.xml
  • init_LegacyStrutsProperties(); // [3]----加载struts.properties
  • init_CustomConfigurationProviders(); // [5] ----加载配置提供类
  • init_FilterInitParameters() ; // [6] ----加载web.xml中过滤器初始化参数
  • init_AliasStandardObjects() ; // [7] ----加载Bean对象
default.properties => struts-default.xml => struts-plugin.xml => struts.xml => struts.properties => web.xml 后面配置的常量值会覆盖先配置的常量值。

5. Action的配置

Struts2框架的核心配置文件是struts.xml文件,该文件主要用来配置Action和请求的对应关系。

5.1 Package相关配置

Struts2框架的核心配置文件是Action和拦截器,他使用包管理Action和拦截器。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。

【package标签的属性】 - name:包的名称,只有在一个项目中不重名即可; - extends:继承哪个包,通常值为struts-default; - abstract:抽象的,用于其他包的继承; - namespace:名称空间,与标签中的name属性共同决定访问的路径;

namespace有三种配置:

  1. 默认名称空间:默认的名称空间就是namespace="";
  2. 跟名称空间:跟名称空间就是namespace="/";
  3. 带名称的名称空间:namespace="/demo1";

5.2 action相关配置

action标签配置Action类。

【action标签的属性】

  • name:与namespace共同决定访问路径;
  • class:与Action类的全路径(可选);
  • method:执行Action中的哪个方法的方法名,默认值execute(可选);
  • converter:用于设置类型转换器(可选);

5.3 常量配置

在Struts2的框架中,提供了非常多的常量:(在default.properties)

Struts2常量配置的三种方式: - 在struts.xml文件中使用元素配置常量:

c07dab2579cd7a8d79e75ad5b5a7acc6.png
  • 在struts.properties中进行修改

2c8e385bb4ae76b0dace86f3f5440312.png
  • 在web.xml中进行修改

a4eb09ac048324d1fdcf3416a1e37eb5.png
init-param标签必须放在filter标签下。

5.4 分模块开发的配置

通过include引入配置:

8db5957b115024359b21467ece5a6a61.png

6. Action的访问

在Struts2的应用开发中,Action作为框架的核心类,实现对用户请求的处理,Action类被称之为业务逻辑控制器。一个Action类代表一次请求或者一次调用,每个请求的动作都对应于一个相应的Action类,一个Action类是一个独立的工作单元。也就是说,用户的每次请求,都会转到一个相应的Action类里面,由这个Action类来进行处理。

6.1 Action类的写法

实现Action控制类共有3种方式。

  • 【Action是一个POJO的类】
public class ActionDemo1{
    public String execute(){
        System.out.println("ActionDemo1执行了...");
        return "success";
    }
}

execute()方法的要求如下: 1. 方法的权限修饰符为public 2. 返回一个字符串,就是指示的下一个页面的Result 3. 方法没有参数

  • 【Action类实现一个Action的接口】
public class ActionDemo2 implements Action{
    @Override
    public String execute() throws Exception{
        System.out.println("ActionDmo2执行了...");
        return SUCCESS;
    }
}
该接口还定义了5个字符串常量,SUCCESS(success)代表成功,NONE(noe)代表页面不跳转,ERROR(error)代表跳转到错误页面,INPUT(input)数据校验的时候跳转路径,LOGIN(login)用来跳转到登录界面。
  • 【Action类继承ActionSupport类】(推荐)
/**
* 提供了数据校验,国际化等一系列的操作
*/
public class ActionDemo3 extends ActionSupport{
    @Override
    public String execute() throws Exception{
        System.out.println("ActionDemo3执行了...");
        return NONE;
    }
}

6.2 Action的访问

Action的访问方式:

【通过配置method属性完成】

c13e66fdbecaa5e0a9d146ffd89941f0.png

【通过通配符的方式进行配置】(推荐)

d68f4597cb4aeec909c7bb97934b7c54.png

【动态访问方法】

动态方法访问在Struts2中默认是不开启的,如果想要使用需要先去开启一个常量。

30f6ef203c16e3ed12bf9dda28f3b366.png

然后配置Action:

28a3e9579c13589b258f52b60c7882ca.png

页面路径写法:

c7ae8bd2374bad23c73fbeb86947281c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值