struts2入门
1、MVC设计思想
1.1、什么是MVC
是一种设计思想,非常优秀的设计思想.根据职责不同将应用程序的组件分成三部分。
Model模型:负责业务数据和业务处理.
View视图:负责显示和接收用户输入.
Controller控制器:协调模型和视图
1.2、MVC在JavaWeb中的体现
Model:DAO,Entity,Util
View:JSP
Controller:Servlet
1.3 、MVC工作的基本流程
a.客户端发请求,请求交给前端控制器处理
b.前端控制器维护一个XML配置文件
(XML定义了请求和Action之间的对应关系)
c.前端控制根据请求调用相应的Action组件,执行请求处理
d.Action处理完毕,可以将处理结果存放到Request
e.控制器调用相应的视图JSP,进行响应处理
1.4、mvc的作用
1.各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
2.有利于开发中的分工
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控层。
3.有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。
通过以上作用大大提高开发及维护效率。
2、struts2入门
2.1、struts2使用原因
实现了mvc思想是项目层次清晰,大大提高开发效率。
2.2、执行流程
请求action-->web.xml(filter控制器)-->struts.xml(Action配置)-->action类方法-->struts.xml(result配置)
2.3、xml基本配置
struts是配置文件的根元素,可以包含多个package元素。
package:作用是将Action分组管理,内部可以定义多个Action.
*name属性:包名称.
*extends属性:继承哪个package,一般情况下继承自struts-default.
namespace属性:用于限定action请求名,默认值是"/"
action:作用是定义请求和Action组件之间的对应关系
*name属性:action组件对应的请求名
*class属性:指定action组件的实现类,包名.类名格式
method属性:指定要调用action类中哪个方法.默认值是execute
<result>:作用是定义响应视图
*name属性:响应视图标识符,该标识符与action组件方法返回值对应.
type属性:指定响应视图类型,默认值是dispatcher,请求转发
2.4、OGNL技术
属于表达式语言,可以访pageContext,request,session,application存储范围的数据.可以简化JSP程序.
OGNL标准结构:3个重要组成部分,一个OGNL引擎,一个是root对象,另一个是context对象.
使用"key"格式访问root对象的属性,使用"#key"格式访问context区域需要。
User类属性:
private String name;
UserAction属性及方法:
private String hello; private User user; private String[] roles; private List organs ; private Map map; public String execute(){ hello = "Hello,cft"; user = new User(); user.setName("cft"); roles = new String[]{"超级管理员","系统管理员"}; organs = new ArrayList(); organs.add("广东省级机构1"); organs.add("广东省级机构2"); map = new HashMap(); map.put("rolesize",roles.length()); map.put("organsize",roles.size()); HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("msg", "Hello Request"); return "success"; }
访问root对象的基本类型属性:
<s:property value="hello"/>
访问root对象的对象类型属性
<s:property value="user.name"/>
访问root对象的数组类型属性:
<s:property value="roles[0]"/>
访问root对象的List类型属性:
<s:property value="organs[1]"/>
访问root对象的Map类型属性:
<s:property value="map.rolesize"/> <s:property value="map[orgasize]"/>
访问context对象基本类型属性:
<s:property value="#request.msg"/>
2.5 、Action如何使用request,session,application
Action实现以下Aware接口:
RequestAware
SessionAware
ApplicationAware
ServletRequestAware
ServletResponseAware
ServletContextAware