更多内容可以访问我的个人博客。
MVC基本概念
MVC将一个应用的输入、处理和输出流程按照Model(模型)、View(视图)和Controller(控制器)三部分进行分离,这样一个应用就可以划分成模型层、视图层和控制层3个层。这三层之间以最少的耦合来协同工作,从而提高了应用系统的可扩展性和可维护性。对于程序员来说,可以更加高效和灵活的完成代码编写。
1.模型层
模型层代表的是企业数据和其对应的业务逻辑,它控制着对数据的处理和更新。通常,模型和现实世界对数据的处理非常相似,这就要求程序开发人员对模型的设计与现实世界应基本相近。模型层接受视图层(通过控制层传送到)的请求数据,并返回最终的处理结果,以更新视图层。
2.视图层
视图层实际上是模型层中的各个模型的具体表现形式。它通过模型得到企业数据,然后再根据需要来显示它们。虽然视图层对数据不做处理,而是将数据直接传送给控制层,但它必须保持着与模型层的数据模型的一致性,即当模型层的数据发生变化时,视图层必须随之变化。
3.控制层
控制层在MVC结构中连接模型层和视图层,起到了纽带的作用。它将视图层的交互信息进行过滤等处理后,再传送到模型层相应的业务逻辑处理程序进行处理。

MVC特点:
低耦合性。架构分三层,降低了层与层之间的耦合,提高了程序的可扩展性。
一个模型可对应多个视图。可提高代码的可维护性,一旦模型发生变化,方便维护。
模型返回的数据与显示逻辑分离。各层只需负责自己的任务,不用去管其他层的任务。
有利于工程化管理。代码可复用,降低了软件开发周期。
Struts2概述
-
到目前为止,Struts框架拥有两个主要的版本,分别是Struts 1.x和Struts 2.x版本,它们都是遵循MVC思想的开源框架。
-
Struts 1是真正意义上的MVC模式,发布后受到了广大程序开发人员的认可。性能高效、松耦合、低侵入永远是开发人员追求的理想状态,而Struts1在这些方面又恰恰存在着不足之处。在这种情况下,全新的Struts2框架应运而生,它弥补了Struts 1框架中存在的缺陷和不足,并且还提供了更加灵活与强大的功能。
-
要注意的是,Struts 2框架并不是Struts 1的升级版,而是一个全新的框架,在体系结构上与Struts 1也存在着较大的差距。它将Struts技术与WebWork技术完美的结合起来,拥有非常广泛的使用前景。
Struts2工作流程

