
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明IT培训的老师这一期给大家讲Struts2基础。
1. Struts2简介
Struts2是一个WEB端MVC框架。作为比较早的MVC框架之一,Struts2在使用中还是比较多的。虽然个人感受没有SpringMVC还那么的好用
Struts2官网
在Model2中我们使用Servlet作为控制器:
Servlet主要负责:
接收用户发送的请求
将请求参数封装为Java中的对象
调用service来处理业务逻辑
根据service返回的结果,选择视图
2. Struts2-HelloWorld
新建一个Maven的webapp项目
在这里我给出一个简单的pom.xml文件依赖
在web.xml文件中,我们需要配置Struts2用到的filter过滤器
编写一个Action类Helloworld:里面就一个方法
在resources文件夹下我们需要新增一个XML文件,叫做struts.xml文件。需要在里面配置一个最简单的action.
我们在index.jsp页面写一个超链接,<a href="${pageContext.request.contextPath}/hello">HelloWorld</a>我们发现能够正常的跳转到success (该页面就不写了,自己添加)。说明我们struts2的HelloWorld正常了
action VS Action
action:应用程序可以完成的每一个操作.例如:我们请求hello
Action类:普通的Java类,可以有属性和方法,同时必须遵守下面这些规则:
属性的名字必须遵守与JavaBeans属性名相同的命名规则.属性的类型可以是任意类型.从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生
必须有一个不带参的构造器
至少有一个供struts在执行这个action时调用的方法
同一个Action类可以包含多个action方法.
Struts2会为每一个HTTP请求创建一个新的Action实例
Action接口(不常用)
我们也可以通过实现Action接口来创建一个Action类。
这个接口中为我们提供了几个结果类型的常量
还提供了一个抽象的execute方法
ActionSupport:
我们开发中大部情况Action类都会继承ActionSupport类。
ActionSupport实现类Action等接口。
ActionSupport对国际化、验证等做了很好的支持。
3.在Action中获取Web资源- Servlet相关API
在Action类中获取Servlet相关的API,主要分为两种:
一种是Struts2封装好的Map结构:
Map
Map
Map
另一种是Servlet原生的API
request
session
application
获取Struts2封装的相关Map
与Servlet API解耦的访问方式
为了避免与Servlet API耦合在一起,方便Action做单元测试, Struts2对HttpServletRequest, HttpSession和ServletContext进行了封装,构造了3个Map对象来替代这3个对象,在Action中可以直接使用HttpServletRequest, HttpServletSession, ServletContext对应的Map对象来保存和读取数据.
方式一:
Struts2封装的API:com.opensymphony.xwork2.ActionContext
ActionContext对象保存当前Action上下文内容,也就是当前Action的相关对象都可以通过ActionContext获取。
ActionContext内部维护了一个Map集合,我们这些对象在Map集合中保存,可以通过key获取value。
在ActionContext中保存对象都是域对象中的Map,而不是我们属性HttpServletRequest、HttpSession、ServletContext
我们通过操作Map实际上就是间接的操作域中的属性
方式二:实现XxxAware接口:
org.apache.struts2.interceptor.ApplicationAware;
org.apache.struts2.interceptor.ParameterAware;在2.5.5版本之后,废弃了该接口,使用org.apache.struts2.dispatcher.HttpParameters
org.apache.struts2.interceptor.RequestAware;
org.apache.struts2.interceptor.SessionAware;
这四个接口都有对应set方法,当我们实现了这些接口,Struts2会自动调用set方法,将对应的Map设置进Action对象
与Servlet API耦合的访问方式
直接访问Servlet API将使Action与Servlet环境耦合在一起,测试时需要有Servlet容器,不便于对Action的单元测试
方式一:通过org.apache.struts2.ServletActionContext
方式二:ServletXxxAware:
让Action实现ServletRequestAware , ServletContextAware,ServletRequestAware三个接口
这两个接口中定义相关对象set方法,当我们这些接口时,Struts2会自动调用方法设置相应的对象