3.1 MVC思想概述
3.2 Struts2的下载与安装
3.3 Struts2的流程
3.4 Struts2的常规配置
3.5 实现Action
3.6 配置Action
3.7 配置处理结果
3.8 配置Struts2的异常处理
3.9 Convention插件预“约定”支持
3.10使用Struts2的国际化
3.11 使用Struts2的标签库
Struts2由Struts1和WebWork两个经典MVC框架发展起来,提供更强大更易用的输入校验功能,整合的Ajax支持
3.1 MVC思想概述
传统的JavaWeb应用经历了Model1和Model2两个时代。
Model1:整个Web应用几乎全部由JSP页面组成,只用少量的JavaBean来处理数据路连接数据库访问等操作。JSP身兼View和Controller两种角色。
Model2:已是基于MVC架构的设计模式。Servlet作为前端控制器,负责接受客服端的请求,在Servlet中只包含控制逻辑和简单的前端处理;然后调用JavaBean来完成实际的逻辑处理;最后转发到相应的JSP页面处理显示逻辑。
MVC思想及其优势
MVC并不是Java语言特有的设计思想,也不是Web应用所特有的思想,他是所有面向对象程序设计语言都应遵循的规范。
MVC思想讲一个应用分成三个基本部分:三个部分以最少的耦合系统工作,从而提高应用的可扩展性和可维护性。
MVC思想预观察者设计模式有一定的相似之处,但并不完全相同。观察者模式中有两个角色,观察者(相当于View)与被观察者(Model)是对等的身份。
3.2 Struts2的下载与安装
*Struts2的lib文件夹下的库文件:
commons-fileupload.jar:与文件上传有关
commons-io.jar:与配置文件的读取有关
freemaker.jar:视图freemaker视图所需
javasisit.ga.jar:是一个动态编辑、生成字节码的类库(类似于CGLIB,不过性能会更好,他不包括在struts2提供的lib包中,要去别的网站下载。
OGNL.jar:用于支持OGNL表达式
struts2-core.jar:Struts2的核心文件1------------Struts框架
xwork-core.jar:Struts2的核心文件2-------------XWork框架
以上几个库是开发Struts的必须类库…………………………….
*导入开发包,配置完web.xml文件,则表明该Web应用已支持Struts2的支持。
3.3 Struts2的流程
Struts2应用的开发步骤
1、 导入所需的包,在web.xml中定义核心filter来拦截用户所有的请求
2、 如果是post请求,则定义包含表单数据的JSP页面,如果仅仅是get方式,则无需这一步。
3、 定义处理用户请求的Action类
问题:
Action并未接收到用户的请求,他怎么知道处理用户请求呢?
通常用户请求后,核心servlet或filter会对用户请求进行简单的预处理,如解析、封装参数等,然后通过反射来创建Action实例,并调用指定Action的execute方法来处理用户请求。
有两种解决方案指明用户请求对应的Action:
一:是利用配置文件
二:是利用约定(需提供Convention插件)
4、在struts.xml文件中中配置Action,包括设置常量、建立包等
5、配置处理结果和物理视图资源之间的对应关系。
6、编写视图资源,如果Action需要把一些数据传给视图资源,则可以借助OGNL表达式(与JSP2 EL功能类似)。
3.4 Struts2的常规配置
虽然Struts2提供了Convention插件来管理Action、结果映射,但大多用户还是使用xml文件。
1、常量
struts.properties文件是一个标准的文件,该文件包含了系列的key-value对 ,每个key就是一个常量。该文件能设置的常量只能是在struts包里边的一个default.properties文件里边的属性常量。
Struts2配置常量总共有三种方式:
通过struts.properties、通过struts.xml文件、通过Web应用的web.xml文件。
如:
在struts.properties文件中配置的常量可以覆盖default.properties文件中的常量,在struts.xml文件中配置了一个常量,该常量可代替struts.properties文件中Struts2配置属性。
Struts2框架按如下顺序加载Struts2常量:
struts-default.xml->struts-plugin.xml->struts.xml->struts.properties->web.xml
3.5 实现Action
Action类里包含了对用户请求的处理逻辑,Action也被称为业务控制器。
相对于Struts1而言,Struts采用了低浸入式的设计,不要求Struts2的Action类必须继承的Struts2的基类ActionSupport或者Action。
Struts2通常直接使用Action来封装HTTP请求参数,这也是问什么Action里边包含参数对应的属性。----------而通常在使用Action的execute方法之前,即解析和预处理阶段,会调用Action的这些属性封装请求参数。
Action类里边的属性,不仅可封装请求参数,还可以用于封装处理结果(该结果可用标签<s:property value=”属性名”>从StackContext或者ValueStack中取出)。P175
Action接口:定义了Struts2的Action处理类应该遵循的规范。该接口定义了5个常量,声明了一个方法—execute();
ActionSupport基类:该类提供了许多默认的方法。如获取国际化信息,数据校验的方法,默认的处理用户请求的方法。
Action访问Servlet API
有三种方法:
1、Struts2提供了一个ActionContext类,通过该类可以访问Servlet API。----间接方式访问
常用的有访问和操作request和session的application属性。
2、Action还可以这样访问servlet API,但需实现如下几个接口:
如ServletContextAware、ServletRequestAware、ServletResponseAware…….
3、 可使用ServletActionContext 访问ServletAPI--------------这个工具类
Action依靠这个工具类,可以以更简单的方式访问Servlet API.
3.6 配置Action
struts.xml文件中配置Action就是让Struts2知道使用那个Action处理那个用户请求,也就是完成用户请求和Action之间的对应关系。
1、包和命名空间
每个包有多个Action,每个Action可以有多个拦截器,Struts2的默认包为struts-default
包用来组织Action和拦截器,可以定义抽象包,可供其他包继承,当然其它非抽象包也可被继承。
命名空间主要是为了处理同一个Web应用中包含同名的Action的情形,用于指定该包对应的命名空间。
Struts2不支持为单独的Action设置命名空间,而是通过包来设定。
2、Action的基本配置:
Struts2提供了包含处理多个处理逻辑的Action,调用DMI(动态方法调用)来处理请求。
要像实现动态调用,先需在struts的default.properties文件中设置struts.enable.DynamicMthodInvocation常量的值为true.
动态调用有两种实现方式:
○1action=”ActionName!methodName”;--------------意思是:把用户请求提交给Action名为ActioName里边的methodName方法来处理。
可改进上方法:指定method属性
○2使用通配符
当多个匹配的action时,除非请求的URL与Action的name属性绝对相同,否则将按先后顺序来决定有那个Action来处理用户请求,这也是为什么name=”*”的action配置在最后的原因。
--
配置默认的Action:
<default-action-ref name=”自己指定一个Action的名字"/>
<action name="自己指定一个Action的名字" class=”…”>
<result>.....
</action>
--
配置Action的默认处理类,struts的Action的默认处理类是ActionSupport即Action的基类。
当然也可更改默认处理类。
在struts.xml中定义<default-class-ref class="…………."/>
3.7 配置处理结果
配置结果,Action处理完成后,返回一个普通字符串---逻辑视图名,必须在struts.xml文件中完成逻辑试图和物理试图资源的映射,才可让系统转到实际的视图资源。
可配置两种结果:一、全局结果,二、局部结果
默认的返回结果类型:dispatcher类型(struts默认的)------用于与JSP整合的结果类型。
Struts2支持的结果类型:
1、PlainText结果类型:用于显示某个页面的原始代码的结果类型
2、Stream结果类型:用于向浏览器返回一个InputStream(一般用于文件下载)
3、Redirect结果类型:用于直接跳抓到其他URL的结果类型
4、RedirectAction结果类型:用于直接跳转到其他Action的结果类型。
……..等。
全局结果:
在struts.xml文件中package节点下定义。
<global-resilts>
<result name=”success”>/{….}</result>
</global-results>
局部覆盖全局的Result….
可使用PreResultListener这个监听器接口,它可在Action完成控制器处理之后和系统转入实际的物理试图之间被回调。可作为日志的实现形式。
3.8 配置Struts2的异常处理
1、我们可在Action的execute()方法里边使用try{}catch{}捕捉异常,当捕捉到时,系统返回对应逻辑视图名-----这种方式完全是手动处理异常,非常繁琐,可复用性不好。
2、对于1方法,我们完全可以把这种对应关系推迟到struts.xml文件中完成。在strut.xml文件中开启异常映射需开启一个拦截器。
声明异常捕捉:在Action里边throw异常!!
在struts.xml文件中通过配置<exception-mapping…/>元素来完成。需指定两个属性:exception和result。
又可设置全局异常和局部异常。
可输出异常信息:<s:property value=”exception”/>或<s:property value=”exceptionStack”/>
3.9 Convention插件预“约定”支持
3.10使用Struts2的国际化
Struts2的国际化是建立在Java国际化的基础之上,一样也是通过不同国家语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定key对应的消息。
Struts2对java程序国际化进行了封装。
1、Struts2中加载全局资源文件
Struts2提供了多种方式加载国际化资源文件,最简单的是加载全局国际化资源文件,在struts.xml中通过配置常量完成,只需配置struts.custom.i18n.resources常量即可,该常量的值指定资源文件的名称。
2、访问国际化信息
Struts2访问国际化信息有三种方式:
○1在JSP页面中使用标签<s:text>标签,该标签可以指定一个name属性,该属性指定了国际化资源文件中的key。
○2在Action中 调用国际化资源信息,可使用ActionSuppor类提供的getText(“名字”)方法,该方法也只需一个name属性。
○3在表单元素里输出国际化信息,为该表单标签指定一个key属性,该key对应国际化资源中的key,若不存在指定的key,则表单标签的名字为key字符串序列。
3、输出带占位符的国际化资源
4、加载资源文件的方式
除了最常用的加载方式,还有其它加载方式:
分别是包范围的资源文件、Action范围的资源文件、临时资源文件。
5、加载资源文件的顺序
……………P228
3.11 使用Struts2的标签库
Struts2也提供了大量的标签来支持开发表现层页面。
Struts2可将标签分为三类:
UI标签(又分为表单和非表单)、
Ajax标签、
非UI标签(又分为流程控制标签和数据访问标签(输出valueStack中的值,完成国际化等功能))。
Struts2的OGNL表达式语言-------------------------与JSP2 EL的作用完全相似。
Struts2利用内建的OGNL表达式语言,大大加强了Struts2的数据访问功能。增加了对ValueStack的支持。
在Struts2应用中,视图页面可通过标签直接访问Action属性值,当Action属性值不是简单值是,而是某个对象、数组、集合时,即可用OGNL来访问这些集合的内部数据。
OGNL的StackContext和ValueStack两个概念:
StackContext是整个OGNL计算、求值的Context,而ValueStack只是StackContext的一个“根”对象而已。OGNl的StackContext除了包含ValueStack这个根对象外,还包括parameters/requesr/session/application/attr等命名对象。
StackContext的根对象和普通命名对象的区别在于:
访问根对象须在对象面前加#前缀、
访问根对象的属性时可省略对象名。
Debug标签主要用于辅助调试他在页面上生成一个超级链接,通过该链接可查看ValueStack和StackContext中所有值的信息。
几个标签说明:
param标签:主要为其它标签提供参数,该标签与其它标签一起使用。
bean标签:用于创建一个JavaBean实例.
set标签:用于把某个值放入制定的范围,如application/request.session等。
property标签:输出value指定的属性的值,如无指定,默认输出valueStack栈顶的值。
token标签,这是一个用于防止多次提交表单的标签,能组织多次提交表单的问题(避免刷新页面导致的多次提交)。P268
-----------------------------
非表单标签
主要用于在页面上生成一些非表单元素的可视化元素。如tab页面、树形结构。当然也包含在页面中显示Action里封装的信息。
主要有如下几个:
actionerror:
actionmessage:
component:
fielderror:如果Actions实例存在表单域的类型转换错误、校验错误,该标签负责输出这些错误提示。
学习笔记...............
分享到:
相关推荐
13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...
### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...
### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
Struts-笔记-1很可能是对学习或研究Struts框架过程中的重要记录,它可能包含了初学者如何理解Struts的核心概念、架构以及如何在实际项目中应用的要点。 首先,Struts框架的起源和发展对于理解其重要性至关重要。...
### Struts2框架学习笔记整理 #### 一、Struts2框架概述 ##### 1.1 Struts2框架定义 Struts2是一个基于MVC(Model-View-Controller)架构模式的开源Java web应用框架,它能够帮助开发者构建可扩展且易于维护的...
5. **学习笔记**: 学习SSH整合时,通常会涵盖以下几个方面:Struts2的配置、Action和结果映射;Spring的IoC和AOP配置,以及与Hibernate的集成;Hibernate的实体类、映射文件和基本操作。此外,还会涉及如何设置...
总的来说,学习Struts2需要理解这些基本配置元素的含义和用法,以及如何通过常量配置来调整框架的行为。此外,还需了解Action、Interceptor(拦截器)的概念,以及结果类型、异常处理、国际化支持等内容。熟练掌握...
下面将详细介绍这三个框架的基本概念、工作原理以及它们如何协同工作。 首先,Struts 是 Apache 软件基金会的一个项目,它的主要目的是提供一种结构化的、可扩展的方式来构建基于 Java 的 Web 应用。Struts 通过 ...
通过这个"struts2学习笔记",你将有机会深入学习Struts2框架,掌握其基本用法和高级特性,提升你在Java Web开发领域的技能。记得结合实际项目练习,理论与实践相结合,才能更好地掌握和运用Struts2。
Struts2 学习笔记-part2: 实现用户登录功能 在上一部分中,我们了解了构建一个基于Struts2的Java Web项目所需的基本库和配置文件。现在,我们将逐步实现一个简单的用户登录功能。 一、创建Action类 在Struts2框架...
### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...
本篇超详细学习笔记将带你逐步深入理解Struts2的核心概念和运作机制。 首先,让我们了解Struts2的基本特性。Struts2是一个基于Servlet的框架,它通过将JSP作为视图(View),Servlet作为控制器(Controller),并将...
4. 学习笔记的内容可能覆盖了Struts2的基础配置、核心概念、实战技巧和复习巩固,帮助读者逐步掌握Struts2框架的全貌。 以上内容只是根据提供的信息进行的推断和扩展,具体的学习笔记内容可能包括了更详细的技术...