MVC基本概念与Struts2概述

本文详细介绍了MVC架构模式,包括模型层、视图层和控制层的功能,强调了MVC的低耦合性和可维护性。接着,文章概述了Struts2框架,指出它是Struts1的进化版,结合了WebWork技术,具有更强大功能。Struts2的工作流程被详细解析,包括请求处理和Action调用。最后,文章提供了Struts2开发实例,涵盖了开发准备、工程创建和运行结果,指导读者实践Struts2开发。

更多内容可以访问我的个人博客


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的开发优势
  1. 通过简单、集中的配置来调度动作类,使得配置和修改都非常容易

  2. 通过简单统一的表达式语言来访问所有可供访问的数据

  3. 提供标准的、强大的验证框架和国际化框架,而且与Strusts的其他特性紧密结合。

  4. 强大的标签,可以有效地减少页面代码

  5. 良好的Ajax支持。

  6. 增加插件简单。

  7. 明确的错误报告。

  8. 智能的默认设置。很多框架对象都有一个默认的值,无需再设置。

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,最后返回给浏览器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值