Struts2笔记:旨在介绍Struts2有什么,怎么使用Struts2。暂时不关注原理、核心。
学习Struts2的使用应该从以下三个方面
①如何跳转 、<result>标签 、<package>标签 、DMI
②VS(ValueStack) 与ognl表达式、Struts2标签
③拦截器
本文摘要:前置内容(MVC开发模式、Struts2开发环境的搭建)、跳转 、<result>标签<package>标签的用法、DMI
一:MVC的开发模式
I. 概念:MVC是一种设计思想,将流程控制、业务操作、数据展示分为三个层级(模块),独立存在、各司其职,彼此间是一种组合、调用。
II. MVC的组成:
M |
Model |
模型 |
对客观世界的一种代表或模拟(业务模拟、对象模拟) |
Service+DAO+Entity |
V |
View |
视图 |
负责页面展示、数据采集 |
HTML(JSP)+JS |
C |
Controller |
控制器 |
负责流程控制、程序走向 |
Servlet(Action) |
III. MVC的特点:
1). 低耦合性:模块与模块之间的关联性不强,不与某一种具体的实现产生密不可分的关联。
2). 高维护性:基于低耦合性,不同模块之间更容易修改或替换,热插拔。
3). 高重用性:相同的数据操作,可以服务与不同的业务功能,提高重用性。
二、Struts2框架:
1. 概念:充当了MVC中的Controller(控制器),可替换原有的Servlet(Action)。
2. 使用Servlet充当控制器的问题:
3. 使用Struts充当控制器:
三: Struts2开发环境的搭建
https://blog.csdn.net/sugar_map/article/details/80171920
四:Struts2编码 (暂不通过值栈取值、通过原生作用域取值)
1:实现Action接口 import com.opensymphony.xwork2.Action;
实现execute()方法
①:通过ServletActionContext对象获取作用域对象。
获取到request可以收集客户端传来的值、将值绑定到request作用域中,通过转发传值。
②:方法的返回值类型为 String
返回null值:响应空白页面。
<result>标签的name属性与返回值匹配:响应对应的Action或JSP页面。
若方法的返回值 与<result>标签的name属性值不匹配,则报错。
细节: Action对象的创建:
a. 多次请求同一个Servlet只创建一个Servlet对象。
b. 多次请求同一个Action对象会创建多个Action对象(每次请求都会创建一个)。
五、<package>包标签:
1. 作用:
I. 按功能完成模块的划分,管理不同<action>标签。
II. 功能的复用。
六:Struts2跳转详情
分为两大类:
Action->JSP,Action->Action
①首先讨论 同包package的情况
1. Action ~ JSP:
I. dispatcher(默认):URL不变
<!-- Action->JSP 默认方式为dispatcher(可以省略)-->
<action name="showAll" class="action.EmployeeListAction">
<result name="success" type="dispatcher">emplist.jsp</result>
</action>
II. redirect:URL改变
<!--Action->JSP type="redirect"(不可省略)-->
<action name="login" class="action.ControlLoginAction">
<result name="success" type="chain">showAll</result>
<result name="none" type="redirect">login.jsp</result>
</action>
2. Action ~ Action:
I. chain:URL不变
<!--Action->JSP type="chain"(不可省略)-->
<action name="login" class="action.ControlLoginAction">
<result name="success" type="chain">showAll</result>
<result name="none" type="redirect">login.jsp</result>
</action>
<!--Action->JSP type="redirectAction"(不可省略)-->
II. redirectAction:URL改变
<action name="showAll" class="action.EmployeeListAction">
<result name="success" type="dispatcher">emplist.jsp</result>
</action>
<action name="delete" class="action.ControlDeleteAction">
<result name="success" type="redirectAction">showAll</result>
</action>
②:不同包的情况
Action->JSP跟同包情况一致。
Action到Action的重定向(不讨论转发,因为Action为多例,不方便共享作用域。)
七:DMI(动态方法的调用)
1. 将对同一张表操作的多个请求操作,书写在一个Action中,从而减少系统Action的数量,便于后续的项目管理与维护。
3. 逻辑代码:
建议:继承ActionSupport,由父类提供默认实现。 //因实现Action接口必须覆盖execute()方法(稍显多余)
4. struts.xml配置文件:
根据method属性区分Action请求的到底是哪个方法。