Struts2入门
Struts2 概述
- struts2 框架应用 javaee 三层结构的 web 层框架
- struts2 框架 在 struts1 和 webwork 的基础上发展的全新的 框架
- struts2 版本 2.3.24 (目前较为稳定的版本)
- 解决问题 请求 > 过滤器 > 拦截 > 动作类 > 动作类的方法
Struts2 入门案例
第一步 jar包
- 文件夹
- apps ( var包 > 示例 )
- docs ( 帮助文档 )
- lib ( jar包 )
- src ( 源码 )
- 导入jar包
- 导入示例文件的jar包
第二步 创建action类
//每次访问action的时候,默认执行execute方法
public class XxxAction{
public String execute(){
return "ok";
}
}
第三步 配置 action 类的访问路径
创建struts2 的核心配置文件
- 核心配置文件名和位置是固定的
- 位置必须在src下面,名称必须为 struts.xml
引入dtd 约束 > 在示例文件中找
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
标签
<struts>
<!-- 设置常量值,设置页面主题为极简模式 -->
<constant name="struts.ui.theme" value="simple"></constant>
<!-- package元素用于配置Action包,包主要用于管理动作模型的对象
name="Users"表示包的名称,在配置文件中是唯一的
namespace="/"表示虚拟路径名称
extends="struts-default" 表示继承Steuts2提供的struts-default.xml文件,此文件中配置了各种类型转换和拦截器类,用于辅助用户的数据处理
-->
<package name="Users" namespace="/" extends="struts-default">
<!--
action元素用于配置动作模型
class="com.action.UsersAction"表示动作类的包路径
method="check" 表示要执行的方法
-->
<action name="check_Users" class="com.action.UsersAction" method="check">
<!--
result 元素表示结果的配置,是action的子元素 name="执行的返回值"
loginok.jsp 表示 跳转路径
type="redirect" 表示该跳转使用重定向方式跳转
没有type属性则表示转发
-->
<result name="ok" type="redirect">loginok.jsp</result>
<result name="fail" >fail.jsp</result>
</action>
</package>
</struts>
配置过滤器(容易忘记)
- 在web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
<!-- Struts的预处理和执行过滤器 -->
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping></web-app>
Struts2 底层执行过程
执行过程
第一步 网页提交
第二步 过滤器
- 在过滤器实现功能
- 过滤器名称org.apache.struts2.dispatcher.ng.filter.StrutsPreareAndExecuteFilter
第三步 获取请求
- 获取请求路径
- 得到路径中的Xxx.action
第四步 解析请求
- src 下找到struts.xml
- 使用dom4j解析文件内容
- 匹配 action 属性 name 的值
第五步 获取动作类
- 找到 name 相同值 的 class 值
- 得到 class 的全路径
- 通过 method 获取方法名
第六步 执行方法
- 利用反射得到类
Class clazz = Class.forName("得到的路径");
- 得到方法
Method m = clazz.getMethod("获得的方法名");
- 执行方法
Object obj = m.invoke();
第七步 判断返回值
- 得到方法的返回值
- 通过方法的执行 得到方法的返回值
- 在struts.xml 中找result 标签
- 匹配 返回值 和 name 的属性
- 如果一致 跳转 标签内容的 地址页面
查看源码
- 服务器启动是创建过滤器(拦截器)
- 在init()方法中,加载配置文件 顺序如下
1. default.properties
2. struts-default.xml
3. struts-plugin.xml
4. struts.xml >>> 配置action以及常亮
5. struts.properties >>> 配置常量
6. web.xml >>> 配置核心过滤器及常量
Struts2核心配置文件
- 名称位置固定
- 主要有三个标签 | 根标签(struts) | package | action | result |
package 标签
- 类似于包,区分不同的action
- name 属性
跟功能无关但是 package 的名字不能重复 - extends 属性
“struts-default”
使我们的类有action 的功能 必须写固定的 - namespace 属性
要和action 中的 name 的值 构成访问路径
action 标签
- 配置 action 的访问路径
- name 属性
和 package 中的 namespace 的值 构成访问路径
不能重名 - class 属性
action 动作类的全路径 - method 属性
action 动作类的执行方法
默认执行execute
result 标签
- 根据 action 的返回值 跳转不同的路径
- name 属性
对比的返回值 type 跳转的方法
- 重定向
- 转发(默认)
内容
路径
常量配置
- 设置主题
<constant name="struts.ui.theme" value="simple"></constant>
- 设置编码格式
<constant name="struts.i18n.encoding" value="utf-8"></constant>
- 还有2中配置方法(几乎不用)
- src 下面 创建 struts.property
- 在web.xml进行配置
分模块开发
- 引入方法
<include file="Xxx.xml"></include>
Struts2 action 的 创建
Action 动作类 的 编写方式
- 有三种
第一种 普通类
- 这个不继承不实现
第二种 实现
- 实现 Action 接口 xwork2 里的接口
- 提供了常量
- 但不经常用,因为实现接口必须实现所有的方法,如果不用就比较麻烦
第三种 继承 *
- 继承类 AcitionSupport
- 也能用xwork2 的常量
- 因为 ActionSupport 实现了 xwork2
注意 : > action的要使用的变量都要使用getter&setter方法 < ;
Struts2 action 的 方法访问
- 三种方式
第一种 action标签 **
- 使用 action 标签的 method 属性指定的方法
第二种 通配符 **
- 使用 通配符的方式
*
号 - 在 action name 属性声明通配符
<action name="*_*" class="方法全路径" method="{1}_{2}">
- {n} > 表示匹配第n个星号 一般不超过2个*号
- result 标签 路径的给定
- 在Action动作类中声明变量(path)给予路径(必须有getter&setter方法)
- 用EL表达式${path} 在 替换标签 result的路径 内容
<result name="返回值">${path}</result>
第三种 动态访问 (基本不用)
- 动态访问
注意事项
- action 的返回值 必须是 String 类型,并且要匹配 action 标签的 name 值
- action 可以没有返回值, 但不建议这么做 可以直接返回”none” >>> none 表示没有返回值 会显示空白页面