java之路—— 带你了解Struts与其基本的应用

news2024/11/16 11:41:35

在这里插入图片描述

创作不易,各位亲给个免费的呗

文章目录

  • 前言
  • 一、什么是Struts,可以用来干嘛
  • 二、Struts 与 springmvc
  • 三、Struts的开发的基本步骤
  • 四、Struts的处理流程


前言

Struts是在2000年由Apache软件基金会首次发布的,自那时以来,它在Java Web开发中扮演着重要的角色,并经历了许多值得注意的发展阶段。

Struts 1.x:Struts的最初版本是Struts 1.x系列,它引入了MVC架构模式,提供了基本的控制器(Action)和视图(JSP)的分离。Struts 1.x以其可靠性和易用性受到了广泛的关注和应用。

Struts 2.x:随着时间的推移,Struts 2.x取代了Struts 1.x成为新一代的Struts框架。Struts 2.x在架构上进行了重大改进,采用了更灵活、更面向对象的设计理念。它引入了拦截器、标签库和注解等新特性,使得开发更加高效和舒适。

Struts对Web开发的影响:Struts的出现对Java Web开发产生了重要的影响。它提供了一种组织和管理Web应用程序的模式,帮助开发者更好地处理请求、处理业务逻辑和渲染用户界面。Struts架构在很多Web应用程序中得到了广泛的应用。

社区和生态系统:Struts在其发展过程中建立了一个活跃的开发者社区和生态系统。这个社区不断为Struts贡献新特性、修复bug和提供支持。此外,还有许多第三方库和工具与Struts集成,为开发者提供了更多的选择和扩展性。

虽然如今有一些新的框架如Spring MVC、Spring Boot等的出现,但Struts作为一个经过时间考验的框架仍然存在,并继续为许多企业和开发者所使用。无论是通过Struts 1.x还是Struts 2.x,它们都为Java Web开发提供了强大的支持和灵活的架构。不断的改进和持续的社区贡献使得Struts能够适应新的技术需求和潮流,为开发者创造更好的开发体验。

一、什么是Struts,可以用来干嘛

Struts是一个用于开发Java Web应用程序的开源框架。它提供了一个MVC(Model-View-Controller)的架构,帮助开发者更好地组织和管理web应用程序的代码。

1. MVC架构:Struts采用MVC架构模式来分离应用程序的不同层次。Model层负责处理数据逻辑,View层负责渲染用户界面,而Controller层负责处理用户请求并调度相应的业务逻辑。

2. 核心组件:Struts的核心组件包括Action、Interceptor、Validator等。Action负责接收并处理用户请求,Interceptor用于实现请求处理拦截和前后处理,Validator用于验证用户输入。

3. 配置文件:Struts使用XML文件来配置应用程序的行为。其中,struts.xml文件是主要配置文件,定义了Action映射、拦截器栈、全局结果等。通过配置文件,开发者可以灵活地管理和配置应用程序的行为。

4. 表单处理:Struts提供了方便的表单处理机制。开发者可以通过在Action中定义表单类,自动将用户请求的参数绑定到表单对象中。同时,还可以使用Struts提供的表单标签库来生成表单、处理表单验证等。

5. 标签库支持:Struts提供了丰富的标签库,用于生成HTML元素和控件。这些标签库简化了开发者对用户界面的开发,提高了开发的效率。开发者可以使用这些标签库来生成表单、按钮、下拉框等用户界面元素。

6. 国际化支持:Struts提供了强大的国际化支持,使得开发者能够轻松地实现应用程序的多语言支持。通过使用资源束和国际化相关的标签,开发者可以方便地在应用程序中实现多语言切换。

总的来说,Struts是一个功能丰富且成熟的Java Web开发框架,它提供了许多有用的特性和工具,帮助开发者快速构建可靠、可维护的Web应用程序。无论是初学者还是有经验的开发者,使用Struts都能够更加高效地开发出优秀的Web应用程序。

二、Struts 与 springmvc

