大家好,关于最早的MVC框架Struts2的基础知识很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
MVC思想概述
1.传统模型1和模型2
Model 1模式:整个Web应用程序几乎完全由JSP页面组成。 JSP页面接收并处理客户端请求,处理完请求后直接做出响应。使用少量的JavaBean来处理数据库连接、访问等操作。可见JSP页面有View和Controller两个角色,逻辑混乱,可维护性差。
Model2模式中,Model层(模型)由JavaBean充当,View层(视图)由JSP充当,Controller层(控制器)由Servlet充当。
2.MVC思想及其优点
MVC思想分为三个基本部分:模型层(model)、视图层(view)、控制器层(controller)
MVC的优点
模型返回的数据在逻辑上与现实是分离的。模型数据可以应用任何现实世界的技术,如JSP、Velocity等。应用分为三层,减少了各层的耦合度,提高了可扩展性。控制层可以组合不同的模型和不同的视图来处理不同的请求。 MVC更符合软件工程管理的思想。不同层各司其职,各层组件具有相同的特性。 Java Web的MVC流程如下:
Struts2的开发流程
(2)在web.xml文件中配置Struts2 core Filter,拦截用户请求
(3) 如果需要以POST方式提交请求,则定义一个包含表单数据的JSP页面。如果通过GET 提交,请跳过此步骤。
(4)定义处理用户请求的Action类
(5) 配置动作。即指定哪个请求调用哪个Action进行处理。如下图:
(6) 配置处理结果与物理视图的对应关系
Action处理完请求后,通常会返回一个处理结果,也称为逻辑视图名。这个逻辑视图需要和物理视图关联起来才有意义,所以我们需要配置关联。如下图:
(7)编写视图资源。获取数据可以使用OGNL或JSTL表达式
Struts2常规配置
1.恒定配置
除了struts.xml来管理配置之外,struts2还可以使用struts.properties来管理常量。 struts.properties 是一个标准的Properties 文件,包含一系列键值对。对应常量的键和值。
只需将struts.properties放在应用程序的类加载路径中,struts2框架就可以加载该文件。
struts2-core.jar文件的org\apache\struts2路径下有一个default.properties文件。修改后的文件配置了所有常量的默认值。
常用常量如下:
(1)struts.locale:设置WEB应用程序的默认Locale,默认值为en_US (2)struts.i18n.encoding:设置WEB应用程序的默认编码集。默认值UTF-8 (3)struts.multipart.parser:开发一个处理multipart/form-data的MIME类型请求的框架。默认值为jakarta(common-fileupload上传框架) (4)struts.multipart.saveDir:指定文件上传的临时保存路径。默认值为tomcat的临时目录(5) struts.multipart.maxSize:指定文件上传允许的大小。最大字节数(6) struts.custom.properties:指定应用程序加载用户自定义常量文件,多个文件之间用逗号分隔(7) struts.action.extension:指定要处理的请求后缀,默认值为行动。即所有匹配*.action的请求都由struts2处理,多个后缀之间用逗号分隔(8) struts.serve.static.browerCache: 设置浏览器是否缓存静态内容(9) struts.enable.DynamicMethodInvocation: 设置是否支持动态方法调用,默认值true (10) struts.devMode:设置是否使用开发模式。设置为true 可以在应用程序发生错误时显示更友好的提示。开发阶段可以设置为true (11)struts.i18n.reload:设置每次HTTP请求到来时系统是否重新加载资源文件。默认值为false。开发阶段可以设置为true (12)struts.configuration.xml.reload:设置当struts.xml文件发生变化时系统是否重新加载该文件。默认值为false。开发阶段可以设置为true (13) struts.ui.theme: 指定视图标签的默认视图主题,默认值为xhtml (14) struts.custom.i18n.resources: 指定需要的国际化资源文件应用程序、多个资源文件之间以逗号分隔,用于配置文件加载方式和流程。
默认情况下,struts2会在类加载路径下加载三种类型的文件:struts.xml、struts-default.xml、struts-plugin.xml。其中struts.xml是开发者订购的默认配置文件,struts-default.xml是struts2框架。内置配置文件struts-plugin.xml是struts2插件的默认配置文件。
常用配置方法:
通过struts.properties直接在类加载路径中创建文件,并通过标准属性文件格式key=value进行配置
通过struts.xml
通过应用程序的web.xml
引入struts框架时配置
按以下顺序加载常量:
(1)struts-default.xml:保存在struts2-core.jar中(2)struts-plugin.xml:保存在struts2插件的jar文件中(3)struts.xml:应用struts2默认配置文件(4) )struts.properties:struts2默认属性配置文件(5)web.xml:应用程序配置文件。上述顺序后面的文件中的常量配置信息将覆盖前面的文件。
2.包含其他配置文件
为了避免struts.xml文件太大,可以将struts.xml分解为多个配置文件,然后在主配置文件中包含其他配置文件,如下所示:
实现Action
在struts2中,Action类是框架的核心,包含了用户请求的处理逻辑。 Action 类称为业务控制器。 struts2中的Action不需要继承任何基类或实现任何接口。 Action类作为普通的POJO(需要包含execute方法),通常可以直接封装HTTP请求参数,并提供setter和getter方法。如下图:
(1)Action类可以封装请求参数和处理结果。
(2)execute方法用于处理用户请求,可以在其中编写逻辑
1.Action接口和ActionSupport基类
为了简化和规范Action类的开发,我们可以实现Action接口或者继承ActionSupport类
Action界面如下图:
Action接口定义了逻辑视图名称和请求处理方法。
ActionSupport类如下所示:
ActionSupport类提供了很多默认方法,包括获取国际化信息、数据验证、处理用户请求等。
2.Action访问Servlet API
struts2的Action没有与任何Servlet API耦合,但是如果需要访问Servlet API,可以使用ActionContext类。常用方法如下:
Object get(Object key):类似于调用HttpServletRequest 的getAttribute(String name)Map getApplication():获取应用程序的ServletContext 实例ActionContext getContext():获取ActionContext 实例Map getParameters():获取所有请求参数,类似于HttpServletRequest 的getParameterMap ( )Map getSession():获取HttpSession实例void setApplication(Map application):设置application范围内的属性值void setSession(Map session):设置session范围内的属性值3.Action直接访问Servlet API
4.使用ServletActionContext访问Servlet API
ServletActionContext工具类可以直接访问Servlet API。工具类方法如下:
PageContext getPageContext():获取PageContext对象HttpServletRequest getRequest():获取HttpServletRequest对象HttpServletResponse getResponse():获取HttpServletResponse对象ServletContext getServletContext():获取ServletContext对象
配置Action
实现Action处理类后,需要配置它在struts.xml中配置了Action。
1. 包和命名空间
Struts2使用包来组织Action,定义Action是通过使用包下的action子元素来完成的。每个package元素配置一个package,每个package是多个Action、多个拦截器、多个拦截器引用的集合。
包元素属性
名称:必需的属性。该属性指定包的名称。它必须是独一无二的。这个名称是该包被其他包引用的关键。扩展:可选属性。该属性指定该包继承其他包的名称。它可以继承Action和拦截器。 namespace:可选属性,指定包的命名空间abstract:可选属性,指定包是否为抽象包,不能包含Action定义。例如如下所示:
(1)第一个包继承的struts-default是struts2-core.jar中定义的抽象包,其中包含(2)大量的结果类型定义、拦截器定义、拦截器引用定义。
当包指定命名空间时,该包下所有Action处理的URL为命名空间+Action名称;如果没有指定命名空间,则为默认命名空间。
(3) 使用namespace=’/’指定根命名空间。默认命名空间将处理指定命名空间下未找到的Action请求,根命名空间只会处理根命名空间下的Action请求。
2.Action的基本配置
name:该属性既是Action的名称,又指定了Action处理请求的URLclass:Action的处理类指定如下:
配置Action时,需要同时配置逻辑视图和物理视图的对应关系,通过结果
操作名称=’索引’结果名称=’成功’类型=’调度程序’/admin/main.jsp/result/action3。使用Action的动态方法调用
有时我们需要使用不同的Action方法来处理不同的用户请求。在这种情况下,可以使用动态方法调用来处理请求。
在使用动态方法调用之前,必须设置struts.enable.DynamicMethodInitation=true来启用它。
4.指定方法属性
如果配置了action元素,则可以指定method属性,让action调用指定的方法而不是execute方法来处理用户请求。这样,一个动作类就可以定义为多个逻辑动作,即Action类的每个处理方法都映射为一个逻辑Action。
操作名称=’登录’类=’org.LoginAction’方法=’登录’/action5。配置默认操作
当用户请求找不到对应的Action时,系统默认的Action将处理用户请求。如下图:
在default命名空间中配置默认的Action可以让该Action处理所有用户请求,因为default命名空间中的Action可以处理来自任何命名空间的请求。
6.配置Action默认处理类
配置action元素时不需要指定class属性。如果不指定class属性,系统默认使用ActionSupport作为Action处理类。 Struts2允许开发者定义自己的Action默认处理类,如下:
package name=”default-class-ref class=’Action默认处理类’//package
配置处理结果
1.处理结果分析
Action处理完用户请求后,会返回一个普通的字符串。该公共字符串是逻辑视图名称。 Struts2配置逻辑视图名称和物理视图名称之间的映射关系。一旦系统接收到Action、name返回的某个逻辑视图,系统就会将相应的物理视图呈现给观看者。
2. 配置结果
Struts2使用struts.xml文件中的result元素来配置结果,并根据元素的位置提供两种结果。
本地结果:将结果配置为操作元素的子元素。全局结果:将结果配置为全局结果元素的子元素。 results 元素有两个属性:
name:指定配置的逻辑图的名称,默认值为successtype:指定结果类型,默认值为Dispatcher
3.Struts2支持的结果类型
chain:Action链处理的结果类型dispatcher:用于指定使用JSP作为视图的结果类型redirect:用于直接跳转到其他URL的结果类型redirectAction:用于直接跳转到其他Action的结果类型stream:用于返回一个InputStream到浏览器xslt:用于与XML/XSLT集成的结果类型plainText:用于显示页面原始代码的结果类型4. 全局结果
当global-results元素中配置了results元素时,该元素就配置了一个全局结果,该全局结果将对所有Action都有效。如下图:
如果Action中包含与全局结果同名的结果,则该Action中的本地Result会覆盖全局Result。
5. 使用PreResultListener
PreResultListener是一个监听接口,可以在Action完成控制处理、系统切换到实际物理视图后回调。如下加粗:
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126669.html
用户评论
荒野情趣
学习了Spring前,用过Struts2做项目,当时感觉还挺不错的,上手容易,开发速度也很快。现在想想还是有点感慨,很多功能都是为了解决当年Java开发的痛点,比如Action和Dispatcher的机制。
有12位网友表示赞同!
﹏櫻之舞﹏
最早接触程序的时候是用Struts做的,感觉框架还是挺不错的,逻辑清晰,而且可以分离开代码,前后端分离比较容易理解。后来springMVC出来以后没再用了,主要是那个时候spring学习起来有点麻烦,就一直用着struts2,现在想起来好像有些功能不太强大啊
有14位网友表示赞同!
像从了良
Struts2确实是在很久以前出现的框架了,很多技术都开始逐渐被淘汰了。但回顾一下它的历史意义还是很重要的,它为Java web 开发奠定了MVC架构的基石,后续像Spring MVC 和其他框架借鉴了不少的设计思想。
有16位网友表示赞同!
绳情
感觉这个Struts2入门教程讲得还挺详细的,虽然我已经用spring mvc开发项目很久了,但是还是可以复习一下以前学的东西!毕竟老东西总要重温一遍才能真正理解它。
有6位网友表示赞同!
仅有的余温
学习MVC框架的时候我确实是从Struts 2开始的,当时印象中还比较难上手呢,不过感觉它的设计思想还是很成熟的啊。现在回头看一些教程,也能明白不少的设计理念了。
有9位网友表示赞同!
冷嘲热讽i
MVC框架的最初设计思想还是挺棒的,把控制器、视图和模型分离,能提高代码的可维护性和可扩展性!Struts2就是用这种方式来实现mvc架构的,现在虽然不如spring MVC风靡,但是它的存在意义还是很大的,对理解mvc架构很有帮助!
有8位网友表示赞同!
执念,爱
这个教程讲得还挺通俗易懂的,对于刚开始接触MVC框架的新人来说确实挺不错了!我第一次接触MVC框架就是用 Struts2 来做的小项目,当时感觉学习曲线比较陡峭,现在回头整理一下教材,希望能加深对Struts的理解
有19位网友表示赞同!
剑已封鞘
虽然现在流行的MVC框架是Spring MVC,但是我觉得研究研究曾经最早的框架也是很有意义的啊!可以更深入地了解MVC架构的发展历程和不同框架的设计思想。
有12位网友表示赞同!
小清晰的声音
Struts2虽然年代比较久了,但它确实是一个开创了Java WEB开发MVC模式的优秀框架,值得学习和参考!
有12位网友表示赞同!
£烟消云散
作为一名初学者,感觉这个教程讲得太详细了,有些东西我理解不太完全,希望还有更深入的讲解。
有8位网友表示赞同!
入骨相思
对于现在已经用的springmvc来说,学习一下struts2确实会对MVC架构有一个更全面的理解。毕竟每个框架都有自己的特点和优点,多了解一些总是有帮助!
有10位网友表示赞同!
毒舌妖后
这个标题就挺吸引人的,让我想回顾一下Struts2的知识点,不过我现在的项目都是用springmvc来做的,感觉比较简单高效。
有9位网友表示赞同!
呆檬
感觉Struts2 的配置有点繁琐,现在很多框架都简化了配置过程。但我还是要佩服它的历史地位,它打开了Java WEB开发新的思路!
有13位网友表示赞同!
不浪漫罪名
我之前没怎么接触过Struts2,这个教程可以让我了解一下最早的MVC框架是什么样的设计理念? 感觉挺有意义的!
有11位网友表示赞同!
淡抹烟熏妆丶
这个介绍还是比较全面,讲解各个功能模块都很仔细,适合初学者和想复习 Struts2 的老同学们参考。但我觉得图解会更清晰易懂一些!
有14位网友表示赞同!
心贝
看完这个教程后,感觉Struts2的学习曲线还挺陡峭的,估计要花一点时间才能真正掌握了。
有10位网友表示赞同!