Struts2基础
一、MVC框架的概念:
由于web应用展现层中大量用到开发模式2,我们发现此种模式的基本访问流程是一致的,只是业务和控制流程不同,所以考虑将模式2中基本功能部分加以封装,从而让开发者更加专注于业务流程,以搞开发的效率,从而推出了关于对模式2的封装类库和借口,我们把这些成为web应用中的MVC框架
常见的MVC框架
Tapestry、JSF、SpringMVC、Struts1、Struts2、WebWork
二、Struts1工作原理
以ActionServlet为核心控制器,以编程人员提供的业务控制器封装业务逻辑并调用模型组件,以客户端用户请求驱动
客户浏览器先发出Http请求,发送到核心控制器,由核心控制器再转发给业务逻辑控制器,业务逻辑控制器调用业务逻辑方法,生成业务模型,业务模型把数据发送到JSP,JSP视图通过Http响应传回到客户端浏览器,展现给客户。如果Http请求发送到核心控制器之后,逻辑错误,变直接返回JSP,通过响应将错误视图传回客户端浏览器
三、Struts1的缺点:
支持表现层技术单一,只支持JSP
与ServletAPI耦合性太强,难以单独测试其业务控制器
业务控制器不能移植到非Servlet的环境中,导致其重用性降低
四、Struts2:
Struts2是一个优秀的MVC框架WebWork
Http请求先发送到Action映射器,再由Action映射器发送到WebWork的核心控制器Servlet,核心控制器发送请求到Action代理,Action代理调用Action,通过拦截器,发送到Resulet视图,生成视图模板(JSP、FreeMarker等),最终通过拦截器传回Http响应返回视图到客户端浏览器
Struts2使用拦截器作为通用功能处理集合,以业务控制器为目标,创建一个控制器代理对象,用代理对象处理用户请求,并回调业务控制器的execute()方法,该方法的返回值决定Struts2将什么视图呈现给用户
Struts2=Struts1部分特性+WebWork的核心
Struts2的组成:
1、框架配置文件:struts.xml
2、标签库:用于页面输出显示
3、组件:提供各项基础功能,如国际化、表单验证等
4、控制器:核心控制器(框架提供)和业务控制器(程序员提供)
五、Struts2框架配置文件解析:
Struts2框架配置文件解析顺序如下:
1、struts-default.xml
2、struts-plugin.xml
3、struts.xml或struts.properties:两种都是Struts2的核心配置,效果相同,一般用struts.xml
4、web.xml
加载顺序后面会覆盖前面的相同配置
六、Struts2的核心控制器:
负责统一拦截用户请求,进行框架资源初始化(如,拦截器、视图、业务控制器),将请求转发给业务控制器处理
其本质为一个过滤器,其配置在web.xml中:
其配置语法为:
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
七、Struts2核心配置文件
a) <package>元素:用于对系统进行分模块管理,所有的业务控制器必须定义在该元素中,一份struts.xml可以有多个<package>元素
b) 属性:
i. Name:包名称,可以是系统的模块名称,必写
ii. Extends:指定包继承的其他包,指定该属性当前包将继承指定包中定义的所有action以及拦截器,可选
iii. Namespace:指定包的命名空间,其目的是为了区分同一个项目中同名但那是作用不同的action,因为不允许对每一个action单独设置命名空间,所以命名空间必须设置在包上,可选
iv. Abstract:定义是否为抽象包,抽象包中不能action的定义,可选
八、<constant/>元素:
a) 配置Struts2框架的常量,用于设置Struts2框架初始化的默认行为,从而定义符合程序员自身需求的初始化行为
b) 语法:<constant name=“”value=“”/>
c) 属性:
i. Name:常量名
ii. Value:常量值
iii. Struts2项目具体配置:
1. 导入Struts2jar包
2. 配置web.xml:在web.xml里面加核心控制器(过滤器)
3. 在.action包下写一个Action
a) Struts2直接使用Action来封装HTTP请求参数,因此Action类应该包含与请求相对应的属性,并为该属性提供对应的setter和getter方法。
b) 为Action类里增加一个execute方法,Struts2框架默认会执行这个方法。这个方法本身并不做业务逻辑处理这部分工作。
c) Action类返回一个标准的字符串,该字符串是一个逻辑视图名,该视图名对应实际的物理视图。
Action有以下特点:
Struts2框架中Action是一个POJO,没有被代码污染
Struts2中的Action的execute方法不依赖于servlet API,改善了Struts1中耦合性
Struts2的Action无须用ActionForm封装请求参数
4. 添加框架核心配置文件struts.xml文件:
a) 在WEB-INF/classes文件夹下创建struts.xml
b) 在struts2-core-2.3.16.jar中有struts-default.xml。我们需要继承它。
c)
i. 在action标签中定义了name和class。Name属性对应的是用户URL请求中的action名,class属性是处理请求的实现类(完整路径)
ii. Result标签定义逻辑视图和物理视图之间的映射,在我们Action中,如果返回的字符串是“success”则由对应的success.jsp页面进行处理;如果返回的字符串是“error”则由error.jsp页面进行处理。
5. 编写界面
a) success.jsp
<body>
<h1>登录成功!</h1>
</body>
b) error.jsp
<body>
<h1>登录失败!</h1>
</body>
c) login.jsp
d)
九、<include/>元素的应用:
用于包含其他Struts2配置文件的内容,此种方法允许将复杂应用中的action信息分散在多份配置文件中,从而实现模块化管理
属性:file --- 被包含的struts配置文件地址
十、业务控制器:
a) 业务控制器的概念
Struts2中的Action表示用户的业务控制,是Struts2框架的核心部分之一,其主要提供业务控制的核心流程
b) 业务控制器的特点
Action是一个简单的java类,其可以不用继承或实现任何Struts2框架的类和接口
Action必须提供一个execute()方法用于表示业务控制流程,并返回一个字符串用于告诉框架调用哪个视图显示结果
c) 业务控制器的三种创建方式
i. 基础方法:
ii. 实现接口方法
iii. 继承父类方法
十一、五个常量结果集字符串的含义:
a) SUCCESS:表示请求处理成功转入成功页面
b) ERROR:表示请求出现异常,转入对应的提示页面
c) INPUT:一般表示表单输入数据无效,转回表单页面重新输入,经常用于表单验证未通过的情况
d) NONE:表示执行成功,但不显示视图,通常用于重定向
e) LOGIN:表示Action不能执行,因为用户未登录