Struts和Spring MVC都是用于开发Java Web应用程序的框架,它们都基于MVC架构模式,但在一些方面有一些不同之处。下面我们来比较一下Struts和Spring MVC

1. 学习曲线:相对而言,Struts具有较陡峭的学习曲线。由于它的配置文件较多,需要了解和掌握更多的概念和规则。而Spring MVC则相对简单、灵活,易于学习和使用。

2. 配置方式:Struts使用XML配置(比如struts.xml)来定义Action映射、拦截器栈等,而Spring MVC使用注解(比如@Controller、@RequestMapping)和Java配置来实现,减少了对XML配置文件的依赖。

3. 轻量级与重量级:相对而言,Spring MVC是更轻量级的框架,它的设计更灵活,可以根据需求定制。而Struts则是一个相对重量级的框架,拥有更多的特性和功能,但在某些情况下可能会显得复杂。

4. 集成能力:Spring MVC与Spring框架天然集成,可以很好地利用Spring提供的依赖注入和面向切面编程等功能。而在Struts中,如果需要使用Spring的依赖注入等特性,需要通过一些技术手段来实现集成。

5. 社区和生态系统:Spring MVC拥有更大规模的社区和更丰富的生态系统,有更多的文档、教程和第三方库可供参考和使用。Struts虽然曾经非常流行,但相对来说其社区规模和生态系统相对较小。


其实两个框架各有优势,选择哪个框架取决于具体需求和个人偏好。
如果你更喜欢轻量级、灵活的框架,对Spring框架有一定了解,可以选择Spring MVC。
如果你需要一个功能丰富、成熟的框架,对XML配置和Struts的规则和设定感到舒适,可以选择Struts。
不管你选择哪个框架,都可以使用它们来构建高效、可维护的Java Web应用程序。

三、Struts的开发的基本步骤

好的,以下是使用Struts进行开发的简要代码示例,展示了开发步骤的具体实现:

  1. 确定需求:
// 根据应用程序需求,明确功能和用户交互方式的具体实现细节
  1. 搭建环境:
// 确保你的开发环境已经配置好JDK、Tomcat和开发工具(如Eclipse)
  1. 创建项目:
// 创建一个新的Java Web工程,根据你的开发工具和项目需求进行具体操作
  1. 配置框架:
  • 在项目的lib目录中添加Struts框架的相关依赖库。
  • 在web.xml文件中添加Struts的过滤器和监听器配置。

示例代码如下:

<!-- 配置Struts2过滤器 -->
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 配置Struts2监听器 -->
<listener>
    <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class>
</listener>
  1. 创建Action类:
// 创建一个Action类,用于处理来自用户的请求

// 导入Struts2相关的类
import com.opensymphony.xwork2.ActionSupport;

// 创建一个继承自ActionSupport的Action类
public class MyAction extends ActionSupport {
    // 添加所需的属性和方法,用于处理请求和展示数据
    // ...
}

根据具体的需求,你还可以继续编写业务逻辑和视图层的代码,以完成一个完整的Struts应用程序。

四、Struts的处理流程

Struts框架的处理流程可以概括为以下几个步骤:
在这里插入图片描述

1. 请求拦截:
当用户在浏览器中发起一个请求时,请求会被应用服务器拦截。Struts使用web.xml中配置的过滤器来接收请求。

2. Action类的调度:
拦截器将请求转发给相应的Action类。在Struts框架中,Action类是处理请求的核心组件。根据配置文件中的映射关系,框架会找到匹配的Action类来处理请求。

3. Action类处理请求:
Action类是应用程序中的控制器部分,它负责处理请求并生成响应。在Action类中,开发人员可以根据业务逻辑处理请求参数、调用服务层方法、设置返回结果等。

4. 拦截器的应用:
在处理请求的过程中,Struts框架通过配置的拦截器来执行一系列定义好的操作。拦截器可以在请求到达Action类之前或之后执行特定的逻辑,例如身份验证、日志记录、异常处理等。拦截器的执行顺序可以通过配置文件进行控制。

