Struts旅程(一)Struts简介和原理

2023-05-16

struts简介

StrutsApache软件基金会(ASF)赞助的一个开源项目。它最初是jakarta项目中的个子项目,并在20043月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

Struts发展历史

Struts是作为ApacheJakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServerPagesservlet、标签库以及面向对象的技术水准。

Struts这个名字的来源于在建筑和旧式飞机中使用的支持金属架。之所以这个框架叫做“struts”,是为了提醒我们记住那些支撑我们房屋,建筑,桥梁,甚至我们踩高跷的基础支撑。这也是解释struts在开发web应用程序中所扮演的角色的精彩描述。

Struts的含义是支柱,枝干,它的目的是为了减少程序开发的时间,项目的创建者认为JSPservlet的存在虽然可以帮助用户解决大部分问题,但是由于它们的编码对项目的开发带来了许多的不方便,可重用性也差,所以struts应运而生,帮助用户在最短的时间内解决这些问题。Struts框架提供如下服务:

1)作为控制器的Servlet

2)提供大量的标签库。

3)提供了用于国际化的框架,利用不同的配置文件,可以帮助用户选择合适自己的语言。

4)提供了JDBC的实现,来定义数据源和数据库连接池。

5XML语法分析工具。

6)文件下载机制。

 

Struts原理

Struts是对JSPModel2设计标准的一种实现,下面分别从模型(Model)、视图(view)和控制器3个部分介绍Struts的体系结构和工作原理。调用流程如下所示(图1.1)。


1.1

 

1)视图(view

Struts中,视图层包含两个部分,JSP页面和ActionForm

ActionForm封装了用户提交的表单信息,其实ActonForm本质上就是JavaBean,这些JavaBean中没有业务逻辑,只提供了所有属性的gettersetter方法,这些属性和用户表单中的输入项是一一对应的。在Struts中就是通过ActionForm把用户表单信息提交给控制器。

JSP页面是经典MVC中主要的视图组件,主要是信息显示和控制器处理结果显示的功能。

除了以上,struts还提供了一个强大的struts标签库,来帮助用户解决显示逻辑,并且利用ActonForm组件将信息传递到控制层。

2)控制器(Controller

在控制层,struts提供了一个控制器组件ActionServlet,它继承自HttpServlet,并重载了HttpServletdoGet(),doPost()方法,可以接受HTTP的响应,并进行转发,同时还提供了使用XML进行转发Mapping(映射)的功能。

3)模型(Model

模型表示状态和业务逻辑的处理,在一般的web应用程序中,用JavaBean或者EJB来实现系统的业务逻辑。在Struts中,struts提供Action对象,来管理业务逻辑的调用帮助用户分离业务逻辑,也就是说struts本身不实现业务逻辑,但可以调用已完成的业务逻辑

Struts工作流程

Struts工作流程如下(图1.2)所示。

 


图1.2

 

ActionServletstruts中核心的控制器,所有的用户请求都必须通过ActionServlet的处理,而struts-config.xmlstruts中核心的配置文件,在这个文件中配置了用户请求URL和控制器Action的映射关系,ActionServlet通过这个配置文件把用户的请求发送到对应的控制器中。

struts web应用程序中,当web应用程序启动的时候,就会初始化ActionServlet在初始化ActionServlet的时候会加载struts-config.xml配置文件,在加载成功后会把这些URL和控制器映射关系存放在ActionMapping对象或者其他对象中。当ActionServlet接收到用户请求的时候,就会按照下面的流程对用户请求进行处理。

1ActionServlet接收到用户的请求后,会根据请求URL寻找匹配的ActionMapping对象,如果匹配失败,说明用户请求的URL路径信息有误,所以返回请求路径无效的信息,当找到匹配的ActionMapping的时候,进入到下一步。

2)当ActionServlet找到匹配的ActionMapping对象的时候,会根据ActionMapping中的映射信息判断对应的ActionForm对象是否存在,如果不存在对应的ActionForm对象就创建一个新的ActionForm对应,并把用户提交的表单信息保存到这个ActionForm对象中。

3)在struts-config.xml中这个配置文件,可以配置表单是否需要验证,如果需要验证,就调用ActionForm中的validate()方法对用户输入的表单进行验证。

4)如果ActionFormvalidate()方法返回了ActionErrors对象,则表明验证失败,ActionServlet把这个页面返回到用户输入的界面,提示用户重新输入。如果方法的返回值为null,就表明验证已经通过,可以进入下一步处理。

5ActionServlet可以根据ActionMapping对象查找用户请求转发给哪个控制器Action,如果对应的Action对象不存在,就创建这个对象,并调用这个Actionexcute()方法。

6)业务逻辑控制器Actionexecute()方法就会返回一个ActionForward对象,ActionServlet把控制器处理的结果转发到ActionForward对象指定的JSP页面。

7ActionForward对象指定的JSP页面根据返回的处理结果,用合适形式把服务器处理的结果展示给用户,到这里为止,一个客户请求的整个过程完毕。


以上初步struts框架进行了介绍,和对原理进行了简单的分析。至于struts是如何实现MVC的,ActionServlet属于Controller部分,Action和ActionForm属于Model层,还是Action属于Controller层,不同的人对struts有不同的理解。接下来真正的运用到实践中,在实践中深刻去体会,原理固然重要,重要的是运用,是能驾驭和使用这个框架。就像学习开车一样,不是一蹴而就的。