① 用户发出一个HttpServletRequest请求
② 这个请求经过一系列的过滤器Filter来传送。
③ 调用FilterDispatcher。FilterDispatcher是控制器的核心,它通过询问ActionMapper来确定该请求是否需要调用某个Action。如果需要调用某个Action,则FilterDispatcher就把请求转交给ActionProxy处理。
④ ActionProxy通过配置管理器Configuration Manager询问框架的配置文件struts.xml,从而找到需要调用的Action类。
⑤ ActionProxy创建一个ActionInvocation的实例,该实例使用命名模式调用。在Action执行的前后,ActionInvocation实例根据配置文件加载与Action相关的所有拦截器Interceptor。
⑥ 一旦Action执行完毕,ActionInvocation实例根据struts.xml文件中的配置找到相对应的返回结果,通常是一个JSP或者FreeMarker的模板。
⑦ 最后,HttpServletResponse响应通过web.xml文件中配置的过滤器返回。
- 从Struts 2的角度理解MVC
在Struts 2中,模型层对应业务逻辑组件,它通常用于实现业务逻辑及与底层数据库的交互等。视图层对应视图组件,通常是指JSP页面,但也适用于其他视图显示技术,如Velocity或者Excel文档。控制层对应系统核心控制器和业务逻辑控制器。系统核心控制器为Struts 2框架提供的FilterDispatcher,它是一个起过滤作用的类,能根据请求自动调用相应的Action。而业务逻辑控制器是指开发人员自行定义的一系列Action,在Action中负责调用相应的业务逻辑组件来完成处理。
FilterDispatcher——控制层
Action——模型层
Result——视图层
- Struts2的开发优势
通过简单、集中的配置来调度动作类,使得配置和修改都非常容易
通过简单统一的表达式语言来访问所有可供访问的数据
提供标准的、强大的验证框架和国际化框架,而且与Strusts的其他特性紧密结合。
强大的标签,可以有效地减少页面代码
良好的Ajax支持。
增加插件简单。
明确的错误报告。
智能的默认设置。很多框架对象都有一个默认的值,无需再设置。
Struts2开发实例
1. 开发准备
① Eclipse中部署Tomcat:Window|Preferences ——> Server|Runtime Environments ——> Add ——> 选择已安装的Tomcat版本 ——> Next ——> Browse ——> 选择Tomcat安装目录(…\apache-tomcat-9.0.14) ——> Finish
② 为Eclipse指定浏览器:Window|Preferences ——> General | Web Browser ——> Use external web browser ——> Default system web browser ——> OK
③ 指定JSP页面的编码方式:Window|Preferences ——> Web|JSP Files ——> Encoding ——> ISO 10646(UTF-8) ——> OK
④ 下载Struts 2开发包:https://struts.apache.org/ 下载最新版本Struts 2 lib(可以只下载Essential Dependencies Only,也可以把All Dependencies都下载下来)
(按照教程,最好使用struts2.3版本的,使用Struts2.5会有各种错误)
2. 创建Struts2工程
① 创建Dynamic Web Project
② 在项目中部署Struts2开发包:将下载的Struts jar包复制到项目WEB-INF目录下的lib文件夹中(可以将所有jar包都导入,也可以只导入官网给出的最少jar包Essential Dependencies Only)
③ 编写工程配置文件web.xml:在WEB-INF目录下创建web.xml文件。输入以下信息。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sum.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">
<filter>
<!-- Filter名称 -->
<filter-name>struts2</filter-name>
<!--Filter入口 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<!-- Filter名称 -->
<filter-name>struts2</filter-name>
<!-- 截获的所有URL-->
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<!-- 开始页面 -->
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
④ 添加struts.properties文件:在项目Java Resources下的src目录下创建struts.properties。输入以下信息。
<struts.i18n.encoding value="UTF-8"/>
/*指定Web应用的默认编码集,相当于调用 HttpServletRequest的setCharacterEncoding方法。*/
**⑤ 编写struts.xml控制器文件:**在项目Java Resources下的src目录下创建struts.xml,输入如下信息。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<!--指定struts.xml文件的根元素-->
<struts>
<!-- 配置包,包名为default,该包继承了Struts 2框架的默认包struts-default-->
<package name="default" namespace="/" extends="struts-default">
<!--定义名为hello的Action,该Action的处理类为com.action.TestAction,并映射到success.jsp页面 -->
<action name="hello" class="com.action.TestAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
⑥ 前端页面index.jsp和success.jsp
index.jsp关键语句
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
<!--a标签-->
<s:a action="hello">hello</s:a>
</body>
success.jsp关键语句
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
<!--输出helo值-->
<s:property value="helo"/>
</body>
⑦ 后台Struts处理程序TestAction.java
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport{
private static final long serialVersionUID=1L;
private String helo; //Action属性
//getter方法
public String getHelo() {
return helo;}
//setter方法
public void setHelo(String helo) {
this.helo = helo;}
//重载execute()方法
public String execute() throws Exception {
helo="hello,world";
return SUCCESS;
}}
3. 运行结果

用户单击index.jsp链接,发送HTTP请求,服务器接收到HTTP请求后,调用web.xml文件中配置的过滤器的具体方法,通过一系列的内部处理机制,它判断出这个HTTP请求和TestAction类所对应的Action对象相匹配,最后调用TestAction对象中的execute()方法,处理后返回相应的值SUCCESS,然后Struts 2通过这个值可查找到对应的页面即success.jsp,最后返回给浏览器。
本文详细介绍了MVC架构模式,包括模型层、视图层和控制层的功能,强调了MVC的低耦合性和可维护性。接着,文章概述了Struts2框架,指出它是Struts1的进化版,结合了WebWork技术,具有更强大功能。Struts2的工作流程被详细解析,包括请求处理和Action调用。最后,文章提供了Struts2开发实例,涵盖了开发准备、工程创建和运行结果,指导读者实践Struts2开发。
1万+

被折叠的 条评论
为什么被折叠?



