首页 技术 正文
技术 2022年11月16日
0 收藏 802 点赞 2,345 浏览 6147 个字

目录

Struts2

Struts2简介

Struts2框架的作用

  • Struts2是一个基于MVC设计模式的Web应用框架
  • 它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,
  • 是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
  • Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以可以将Struts 2理解为WebWork的更新产品。

常见web层的框架

  • Struts2
  • Struts1
  • Webwork
  • SpringMVC

web框架特点

基本前端控制器模型来设计

  • 浏览器发送的所有的请求,都需要经过前端控制器
  • 前端控制器再根据具体的请求所要实现 的功能,分发到不同的action来处理
  • 所有的分发操作都是框架自动帮你完成的
  • 我们只需要关心数据怎么样处理,封装、接收这些都不用管
  • 其余的操作都是前端控制器来帮你完成

前端控制器

  • 所有的请求都要处理
  • 是通过过滤器来实现的
  • 过滤器当中会有接收数据,封装数据,把所有的东西都帮你处理好,最后到action当中就可以直接使用了

Struts2基本使用

1.下载strusts框架

https://struts.apache.org/

2.目录结构

apps
Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以运行
里面就是一个最简单的一个项目,有strust2所需要的jar包
docs
Struts2的开发文档和API
lib
Strtus2框架的开发的jar包
src
Struts2的源码

3.创建一个web工程

4.引入jar包

5.在工程当中创建一个jsp

在jsp当中写上一个连接,发送一个请求

6.编写Action类

在src当中创建一个普通的类

在类当中提供一个方法,方法名称是固定的

public String execute(){ }

底层会使用反射执行此方法

public String execute(){
System.out.println("我已经接收到了请求");
return null;
}

7.创建Struts配置文件

在src当中创建一个配置文件strust.xml

此文件可以在blank项目的classes目录下找到

8.配置Struts.xml

9.配置前端控制器

  • 没有前端控制器,就没有办法执行action
  • 因为Stusts这些功能都是有前端控制器来给我们提供的
  • 它是有一个过滤器来实现的
  • 所以要去配置一个过滤器

  • 到web.xml当中配置核心过滤器

配置完运行,即可执行到创建的MyAction类中的excute方法

10.在Action当中excute中返回一个Success

11.改写strust.xml,配置页面跳转

Struts2执行流程

  1. 浏览器发送请求至过滤器
  2. 前端核心控制器里有很多拦截器
  3. 加载核心配置文件,寻找对应action里的class
  4. 执行execute方法
  5. 根据返回值跳转页面

Struts2配置

struts2的加载顺序

在struts2当中可以有很多地方可以配置常量
配置的常量,哪一个地方生效,就跟加载顺序有关

配置文件加载顺序

init_DefaultProperties()

加载default.properties

init_TraditionalXmlConfigurations();

加载struts-default.xml、struts-plugin.xml、struts.xml

init_LegacyStrutsProperties();

加载struts.properties

init_CustomConfigurationProviders();

加载配置提供类

init_FilterInitParameters() ;

加载web.xml中过滤器初始化参数

init_AliasStandardObjects() ;

加载Bean对象

配置文件加载顺序

  • default.properties
  • struts-default.xml
  • struts-plugin.xml
  • struts.xml
  • struts.properties
  • web.xml
  • 后配置的常量的值会覆盖先配置的常量的值

Package

包,这个包与Java中的包的概念不一致。
包为了更好管理action的配置
属性
name
包的名称,只有在一个项目中不重名即可。
extends
继承哪个包,通常值为struts-default。
默认我们继承的是Struts-default
在这个包当中,定义了很多结果类型和很多的拦截器,继承了这些东西之后,action才有了这些功能
namespace
namespace+name共同决定了访问路径
名称空间有三种写法
带名称的名称空间
namespace=”/aaa”
根名称空间
namespance=”/”
默认名称空间
namespace=””
abstract
抽象的,用于其他包的继承
现在这个包想被别人继承,设置abstract值为true
设置成abstract后就不能用自己运行了

action

配置Action类。
属性
name
与namespace共同决定访问路径
class
Action类的全路径
method
执行Action中的哪个方法的方法名,默认值execute
converter
用来自定义类型转换器,一般不设置,内部提供的转换器已经够用

常量配置

在Struts2的框架中,提供了非常多的常量
在default.properties
struts.i18n.encoding=UTF-8
Struts2中所有的post请求的中文乱码不用处理。
struts.action.extension=action,,
Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。

在Struts2中修改一些常量的值

在default.properties当中的值是不允许直接修改的
修改常量的值,可以有三个位置进行修正
struts.xml中进行修改,通过<constant>标签

struts.properties中进行修改,自己新建的, 只能修改常量,基本不使用web.xml中进行修改,通过过滤器的初始化参数来修改常量

后面的会覆盖前面的内容

include

  • 在一个配置文件当中引入其它的配置文件

  • 以后做团队开发时,很多人都需要去修改配置文件

  • 防止被改乱,可以单独的创建一个配置文件

  • 在主配置文件当中引入创建的配置文件

Action执行访问

Action类写法

1.Action类是POJO的类

自己手动实现execute方法

2.Action类实现一个Action的接口

实现接口时,会让你覆盖execute方法

在此接口当中定义了5个常量(逻辑视图)

String SUCCESS = "success";
成功
String NONE = "none";
没有跳转
String ERROR = "error";
失败
String INPUT = "input";
表单校验时出错
String LOGIN = "login";
登录出错页面跳转