5. 视图解析与渲染:
在Action类中,开发人员根据业务逻辑设置结果视图的名称。Struts框架根据配置文件中的视图映射,将结果视图解析成实际的页面,并将其进行渲染。渲染后的页面会作为响应返回给浏览器。

6. 响应返回到浏览器:
最后,生成的响应会被Struts框架发送回浏览器展示给用户。用户可以在浏览器中看到请求的结果。

这个流程保证了代码的模块化和可维护性,使开发人员能够更加专注于业务逻辑的实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webstorm2022 TS1109: Expression expected.

在使用webstorm2022&#xff0c;加入ESLint&#xff08;已禁用&#xff09;的情况下&#xff0c;编写vue3的typescript代码时&#xff0c;报错&#xff1a; TS1109: Expression expected. 原因&#xff1a;2022版本不支持volar&#xff0c;需升级到2023版本。 官方描述为&am…

二叉树题目:单值二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;单值二叉树 出处&#xff1a;965. 单值二叉树 难度 3 级 题目描述 要求 如果二叉树每个结点都具有相同的值&am…

Matlab 校正镜头畸变图像

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 生活中一些针孔相机会给图像带来严重的失真,这主要是由于硬件和环境的因素所示导致的,其中主要的两种畸变是径向畸变和切向畸变。 径向畸变会导致直线看起来弯曲,即点距离图像中心越远,径向畸变就越大。例如,下…

hyperf 学习 一、搭建

docker中ubuntu容器php语言hyperf框架开发环境搭建。 docker地址&#xff1a;Docker tag:20.04 docker pull ubuntu:20.04docker run --name hyperf -v D:\workspace\docker\hyperf:/wj/hyperf -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh ubuntu:20.04步骤…

聊聊ChatGPT是如何组织对话的

为什么要组织对话&#xff1f; 总所周知&#xff0c;ChatGPT的训练大致可分为下图中展示的几个阶段&#xff0c;其中&#xff0c;在Pretraining阶段&#xff0c;模型的训练数据是纯文本&#xff0c;目标是根据上文预测下一个token&#xff0c;而在后面的几个阶段中&#xff0c…

16年38款,iPhone中的哪一款有最深的印象?

6月29日是一个重要的日子&#xff0c;对于智能手机领域来说尤其如此。在16年前的今天&#xff0c;乔布斯发布了第一代iPhone手机&#xff0c;这个举动彻底改变了世界&#xff0c;智能手机从此成为我们日常生活中不可或缺的一部分。 我特意调查了一下&#xff0c;苹果在过去的16…

RocketMQ on openEuler 提供高性能消息队列的稳定性解决方案

RocketMQ on openEuler&#xff0c;是一种将 RocketMQ 消息中间件通过容器化的方式部署在 openEuler 操作系统上运行&#xff0c;借助 openEuler 系统对于 OS 缓存回收效率增强的内核特性&#xff0c;提升消息中间件在面向超大规模高并发、高吞吐量、低延迟场景下稳定性和可靠性…

git常用命令之远程仓库别名

12. 远程仓库别名 12.1 查看远程仓库名称 命令作用git remote查看关联的远程分支$ git remoteorigingit remote -v查看本地仓库关联的远程仓库信息$ git remote -vorigin gitgithub.com:kaku/reading-note-tutorails.git (fetch)origin gitgithub.com:kaku/reading-note-tuto…

Telnet实验、AAA认证实验、 配置文件备份和还原实验

Telnet实验 拓扑 需求 R1远程R2 配置步骤 1&#xff09;配置接口的IP地址 2&#xff09;在R2设备配置telnet远程 3&#xff09;使用R1远程R2 配置命令 第一步&#xff1a;配置R1的IP地址 <Huawei>un t m //关闭消息 <Huawei>sys //进入系统视图 [Huaw…

量化知识点

1&#xff1a;模型量化是将浮点数替换成整数&#xff0c;并进行存储和计算的方法。 原始float数据量化后int数据量化公式 2&#xff1a;非饱和方式量化、饱和方式量化&#xff0c;对称量化、非对称量化&#xff0c;区别与关系是&#xff1f; 这个是tensorRT的量化方案&#xf…

