Struts2 1
前端控制器
- 将所有的请求都先经过一个前端控制器,在前端控制器中实现框架的部分代码,剩下的具体操作提交到具体的Action
struts2开发
- struts2基本开发包
文件名 | 说明 |
---|---|
asm-3.3.jar | 提供字节码的类库 |
asm-commons-3.3.jar | 提供基于事件的表现形式 |
asm-tree-3.3.jar | 提供基于对象的表现形式 |
struts2-core-2.3.24.jar | 核心类库 |
xwork-core-2.3.24.jarr | webWork核心库,structs2的构建基础 |
ognl-3.0.6.jar | 对象导航语言 |
freemarker-2.3.22.jar | structs标签使用的类库 |
javassist-3.11.0.GA.jar | javascript字节码解释器 |
log4j-api-2.2.jar | 日志管理组件依赖包的api |
log4j-core-2.2.jar | 日志管理组件依赖包 |
步骤
- 创建页面放置链接
<a href="${pageCotext.request.contextPath} /strutsDemo1.action">访问demo</a>
- 编写Action
public class StrutsDemo1{ public String execute(){ return "success"; //用于控制页面跳转 } }
- 配置action,struts.xml
<struts> <package name="..." extends="struts-default" namespace="/"> <action name="strutsDemo1" class="对应action类的全路径"> //配置结果页面跳转 <result name="success">/demo1/demo2.jsp</result> </action> </package> </struts>
- 配置前端控制器
- 过滤器名称为StrutsPrepareAndExecuteFilter,预处理和执行
- 在web.xml内进行配置
<filter> <filter-name>struts2</filter-name> <filter-class>org.apach.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>...</param-name> <param-value>..</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
配置文件加载顺序
- 客户端发送请求到服务器
- 先经过核心过滤器StrutsPrepareAndExecuteFilter,预处理主要用来加载配置文件,对应过滤器的init方法;执行用来执行一组拦截器完成部分功能,对应过滤器的doFilter方法
- init方法
- init_DefaultProperties():加载org.apach.struts.default.properties配置的struts2常量
- init_TraditionalXmlConfigurations():加载struts-default.xml、struts-plugin.xml、struts.xml
- init_LegacyStrutsProperties():加载用户自定义struts.properties
- init_CustomConfigurationProviders():加载用户配置的提供对象
- init_FilterInitParameters():加载web.xml
- init_AliasStandardObjects():加载标准对象
- 加载顺序
- default.properties
- struts-default.xml
- struts-plugin.xml
- struts.xml:配置action
- struts.properties:配置常量
- web.xml:配置核心过滤器及常量
- init方法
Action配置
-
struts.xml,核心组件之一,主要用来配置action请求和action的对应关系
-
默认加载WEB-INF/classes下的struts.xml文件
<struts> <package name="demo1" extends="struts-default" namespace="/"> <constant name=".." value="..."/> <action name="strutsDemo1" class="对应action类的全路径"> //配置结果页面跳转 <result name="success">/demo1/demo2.jsp</result> </action> </package> </struts>
-
package配置
- name:必填属性,指定该包的名字,是该包被其他包引用的key
- namespace:可选,定义包的命名空间
- 默认命名空间:namespace=""
- 跟名称命名空间:namespace="/"
- 带名称命名空间:namespace="/demo1"
- extends:可选,指定包继承自其他包,可以继承其他包的action定义、拦截器定义等
- abstract:可选,指定该包是否是一个抽象包,抽象包不能包含action定义
-
action配置
- name:必填,标志action,指定所处理的请求的url
- class:可选,指定action对应Action类
- method:可选,指定调用的方法,默认execute方法
- converter:可选,指定类型转换器的类
-
通配符配置访问同一个action中的不同方法
<action name="*" class="..." method="{1}"></action>
-
动态访问
- 默认不开启,需要先开启一个常量
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
- action配置
<action name='..' class='...'></action>
- 页面路径编写
<a href="${pageContext.request.contextPath}"/userAction!save.action">...</a> //<a href="${pageCotext.request.contextPath} /strutsDemo1.action">访问demo</a>
action控制类实现
- action是一个pojo(具有一部分getter/setter方法)类
- 要有一个公共的无参构造方法(采用默认构造方法即可)和一个execute()方法,要求如下
- 方法的权限修饰符为public
- 返回一个字符串,指示下一个页面的result
- SUCCESS
- NONE:不跳转
- ERROR:跳转到错误页面
- INPUT:数据检验时跳转的路径
- LOGIN:跳转到登录页面
- 方法没有参数
- 可以实现struts2提供的Action接口
- 实际开发中从ActionSupport类继承
public class ActionDemo extends ActionSupport{ @override public String execute() throws Exception{ ... reutrn NONE; } }
常量配置
- struts2常量配置3种方式
- struts.xml使用constant原色配置常量
- strucs.propertes文件中配置常量,采用键值对
- web.xml通过<init-param>元素配置
- 后加载的配置文件的常量会覆盖先加载的配置文件中常量的值
分模块开发配置
- include标签
<struts>
<include file="不指定时src路径下配置文件"/>
<include file="具体包下的文件"/>
</struts>