3.Action类继承ActionSupport类(推荐使用此方式)

Actionsupport当中提供了很多功能,数据校验,国际化等一系列操作方法

Action方法

Method访问

使用方法

public String add(){
System.out.println("添加");
return null;
}
public String delete(){
System.out.println("删除");
return null;
}
public String update(){
System.out.println("修改");
return null;
}
public String find(){
System.out.println("查找");
return null;
}
弊端
要写多个action标签

通配符

要求
访问路径当中要包含执行的方法
使用通配符调用方法时,内部会验证是否允许访问该方法,所以要在Action中加上
<allowed-methods>delete,update,insert,select</allowed-methods>
goods_*        method="{1}"    其中1为第一个*的内容
*_* class="com.myxq.struts.{1}" method={2}
使用方法

动态方法访问

要求
  • 默认是关闭状态,要想使用的话,必须得要通过修改常量来打开

  • 使用通配符调用方法时,内部会验证是否允许访问该方法,所以要在Action中加上

<allowed-methods>delete,update,insert,select</allowed-methods>
使用方法

ServletAPI

Struts中API介绍

  • 在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的。
  • 在实际开发中,经常使用到Servlet的API。
  • 比如进行登录,将用户的信息保存到Session中,有的时候需要向页面输出一些内容,用到response对象。
  • 涉及到Servlet的API的访问。

如何获得到servlet中的API

完全解耦合的方式

使用ActionContext来进行获取

注意

​此方法只能从域中取数据和保存数据

​不能获取其它的方法

使用步骤

示例表单

<form >
用户名:<input type="text" placeholder="请输入用户名..." name="username"><br/>
昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br/>
爱 好: <input type="checkbox" value="足球" name="hobby">足球
<input type="checkbox" value="篮球" name="hobby">篮球
<input type="checkbox" value="乒乓球" name="hobby">乒乓球<br/>
<input type="submit" value="提交">
</form>
使用Servlet的API的原生方式

servletActionContext

这种方式可以操作域对象的数据,同时也可以获得对象的方法。

使用步骤

接口注入的方式

让Action实现一些接口,让接口提供的一些方法,设置一些具体的值

使用步骤

结果页配置

全局配置

全局结果页面

​全局结果页面指的是,在包中配置一次,其他的在这个包中的所有的action只要返回了这个值,都可以跳转到这个页面。

使用场景

​有些功能需要用户登录才能使用,只要没有登录,就让它返回到登录页面,很多地方都要返回到登录,所以可以把登录页做为一个全局的

使用方法

局部配置

局部结果页面

​局部结果页面指的是,只能在当前的action中的配置有效

使用方法

注意点

​全局和局部名称相同时,会优先找局部

接收参数

当发送一个请求时,除了使用requestApi来接收参数之外,Struts2内部提供了3种 接收参数的方式

接收参数的方式

1.提供属性set方法的方式

在Action当中提供对应属性的set方法,会自动接收参数,并且会自动做类型转换

使用方式

缺点

​接收少量数据可以,如果大量数据,还得要自己手动封装成对象

2.页面中提供表达式方式

  • 创建一个接收参数的domain模型
  • 在Action当中提供一个对象属性,并要提供该对象属性的get/set方法
  • 在jsp页面当中发送参数时要带上Action当中的对象属性名称

使用方式

3.采用模型驱动方式

  • 创建一个接收参数的domain模型
  • 在Action当中实现ModelDriven接口
  • 实现接口方法getModel()
  • 创建一个模型对象,在接口方法中返回

使用方式

接收参数错误

  • 只要任何一个拦截器在执行的过程当中,都可以向错误信息中添加错误消息。
  • 最后workflow会检查错误信息当中是否有错误的消息
  • 如果没有,就直接到目标action
  • 如果有,就会跳转到input逻辑视图

在开发时,可以配置一个input逻辑视图,错误时,可以在跳转到自己指定的页面, 在页面中可以显示错误信息

接收复杂类型封装到List集合

  • 创建jsp页面

  • 创建页面对象模型

  • 创建对应Action

  • 在jsp当中添加表达式

接收复杂类型封装到Map集合

key值为自己取的一个值

Struts2的拦截器

值栈

什么是值栈

ValueStack实际上就是一个容器
是一个接口,实现类为OgnlValueStack
当用户每次访问action对象的业务方法时, 会先创建ActionContext对象
、OgnlValueStack对象、Action对象
它由Struts框架创建,当前端页面如jsp发送一个请求时,
Struts的默认拦截器会将请求中的数据进行封装,并入ValueStack的栈顶。
Struts框架中的数据就都保存到了ValueStack中,不存到域当中了
存到域当中只能在页面中把它取出来
存到值栈当中可以在任何地方取出数据
页面中取出
action中取出
在配置文件当中取出
ValueStack贯穿整个action的生命周期
action一旦创建,就会创建一个valuestack对象

值栈的内部结构

值栈与ActionContext的关系

可以通过ActionContext获得到值栈

ActionContext上下文对象

  • 当请求过来的时候,执行StrutsPrepareAndExecuteFilter过滤器当中的doFilter方法
  • 在这个方法当中创建ActionContext
  • 在创建ActionContext过程中,创建ValueStack对象
  • 将valueStack对象传递给ActionContext对象。
  • 通过ActionContext获取值栈对象
  • ActionContext对象之所以以够访问servlet的API(域对象的数据),就是因为内部有值栈的引用

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,498
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,911
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,745
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,501
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,139
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,303