1.简介
Struts2就是一基于MVC模式的开发l框架,对servlet技术的封装!!!!
回顾MVC模式:
- M: Model 模型。使用javabean技术,对业务数据的封装;
- V: View 视图。 使用jsp技术,对业务数据的显示;
- C:Control 控制器。使用servlet技术
- 控制器的作用:
- 1)接收请求,获取用户的参数;
- 2)调用业务逻辑处理方法;
- 3)获取结果,导航视图,把结果显示视图中。
案例:用户登录和注册功能(用户模块)。使用MVC模式进行开发。
设计:
dao层:
UserDao类:
queryUser(User user); //查询登录用户
addUser(User user);//添加用户方法
service层:
UserService类:
login(User user);//登录业务方法
register(User user);// 注册业务方法
web层:
一个功能对应一个Servlet类
登录功能: LoginServlet类 : /login访问
处理登录请求
跳转到视图(jsp)
如果是登录成功
跳转到主页
否则,不成功
跳转到失败页面
注册功能: RegisterServet类: /register访问
处理注册请求
跳转到视图(jsp)
注册成功,
跳转到登录页面
关注: 能不能优化web层的MVC的代码呢???
现状:一个功能对应一个Servlet处理类,这样的话项目管理的servlet就会很多!!!管理web.xml文件很麻烦!!更多的servlet对象会消耗更多的服务器内存。(单例)
目标: 一个项目只对应一个Servlet处理类。
2.Struts2的使用
1.导入strust2的支持jar包;
commons-beautils [beanutils工具包]
commons-filupload.ajr [文件上传]
commons-io.jar
commons-lang [struts2对java.lang.*类的支持]
freemarker.jar [视图显示技术]
javassit [struts2对字节码运算的支持]
ognl.jar [struts2对ognl表达式的支持]
struts2-core.jar [ struts2的核心包 ]
xwork-core.jar [webwork框架的支持,struts2的前身就是webwork(对webwork的封装)]
2.配置启动的全局的过滤器(Filter),如下;
<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>
3.编写Action类,业务方法方法;
public class LoginAction implements Action{
//默认方法
public String execute() throws Exception {
System.out.println("执行了LoginAction的execute方法");
return "success";
}
}
4.在src目录下,新建一个struts.xml,配置Action对象;
<struts>
<package name="xxx" extends="struts-default">
<!-- 配置Action http://localhost:8080/day28_struts/login.action-->
<action name="login" class="gz.itcast.action.LoginAction">
<result name="success" type="redirect">/index.jsp</result>
</action>
</package>
</struts>
5.访问Action的业务方法:
http://localhost:8080/struts/login.action
2.2 struts2框架的作用
strurs2是基于MVC开发模型的web层框架。
struts1也是MVC开发模式的框架。struts2并不是struts1的升级版。
struts2是基于webwork的升级版。struts2=webwork+sturts1
struts2的具体功能:
请求数据封装
简化国际化
简化文件上传
后台数据校验
……
2.3 struts2框架的执行过程
项目启动:
1:创建核心过滤器StrutsPrepareAndExecuteFilter对象
2:执行核心过滤器的init方法
读取了依次以下的配置:
struts-default.xml [struts2框架的默认配置文件(不需要自定修改)]
struts-plugin.xml [struts2的插件配置文件]
struts.xml [我们写的业务配置文件(包含配置的Action)]
访问资源:
3: 在内存中查询对应的Action配置,得到class内容,创建Action对象。
4:读取Action配置的method内容,执行Action对象对应的方法。
2.4 struts-default.xml文件的详解
1.声明struts2框架运行过程中使用到的一些对象
<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
2.默认包,包名叫struts-default(注意:我们自己写的package必须继承这个默认包,只有继承了这个默认包才可以使用该默认包下的功能)
<package name="struts-default" abstract="true">
2.1:跳转类型:
常用的跳转类型:
redirect: 重定向到页面
dispatcher: 转发到页面
redirectAction: 重定向到Action
chain: 转发到Action
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
2.2:声明拦截器(Interceptor)
struts2默认的拦截器(32个): 完成strutrs2的核心功能。(请求封装,文件上传,国际化…)
拦截器(Intercptor) vs 过滤器(Filter)
过滤器: 可以过滤任何类型的请求(html、servlet、jsp)和响应。加入通用的代码逻辑。
拦截器: 是sturts2的特有功能。只能过滤Action!!在执行Action的时候加入通用的代码。
2.3:声明拦截器栈 (interceptor-stack name=”basicStack”>)
默认拦截器:
<interceptor-stack name="defaultStack"> (18个拦截器)
2.4:默认包当前使用的拦截器:
<default-interceptor-ref name="defaultStack"/>
注意:
我们写的包(package)就是继承struts-default默认包的,那么就继承了默认的18个拦截器
2.5:当前默认包下的默认Action
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
2.5 struts.xml文件详解
该文件是开发者自行配置的业务配置文件。(关键是Action的配置)
1:包(package),用于管理Action,一般可以按模块划分包!!
package:代表一个包。管理action配置。在用一个包下面不能有同名的action;
name:包名.在一个项目中不能出现同名的包;
extends:继承。类似于类的继承。如果一个包继承另一个包,那么就会把父包的功能继承下来,我们开发的包就必须继承struts-default包;
namespace: 名称空间。区分不同的包的访问路径。默认值 “/”
abstract: 表示当前包是否抽象。如果当前包是抽象包,那么不能含有action抽象包中一般用来定义拦截器,公共视图,不做具体的业务。
2:Action和result的配置
action配置:
name: action的名称。用于访问该Action的路径
class: Action业务对象的类名。一定是全名(包名+类名),这里struts2是用反射构造Action对象的
method: 执行的业务方法。不写默认值 execute
result配置:
name: 视图的标记。在一个Action中名称不要重复!
type: 跳转的类型。
redirect: 重定向
dispatcher: 转发(默认值)
redirectAction: 重定向到Action
chain: 转发到Action。可以在不同Action中通过request共享数据
stream: 用在下载文件的时候。
文本内容: 跳转到的页面或者Action
3:可以通过划分不同的xml文件来管理package
<!-- 包含读取其他xml文件 注意: 声明的顺序就是读取的顺序!!!!-->
<include file="config/struts-book.xml"></include>
<include file="config/struts-user.xml"></include>