首页 > 技术文章 > java struts2讲解

jxbo 2021-01-21 16:57 原文

struts2目录:

mvc框架

Action

Result

常用配置文件

OGNL & ValueStack

Tags

interceptor

 

 

框架

 

java框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现。JAVA框架可以分为三层:表示层,业务层和物理层。框架又叫做开发中的半成品,它不能提供整个WEB应用程序的所有东西,但是有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑

 

使用框架的目的:

提高开发效率和代码统一性,降低后期维护成本

 

约定优于配置

 

MVC: 开发模式(分层开发模式)

M:Model 模型层,用来访问数据库

V:View视图层,用来收集和展示数据

C:Controller控制层,用来处理逻辑和流程控制

 

优点:

  1. 便于大项目的分工合作
  2. 便于代码的重用
  3. 便于后期的维护和扩展

 

缺点:

  1. 增加了代码量
  2. 增加了开发周期

 

如何学习框架:

  1. 操作
  2. 快乐的操作
  3. 先学应用、再学理论
  4. 先学脉络、后学细节

 

Struts2简介:

 

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

 

 

struts的作用:将请求和视图分开

 

 

如何搭建后端框架:

  1. 导入jar
  2. 配置文件

 

如何使用Struts2框架开发:

 

 

  1. web项目添加struts2框架支持(MyEclipse来完成)

 

项目中会多出Struts2 Core Libraries类库

Web.xml中会自动增加核心控制器配置

Src下自动创建一个struts.xml配置文件

  1. 创建struts2action来处理业务逻辑

创建Action的方式有三种:

方式一:创建一个类实现Action接口

方式二:创建一个类继承ActionSupport(功能最全的一种)

方式二与方式一的区别:

  1. 方式二不再需要强制重写execute方法
  2. 方式二提供了数据验证/国际化/错误信息处理的功能
  3. ActionSupport实现了Ation接口

方式三:创建一个类不做任何继承和实现(最简洁的一种)

 

数据收集和数据验证:

数据收集:

不管哪种实现Action的方式都可以

Action中定义个全局变量,并提供get/set方法即可

数据验证:

如果要使用数据验证功能XxxAction一定要继承ActionSupport

并重写validate方法,或者写validateXxx方法,其中Xxx对应业务逻辑方法名

 

配置package

name 配置包的名字(一般使用功能模块的名称) ,供其他包继承使用

namespace 命名空间 决定了action的访问路径

extends 自定义的包必须直接或间接继承struts-defalut(struts提供的包)

 

配置action

name action的访问路径

class action的全路径

 

namespace:

namespace决定了action的访问路径,默认为“”,可以接受所有路径的action

namespace可以写为“/”,或者“/xxx”,或者“/xxx/yyy”,对应的action访问路径为/index.action/xxx/index.action,或者/xxx/yyy/index.action

namespace建议使用模块来命名

 

获得request

ServletActionContext.getRequest();

Map map = (Map)ActionContext.getContext().get("request");

 

数据校验

validate 当前action所有方法都进行校验

validateSave 只校验save

先执行数据校验,校验通过,再执行后续的业务方法

校验不通过,不执行后续的业务方法,直接跳转到result name="input"对应的页面

 

 

回顾:
struts2
搭建框架
1.导入jar
2.src目录下新建配置文件struts.xml
3.web.xml配置struts的入口
4.创建action、继承ActionSuport
5.定义方法execute(默认执行的方法)
6.struts.xml中配置action
package
对action进行分类,一般和模块对应
继承struts-default
package的请求路径,可以不写,默认值为"/",比如"/sys"
action
name action的请求路径 userAction http://localhost:8080/项目名/sys/userAction
class action的全路径 com.hr.action.UserAction
result
视图

 

目录
反编译插件
配置开发模式
配置全局视图
action通配
指定多个配置文件
struts2的跳转方式
获得请求对象
转换器

 


反编译插件

 

配置开发模式 修改配置文件,不用重启服务(热部署)

 

配置全局视图result:任何action都可以使用
<!-- 全局视图 -->
<global-results>
<!-- 产生异常,默认返回input视图 -->
<result name="input">/error.jsp</result>
</global-results>

 

还可以定义basePackage 再所有包共用的result

 


指定多个配置文件
<include file="struts-user.xml"/>
通配方式
<include file="struts-*.xml"/>

 


struts2的跳转方式
转发/重定向
action转发到jsp(默认) dispatcher
action转发到action
action重定向到jsp redirect
action重定向到action

 


转发:dispatcher(action往jsp转发)
type可以不写,默认值为dispatcher 转发
<result type="dispatcher" name="index">/index.jsp</result>
可以往jsp转发,并传递数据,不能往action转发

 

转发:chain(action往action转发)
<result type="chain" name="test1">
<param name="namespace">/</param>
<param name="actionName">userAction</param>
<param name="method">test1</param>
</result>
可以往action转发,并传递数据,不能往jsp转发

 

action重定向到jsp
<result type="redirect">/index.jsp</result>

 

<result type="redirect">
<param name="location">/index.jsp</param>
<param name="id">${id}</param>
</result>

 

action重定向到action
<result type="redirect">
<param name="location">/userAction!test1?id=${id}</param>
</result>

 

ajax的方式不需要配置result,action方法中返回null即可

 


action通配写法
<action name="*_*" class="com.hr.action.{1}" method="{2}">

 

http://localhost:8080/Mjava6_struts2-2/sys/StudentAction_add

 

自动获得HttpServletRequest
implements ServletRequestAware
实现setServletRequest方法

 

自动获得Map类型request
implements RequestAware
实现setRequest方法

 


类型转换器
使用2019-03-12这种格式,java.util.Date能正常接收数据,但有时要使用20190312这种格式,就需要使用类型转换器进行处理。

 

步骤
1、自定义类继承DefaultTypeConverter,实现convertValue方法

 

2、注册
1)、注册为局部类型转换器
在Action所在的包下新建文件
ActionName-conversion.properties

 

2)、全局类型转换器
在src下新建文件
xwork-conversion.properties

 

推荐阅读