1. struts2详解
Struts2 = Struts1 + Xwork
1.1 Struts2开发流程:
版本: 2.3
1.1.1 引入jar文件
commons-fileupload-1.2.2.jar 【文件上传相关包】
commons-io-2.0.1.jar
struts2-core-2.3.4.1.jar 【struts2核心功能包】
xwork-core-2.3.4.1.jar 【Xwork核心包】
ognl-3.0.5.jar 【Ognl表达式功能支持表】
commons-lang3-3.1.jar 【struts对java.lang包的扩展】
freemarker-2.3.19.jar 【struts的标签模板库jar文件】
javassist-3.11.0.GA.jar 【struts对字节码的处理相关jar】
1.1.2 配置web.xml
Tomcat启动— 加载自身web.xml—加载所有项目的web.xml
通过在项目的web.xml中引入过滤器,
– Struts的核心功能的初始化,通过过滤器完成
– filter 【 (拦截器的标签)
————-init/ 启动执行
————-doFilter/ 访问执行
————-destroy
————-】
<!-- web.xml: 引入struts核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
StrutsPrepareAndExecuteFilter 即为核心过滤器
来自jar包:struts2-core-2.3.4.1.jar
使用的struts的版本不同,核心过滤器类是不一样的!
struts1的核心过滤器就不是这个
1.1.3 开发Action
- struts中的action类取代之前的servlet
action类,也叫做动作类; 一般继承ActionSupport类(即处理请求的类 ) - action中的业务方法,处理具体的请求
必须返回String
方法不能有参数
public class HelloAction extends ActionSupport {
// 处理请求
public String execute() throws Exception {}
}
1.1.4 配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- Overwrite Convention -->
<package name="xxx" extends="struts-default">
<action name="hello" class="com.appp.action.HelloAction" method="execute">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
package: 定义一个包。包作用,管理action(通常一个业务模板一个包)
name:包的名字,包名不可重复
extends:当前包继承自哪个包
Struts中,包一定继承struts-default
struts-default是在struts-default.xml中定的包
abstract
表示当钱包为抽象包;抽象包中不能再有action的定义,否则运行时报错
sbstract=true 只有当当前的包被其他包继承时才用!
比如:
<package name="base" extends="struts-default abstract="true"></package>
<package name="user" extends="base"></package>
namespace: 名称空间,默认为"/",即jsp中什么都不用写,
作为路径的一部分,访问路径= http://localhost:8080/项目名/名称空间/ActionName
action: 配置请求路径与Action类的映射关系
name: 请求路径名称
class:请求路径的action类的全名
method:请求处理方法
result:
name:action处理方法返回值
type:跳转的结果类型
标签中指定跳转的页面
1.2 Struts2执行流程:
服务器启动:
1. 加载项目web.xml
2. 创建Struts核心过滤器对象, 执行filter → init()
struts-default.xml, 核心功能的初始化
struts-plugin.xml, struts相关插件
struts.xml 用户编写的配置文件
访问:
3. 用户访问Action, 服务器根据访问路径名称,找对应的aciton配置, **创建action对象**(后面每次访问,都会创建action实例)
4. 执行默认拦截器栈中定义的**18个拦截器**(总共定义的有32个拦截器)
5. 执行action的**业务处理方法**
1.3 struts-default.xml 详解:
1.3.1 目录: struts2-core-2.3.4.1.jar/ struts-default.xml
1.3.2 内容:
- bean节点指定struts在运行的时候创建的对象类型
- 指定struts-default包 【用户写的package(struts.xml)一样要继承此包 】,
包中定义了:
2.1 跳转的结果类型
dispatcher 转发,不指定默认为转发
redirect 重定向
redirectAction 重定向到action资源
stream (文件下载的时候用)
2.2 定义了所有的拦截器(定义了32个拦截器!)
为了拦截器引用方便,可以通过定义栈的方式引用拦截器,
标签interceptor-stack
此时如果引用了栈,栈中的拦截器都会被引用!
defaultStack
默认的栈,其中定义默认要执行的18个拦截器!