目录
一、什么是Struts2
二、搭建Struts2的开发环境
三、Struts2的配置文件
四、MVC模式
一、什么是Struts2
Struts2是一个非常优秀的MVC框架,由传统的Struts1和WebWork两个经典框架发展而来。
Struts2有以下几个核心功能:
(1) 允许POJO(Plain Old Java Objects)对象作为Action。
(2) Action的execute方法不再与Servlet API耦合,更易测试。
(3) 支持更多的视图技术(JSP、FreeMarker、Velocity)。
(4)基于Spring AOP思想的拦截器机制,更易扩展。
(5)更强大、更易用输入校验功能。
二、搭建Struts2的开发环境
1.下载最新的包
它的目录结构如下。
apps: 包含了基于Struts2的示例应用。
docs: 包含了Struts2相关文档及API文档。
libs: 包含了Struts2框架和核心类库,及第三方插件类库。
src: 包含了Struts2框架的全部源码。
2.复制核心jar包到工程中
3.配置核心过滤器
<!-- Struts2核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.创建struts.xml的配置文件放到src目录下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 开启开发模式 -->
<constant name="struts.devMode" value="true"></constant>
<package name="p1" extends="struts-default"> <!-- 配置一个动作 -->
<action name="sayHello" class="com.kiwi.action.HelloAction" method="sayHello">
<!-- 配置结果视图 -->
<result name="success">/success.jsp</result>
</action> </package> </struts>
注意:
配置struts.xml无提示问题的解决
(1)在struts2-core-2.3.7.jar中含有 struts-2.3.dtd,将其复制到硬盘任意位置 例如:G:\\struts-2.3.dtd。
(2)myeclipse - window - preferences - 搜索xml catalog - Add,注意key的类型要选用url。
三、Struts2的配置文件
1.配置文件的加载顺序
Struts2框架按照如下顺序加载struts2配置
default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包里面。
struts-default.xml 该文件保存在 struts2-core-2.3.7.jar。
struts-plugin.xml 该文件保存在struts-Xxx-2.3.7.jar。
struts.xml 该文件是web应用默认的struts配置文件。
struts.properties 该文件是Struts的默认配置文件。
web.xml 该文件是Web应用的配置文件。
如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值。
2.配置文件的内容标签
(1)package
作用: 分模块开发。
属性:
name: 包的名称,唯一的。
extends: 一般都需要直接或间接的一个叫做struts-default的包名,因为struts2的一些核心功能配置都在这里。
abstract: 如果为true,说明是一个抽象包,让别人去继承,没有任何action子元素的包就可以定义为抽象包。
namespace: 名称空间,一般以"/"开头,和action一起构成了用户的访问路径。
Action名称的搜索顺序
(2)action
作用: 配置动作。
属性:
name: 动作的名称,要唯一。
class: 动作的全类名,可以不指定,默认是 com.opensymphony.xwork2.ActionSupport。
method: 执行的动作类的动作方法。可以不指定,默认值是execute。
(3)constant
default.properties定义了struts2 框架的大量常量,开发者可以通过改变这些常量来满足应用的需求,修改struts2 的配置常量,可以通过以下三种方式配置。
a: 配置src/struts.xml
<constant name="struts.devMode" value="true"></constant>
b: 配置src/struts.propertis
struts.devMode=false
c: 配置web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param>
<param-name>struts.devMode</param-name>
<param-value>false</param-value>
</init-param> </filter>
常见的constant
指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出
<constant name="struts.i18n.encoding" value="UTF-8"/>
该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开
<constant name="struts.action.extension" value="action"/>
设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭
<constant name="struts.serve.static.browserCache" value="false"/>
当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开
<constant name="struts.configuration.xml.reload" value="true"/>
开发模式下使用,这样可以打印出更详细的错误信息
<constant name="struts.devMode" value="true" />
默认的视图主题
<constant name="struts.ui.theme" value="simple" />
与spring集成时,指定由spring负责action对象的创建
<constant name="struts.objectFactory" value="spring" />
该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
上传文件的大小限制
<constant name="struts.multipart.maxSize" value=“10701096"/>
3.指定多个Struts配置文件
在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:
<struts>
<include file="struts-part1.xml"/>
<include file="struts-part2.xml"/>
</struts>
四、MVC模式
1.概述
MVC是一种架构型模式,它本是并不引入新的功能,只是指导我们改善应用程序的架构,使得应用程序的模型和视图相分离,从而得到更好的开发和维护效率。
MVC模式中,应用程序被划分成模型、视图、控制器三个部分。其中模型部分包含了应用程序的业务逻辑和业务数据。视图部分封装了应用程序的输出形式,也就是页面。而控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。
MVC模式的这三个部分职责明确,而且相互分离,因此每个部分都可以独立改变而不影响其他部分,从而大大提高了应用的灵活性和重用性。
2.MVC各个部分的作用
模型(Model): 负责封装应用的状态,并实现应用的功能。通常又分为数据模型和业务逻辑模型。数据模型负责存放业务数据,比如订单信息、用户信息。业务逻辑模型包含了应用的业务操作,比如订单的添加或者修改。
视图(View): 将模型的内容展现给用户,用户可以通过视图请求模型进行更新。视图从模型获得要展示的数据,然后用自己的方式展现给用户,提供页面与用户进行交互。
控制器(Controller): 用来控制应用程序的流程和处理视图所发出的请求。当控制器接收到用户的请求时,会调用相应模型来实现用户请求的功能,然后选择相应的视图把模型更新后的数据展示给用户。
3.Struts2与MVC
Struts2是一种基于MVC的Web应用框架。
1.控制器—FilterDispatcher
用户请求首先会到达前端控制器FilterDiapatcher,FilterDiapatcher会根据用户提交的请求和struts.xml中的配置,选择合适的Action,然后让这个Action处理这个请求。
2.模型—Action
在用户请求经过FilterDiapatcher之后,被分发到相应的Action,Action负责把用户请求中的参数组成合适的数据模型,并调用相应的业务逻辑进行真正的功能处理,然后获取下一个视图展示所需要的数据。
3.视图—Result
视图结果把Action中获取到的数据展现给用户。