struts是Servlet封装,目的是为了提高开发效率
1. Struts开发步骤
1、 web项目引入Struts-jar包(核心包有8个fileupload/io/lang3/freemarker/javassist/ognl/struts2-core/xwork-core)
2、 web.xml中,引入Struts的核心功能,配置过滤器
3、 开发action
4、 配置action,在src/struts.xml中配置(struts.xml可以在Struts源码中找到)
Demo HelloStruts
引jar包,在web.xml中配置Struts2核心过滤器
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>
action开发,用一个普通类继承ActionSupport
/**
* 开发Action 处理请求
* @author wsk
*
*/
public class HelloAction extends ActionSupport{
public HelloAction(){
System.out.println("创建HelloAction");
}
public String execute() throws Exception {
System.out.println("访问到了HelloAction。。正在处理请求");
System.out.println("调用Servlet");
return "success";
}
}
配置文件struts.xml
<!--
package 包配置:通常一个业务模板用一个包
name 包的名字,包名不能重复
extends 当前包继承自哪个包
在Struts中所有包一定要继承struts-default
struts-default在struts-default.xml中
abstract 表示当前包为一个抽象包,抽象包中action不能被访问
namespace 名称空间,默认为/,作为路径的一部分
访问路径=http://localhost:8088/项目/名称空间/actionname
action 配置请求路径与Action类的映射关系
name 请求路径名称
class 请求处理的action类全名
method 请求处理的方法
result
name action处理方法返回值
type 跳转结果类型
--!>
<package name="xxs" extends="struts-default">
<!-- 第一个helloworld action -->
<action name="hello" class="com.wsk.hello_struts.HelloAction" method="execute">
<result name="success">/hello.jsp</result>
</action>
</package>
2. Struts2执行流程
服务器启动时:
1、加载项目web.xml
2、创建Struts2核心过滤器对象,StrutsPrepareAndExecuteFilter,并执行filter的init方法,加载相关配置文件。
struts-default.xml 核心功能的初始化
struts-plugin.xml Struts相关插件
struts.xml 用户编写配置文件
访问
3、用户访问Action,服务器根据访问路径名称,找对应的action配置,创建Action对象
4、后边每次访问都会创建Action实例
Struts-default.xml
内容:
1、bean节点指定Struts在运行的时候创建的对象类型
2、指定struts-default包 【用户写的package(struts.xml)一样要继承此包 】
package struts-default 包中定义了:
a. 跳转的结果类型
dispatcher 转发,不指定默认为转发
redirect 重定向
redirectAction 重定向到action资源
stream (文件下载的时候用)
b. 定义了所有的拦截器
定义了32个拦截器!
为了拦截器引用方便,可以通过定义栈的方式引用拦截器,此时如果引用了栈,栈中的拦截器都会被引用!
defaultStack 默认的栈,其中定义默认要执行的18个拦截器!
c. 默认执行的拦截器栈、默认执行的action
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
拦截器和过滤器区别
拦截类型区别
拦截器是Struts2里边的,主要用于拦截Action资源的访问,只能在Struts中使用
过滤器是servlet中,可以拦截(.jsp/servlet/css/js/img)
创建执行时间区别
拦截器是在web服务器启动时创建过Struts核心滤器初始化时加载,在用户访问Action时调用
过滤器是web服务器启动时创建执行初始化方法init,在用户访问时调用doFilter方法执行,在web服务器关闭时销毁