React hooks文档笔记(三) 状态

状态 一、如何设计组件状态的步骤二、状态构造原则1. 组相关状态2. 避免矛盾/互斥状态3. 避免多余状态4. 不要把props放进state&#xff0c;除非你特别想要阻止更新 三、状态保存/重置1. 相同位置的相同组件保留状态2. 同一位置不同元素reset状态 一、如何设计组件状态的步骤 …

如何使用ChatGPT的API(一)大语言模型如何工作

这篇文章介绍大语言模型的一些概念&#xff0c;包括它是如何工作的&#xff0c;什么是Token等等。 大语言模型如何工作 我们从一个示例开始说起。 当我们写一个提示“我喜欢吃”&#xff0c;然后要求一个大型语言模型根据这个提示填写后面可能的内容。它可能会说&#xff0c…

《PyTorch深度学习实践》第三讲 梯度下降

b站刘二大人《PyTorch深度学习实践》课程第三讲梯度下降笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p3&vd_sourceb17f113d28933824d753a0915d5e3a90 上一讲例子中&#xff0c;初始权重 w w w是随机给的&#xff0c;然后计算每个样本 x x x的预测…

JavaWeb 笔记-1

JavaWeb 笔记-1 初始JavaWeb什么是JavaWeb 一、JDBC1.1、JDBC简介1.2、API详解-DriverManager1.3、API详解-Connection1.4、API详解-Statement1.5、API详解-ResultSet1.6、API详解-PreparedStatement1.6.1、API详解-PreparedStatement-SQL注入演示1.6.2、API详解-PreparedState…

RK3568平台开发系列讲解(外设篇)RFID 模块调试

🚀返回专栏总目录 文章目录 一、RFID 工作原理二、硬件连接三、驱动程序四、设备树五、测试程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 RFID 模块调试。 一、RFID 工作原理 射频识别技术也就是 RFID,英文名为 Radio Frequency Identificati…

玻璃活动隔断安装需要注意什么

随着社会的发展和人们对空间利用的要求不断提高&#xff0c;玻璃活动隔断逐渐成为办公室和商业空间中常见的装修选择。玻璃活动隔断不仅可以有效分割空间&#xff0c;提供私密性&#xff0c;还能保持充足的采光和视觉效果。然而&#xff0c;为了确保玻璃活动隔断的安装质量和使…

PSP - MetaPredict 预测蛋白质序列的内源性无序区域 (Intrinsically Disordered Regions)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131461900 MetaPredict 算法简介&#xff1a; 内源性无序区域&#xff08;IDRs&#xff09;在所有生命领域中都普遍存在&#xff0c;并…

【GPT】如何拥有离线版本的GPT以及部署过程中的问题

【背景】 目前很多公司由于数据安全的问题&#xff0c;不能使用OpenAI的GPT&#xff0c;同时也没有必要非得使用如此泛用化的GPT。很多公司因此有训练自己的离线GPT的需求&#xff0c;这样的GPT只需要具备专业知识即可。 要使这个成为可能&#xff0c;首先就需要能够让GPT的Mo…

InstructGPT学习

GPT发展历程 在回答这个问题之前&#xff0c;首先要搞清楚ChatGPT的发展历程。 GPT-1用的是无监督预训练有监督微调。GPT-2用的是纯无监督预训练。GPT-3沿用了GPT-2的纯无监督预训练&#xff0c;但是数据大了好几个量级。InstructGPT在GPT-3上用强化学习做微调&#xff0c;内…

企业邮箱如何将一个用户设置到多个部门/群组

1、使用管理员账号postmaster登录企业邮局&#xff0c;点击“邮局管理”。 2、点击“组织与成员”。 3、勾选需要设置的用户&#xff0c;点击“设置所属部门/群”。&#xff08;例如&#xff1a;我们需要将所属销售分公司的高阳&#xff0c;加入到以下四个分销部中&#xff0c;…