MVC框架及Struts2介绍

本文介绍了MVC框架的原理和Struts2框架的详细内容,包括Struts2的核心功能、目录结构、使用步骤以及执行流程。Struts2作为MVC框架的一种,旨在解决传统模式的问题,提供更高效、灵活的Web应用开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MVC框架及Struts2介绍
Struts2核心
Struts2拦截器
Struts2值栈和OGNL表达式
Struts2标签库

1 框架

1.1 框架

  框架(Framework):指为解决一个特定问题而设计的具有一定约束性的结构。框架强调的是软件的设计重用性和系统的可扩充性,以缩短大型应用软件系统的开发周期,提高开发质量。一个好的框架必定是某个领域的最佳实践。
  最佳实践(Best Practice):是无数程序员经历过无数次尝试之后,总结出来的处理特定问题的特定方法。最佳实践的五要素:可读性、可维护性、可拓展性、消除重复化繁为简、减少依赖消除耦合。

1.2 分层开发思想

  Web开发中的最佳实践是分层开发模式,不同的分层承担了不同的功能职责:
  表现层(Predentation Layer):负责处理与界面交互的相关功能(Struts2、SpringMVC);
  业务层(Business Layer):负责复杂的业务逻辑计算和判断;
  持久层(Persistent Layer):负责将业务逻辑数据持久化存储(mybatis、Hibernate)。
  分层开发思想结构

1.3 MVC模式

  MVC:(Model View Controller)是一个框架模式,让程序的输入、处理、输出功能分开。MVC模式的核心是:模型、视图、控制器。最典型的MVC结构就是javabean+JSP + servlet。
  MVC模式
  数据模型(Model):通常分为数据模型和业务逻辑模型,数据模型用来存放业务数据,如订单信息、用户信息等;业务逻辑模型包含应用的业务操作,如订单的添加、修改。
  视图展现(View):界面,用来将模型的内容展现给用户,用户可以通过视图来请求模型进行更新。视图从模型中获得要展示的数据,然后展现给用户。
  控制器(Controller):用来控制应用程序的流程和处理视图发出的请求。当控制器接收到用户的请求后,会调用模型来实现用户请求的功能;然后控制器会选择用于响应的视图,把模型更新后的数据展示给用户。

1.4 MVC框架

  传统MVC模式的问题
  1.所有的Servlet和Servlet映射都要配置在web.xml中,如果项目太大,web.xml就太庞大,不能实现模块化管理;
  2.Servlet的主要功能是接受参数、处理业务、页面跳转,而像字符编码、文件上传等功能也要写在Servlet中,不能让Servlet专注于主要功能;
  3.只能单个接收参数,如果参数过多就会很麻烦;
  4.页面跳转方式单一(forword、redirect),并且页面名称发生改变时需要修改Servlet源代码。

  MVC框架
  是为了解决传统MVC模式(Jsp + Servlet + JavaBean)的一些问题而出现的框架。
  常用的MVC框架:Struts2、SpringMVC,Struts2一般用于老项目中,SpringMVC一般用于新项目中。

2 Struts2

2.1 Struts2介绍

  Struts2是一个MVC框架,基于Model2设计模型,由传统Struts1和WebWork两个经典框架发展而来。

  核心功能
  允许POJO(Plain Old Java Objects)对象作为Action (javabean),Action的execute方法不再与Servlet API耦合,并且支持更多视图技术(JSP、FreeMarker、Velocity) ,其中JSP需要编译,模板直接翻译为静态页面。基于SpringAOP思想的拦截器机制,更易扩展AOP(Spring事务)面向切面编程。

2.2 Struts2目录结构

  Struts2目录结构
  apps:基于struts2的示例应用;
  docs:struts2相关文档,包括struts2快速入门、struts2的文档以及API文档等;
  lib:Struts2框架和核心类库,以及struts2第三方插件类库,不必全部拷贝;
  src:Struts2框架的全部源代码。

2.3 Struts2使用步骤

  Struts2下载地址:http://struts.apache.org/download.cgi
  1.创建一个Dynamic Web Product项目,修改classes路径;
  修改classes路径
  修改classes路径:右键项目→Build Path→Configure Build Path→Browse…→选中WEB-INF→创建classes→OK。

  2.解压apps中的struts2-blank.war,然后在lib中拷贝所需的jar;
  拷贝lib

  3.在web.xml中添加<filter>标签配置核心控制器;

<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>

  StrutsPrepareAndExecuteFilter是struts2的核心控制器,可在struts2-blank项目的web.xml中参考配置。

  4.创建一个Action类,写一个execute()方法,并且需要有返回值;

public class UserAction {
    public String execute(){
        return "success";
    }
}

  5.在resources文件(Source Folder文件)中写一个struts.xml配置文件,与Action关联起来;

<struts>
    <!-- Action配置都是package,不能删除 -->
    <package name="default" namespace="/" extends="struts-default">
        <!-- name:Action的名称,和url一一对应 class:Action所对应类的全限定名 method:执行的Action的方法名 -->
        <action name="user" class="cn.wenwen.action.UserAction" method="execute">
            <!-- 配置结果视图 name:结果视图的名称,Action的执行方法后的返回值一一对应 type:视图的跳转类型 文本内容:跳转的jsp页面 -->
            <result name="list" type="dispatcher">
                /WEB-INF/userList.jsp
            </result>
        </action>
    </package>
</struts>

  可在struts2-blank\WEB-INF\classes文件中找到相关配置信息。

2.4 Struts2的执行流程

  这里写图片描述
  1.浏览器发送请求,经过一系列的过滤器后,到达核心过滤器(StrutsPrepareAndExecuteFilter);
  2.核心过滤器判断当前的请求是否需要某个Action处理,如果不需要,走原来的流程,如果需要则把请求交给ActionProxy来处理;
  3.ActionProxy通过struts.xml配置文件,找到需要调用的Action类,通过反射创建一个Action对象;
  4.通过反射调用Action中对应的方法,在调用前后会执行相关拦截器;
  5.通过返回的视图名称找到对应结果集作出响应。

2.5 项目基本结构

  这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值