下一篇讲解struts配置,我们以登录为例。


 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Struts旅程(一)Struts简介和原理 的相关文章

随机推荐

  • Ubuntu Gnome下怎样修改应用的图标icon

    我在我机器上安装了一个matlab 但在软件搜索里找不到matlab 我发现是matlab没有对应的 desktop文件 顺便我将matlab的图标也修改下 步骤如下 1 准备一个icon图像文件 如我这里的文件名为matlab png 将
  • DOS,WINDOWS递归删除指定文件夹或文件

    DOS xff0c WINDOWS递归删除指定文件夹或文件 64 REM 64 REM Name 递归删除指定的目录 xff0c 请把此文件放在你希望执行的那个目录 64 REM Desciption 64 REM Author amosr
  • macOS 使用 - 使用系统屏幕共享(VNC)

    文章目录 关于 屏幕共享 应用 权限开启 开始连接 使用 Apple ID 连接 使用 IP 连接 连接成功 断开连接 参考 关于 屏幕共享 应用 macOS 自带屏幕共享功能 路径为 System Library CoreServices
  • 免费ddns f3322.net使用脚本更新公网ip小记

    话说今天服务器域名访问不了 xff0c 路由器也访问不了 xff0c 另听说停电了 xff0c 估计是ddns没有更新 下午到现场一看 xff0c c7v2的ddns显示未登陆 xff0c 因为这货刷了us固件 xff0c 能用的ddnd只
  • Unresolved reference: databinding 模块化,组件化报错

    不要只在 总的 libaray 中添加 dataBinding span class token punctuation span enabled span class token operator 61 span span class t
  • Android lottie java.lang.IllegalStateException: Missing values for keyframe

    使用Lottie动画的时候 xff0c 运行发现了此报错 xff0c 版本为2 4 0 xff0c 在经过几番的测试后 xff0c 更改了资源文件和xml里面的配置也不大行 tips 一定要在xml里面配置资源文件 xff0c 当你把资源文
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 详解蓝牙标准中的GFSK调制

    简介 GFSK是一种简单但应用广泛的调制方式 xff0c 在蓝牙和802 11等无线通信标准中都有应用 802 11跳频FHSS时所用的调制方式是GFSK 2和GFSK 4 xff0c 采用BT 61 0 5的高斯滤波器 在GFSK 2和G
  • ajax入门 不要畏惧 很简单 进了门一切都好学多了

    以前总是听别人说ajax是多么的好 xff0c 然后自己就去借了本书看 xff0c 哇塞感觉好难哦 xff0c 什么介绍javascript html css xff0c 还有很多一些东西 看的那个难啊 xff0c 然后就是硬着头皮把它给看
  • IntelliJ IDEA With Git

    记录下Git如何与IntelliJ IDEA协作 文章目录 环境准备IntelliJ IDEA With Git 开发过程1 初次获取远端代码2 查看远端仓库分支3 将指定的远端分支同步到本地 xff08 建议同远端名一致 xff09 4
  • 环形缓冲区(ringbuffer)

    环形缓冲区 xff08 ringbuffer xff09 环形缓冲区是嵌入式系统中十分重要的一种数据结构 xff0c 比如在串口处理中 xff0c 串口中断接收数据直接往环形缓冲区丢数据 xff0c 而应用可以从环形缓冲区取数据进行处理 x
  • Gson解析异常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

    首先检查你的retrofit配置是否正确 xff0c 解析异常 addConverterFactory GsonConverterFactory create 在这里修改成这个gson的 Retrofit retrofit 61 new R
  • leetcode|多线程专题

    1114 按序打印 我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void th
  • OpenCV实战(1)——OpenCV与图像处理基础

    OpenCV实战 xff08 1 xff09 OpenCV与图像处理基础 0 前言1 OpenCV 基础1 1 安装 OpenCV1 2 OpenCV 主要模块1 3 使用 Qt 进行 OpenCV 开发 2 OpenCV 图像处理基础2
  • 1.机器视觉标准框架学习

    在工业机器视觉上 xff0c 常见的图像处理库有opencv halcon visionpro sherlcok等 其中visionpro和sherlcok是拖拽式编程 xff0c 方便用户开发视觉项目 但对于opencv 和halcon则
  • Gitlab权限说明

    Gitlab权限管理 Gitlab用户在组中有五种权限 xff1a Guest Reporter Developer Master Owner Guest xff1a 可以创建issue 发表评论 xff0c 不能读写版本库 Reporte
  • 二进制的浪漫

    0 基本性质 0 1 交换律 相同运算符下可任意交换 xff0c 不同的运算符不可交换 0 2 结合律 相同运算符是可结合的 0 3 分配律 a amp b
  • (九)分支限界法

    分支限界法 xff08 branch and bound method xff09 按广度优先策略搜索问题的解空间树 xff0c 在搜索过程中 xff0c 对待处理的节点根据限界函数估算目标函数的可能取值 xff0c 从中选取使目标函数取得
  • (七)贪心法

    贪心法比较简单 xff0c 从这个算法的名字看来差不多都了解了 xff0c 贪心 xff0c 贪心的人是只顾一时的利益 xff0c 不顾长远的利益 贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择 xff0c 每一步选择都是对当前的
  • Struts旅程(一)Struts简介和原理

    struts 简介 Struts 是 Apache 软件基金会 xff08 ASF xff09 赞助的一个开源项目 它最初是 jakarta 项目中的一 个子项目 xff0c 并在 2004 年 3 月成为 ASF 的顶级项目 它通过采用