MVC\Struts简介
1. MVC设计模式的基本流程
a. 用户的请求首先到达控制器(servlet)。
b. 由控制器分析用户的的请求(一般根据act)作出对应的处理,处理流程:
1)从request中获取和所申请的操作相关的数据,必要的时候还要封装入javabean.
2) 调用对应的业务逻辑(service)对相关数据进行处理
3)业务逻辑处理结束后,一般会返回一些数据。
4)servlet获取数据后,一般保存到某个范围,然后调用对应的视图组件对该内容进行渲染。
c. service很可能有一些数据必须持久化,那么在这个位置上可以调用对应的数据DAO来完成对象的持久化操作。
2. JSP/SERVLET形态下的MVC B/S设计的缺点
缺点整体上就是编码上比较繁琐,有一定改良空间,能大幅提高效率。
a. request中参数的获取、数据类型的转化和javabean的封装。
b. 表单数据回填的繁琐
c. 国际化参数设置
d. 代码模块化设计上的问题
e. 不容易测试
f. 硬编码过多
MVC设计模式非常优越,但纯粹使用jsp/servlet来做MVC开发,程序员太累,效率不够高,在对该技术熟练了解的基础上,可以采纳struts2 MVC framework提高开发效率。 struts2是MVC框架,其主要目的是把常见的操作函数化,用户只要调用即可,大幅减少技术含量不高的操作。
使用STRUTS2也是有开销的,其运行速度大幅低于直接用jsp/servlet做MVC开发。Struts2的开销大于1.x.
3. STRUTS简介
1. struts 1.x (structure)
JAVA MVC Framework
2. Struts 2.x
Webwork
4. Struts2的下载和下载包结构说明
5. 最基础的struts2工程所依赖的jar包
6. struts2运作机制
1. struts2进入系统,主要通过filter形态介入。struts2会分析所有的请求链接,如果发现某个链接属于struts2处理,struts2的机制才开始工作。
2. struts.xml文件(structs配置文件)规定了什么样的链接后缀,该由struts2来处理 (struts.action.extension)。
3. struts2包的概念
Struts详细介绍
1. struts2配置文件的分离
在多人开发环境,用于很多人都需要往struts2配置中写入配置信息,就会出现文件的争用问题(冲突),那么
为了避免出现这样的情况,struts支持多个配置文件,也就是把一个配置文件分成多个,一个模块一个配置文件 ,一个模块对应一个开发小组。
2. 包的概念
同样一个action的名字很多人都喜欢用,比如某模块的默认访问页面经常叫做index.action,在这种情况下,struts2借鉴了java包的概念,用来来进行模块隔离,而各个包中,action名字可以出现雷同,只要在同一包中不雷同即可。
package
name: 名字在这边没有太多的意义,一个包真正的命名概念应该是命名空间,名字专为继承而生。
namespace: 命名空间是一个包的唯一标识,比如访问命名空间/abc中名字a的action, 链接如下:
/abc/a.action (如果你没有给struts2指定后缀扩展,默认是action作为struts2应用后缀扩展名)
这里额外要说明一下,如果我们在/abc这个命名空间中,找不到名字为a的action, 则strut2会继续到一个叫
根命名空间(/)去查找 /abc/a.action -> (not found) -> /a.action -> (not found) -> error
extends: 继承与扩展
后跟包名, 一个package继承了另外一个package,将获得这个package中所有的资料。
3. 认识struts-default.xml
a. 几个默认:
一个action没有指定类名,默认是com.opensymphony.xwork2.ActionSupport。
一个action没有指定interceptor, 默认是defaultStack.
一个result没有指定name, 默认是success.
一个result没有指定类型,默认是dispatcher (forward).
class ActionSupport{
String execute(){
return "success";
}
}
一个包中,如果访问的时候,出现了没有被具体声明的action,系统将自动访问默认action,
<default-action-ref name="index" />
b.几个全局类型的说明
<global-results>
<result name="error">/error.jsp</result>
</global-results>
如果在多个action中,存在相同的result, 名字相同而且链接地址也相同,在此情况下,无需每个action
都做重复声明,而只要编写一个global result即可。
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>