Struts 1.X工作原理

Struts1.x登录功能实现示例 Struts1.x是一个基于MVC(Model-View-Controller)设计模式的开源Web应用框架,旨在简化企业级Java Web应用的开发。作为早期流行的框架之一,Struts1.x通过分离业务逻辑、用户界面和数据控制层,使得开发者能够更专注于业务逻辑的实现。在web.xml中定义Struts的ActionServlet,这是整个Struts框架的入口点。通过初始化参数,可以配置Struts的控制参数,如配置文件的路径。 阅读详情

Struts 是Apache所开发的一个web应用框架,用来简化web开发的中常用、重复的工作。

原理图:

在以前的的开发中,浏览器的请求会找一个Servlet处理,然后返回浏览器,而在struts中所有的请求都会找一个叫做ActionServlet处理,它会根据配置文件配的action来将请求交给指定的Action来处理。

 

配置Struts:

1.引入Struts的jar包

2.在web工程目录下新建struts-config.xml(它用来配置struts如何工作)

3.配置web.xml中Struts的ActionServlet处理请求

引入jar包和配置文件后工程结构目录应为:

web.xml 配置如下节点:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	<display-name>Struts</display-name>
	<servlet>
	<!-- 这个ActionServlet是Struts用来处理所有请求并根据配置文件调用指定的Action,没有它Struts无从谈起 -->
	<servlet-name>ActionServlet</servlet-name>
	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	<!-- ActionServet在init方法中读取config配置项,来决定如何处理这个请求。 -->
	<init-param>
	<param-name>config</param-name>
	<param-value>/WEB-INF/struts-config.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
	</servlet>
	<!--  处理所有*.st的请求 -->
	<servlet-mapping>
	<servlet-name>ActionServlet</servlet-name>
	<url-pattern>*.st</url-pattern>
	</servlet-mapping>
</web-app>

配置struts-config.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>

</struts-config>

这里的配置文件是空的,struts所有的配置都在<struts-config></struts-config>节点中配置

 

从上面的Struts工作原理图可以看出,请求先被ActionServlet处理,然后转到指定的Action中进行业务逻辑的处理(这个Action可以理解为MVC模式里的控制器),处理完毕后返回ActionServlet,再由ActionServlet返回浏览器。

第一个案例:

1.新建一个处理请求的Action并覆盖父类的execute方法,它继承至Action类

2.配置struts-config.xml文件,指定某个请求由这个Action处理.

 

新建一个用于处理请求的Action



 

package struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class IndexAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		request.setAttribute("msg", "IndexAction 处理.....");
		return mapping.findForward("index");//这个index在struts-config.xml文件中action节点的子节点中配置,表示跳转路径。
	}

}


在struts-config.xml中配置action

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<action-mappings>
<action path="/Index" type="struts.action.IndexAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
</action-mappings>
</struts-config>

这里的action-mapping节点中的每一个action节点表示一个action

action节点的属性含义

path:它表示这个action处理它指定的路径

type:action处理类的路径

action节点中的forward节点表示,跳转路径。

到这里就配置完毕了,启动tomcat,访问:http://localhost:8080/DemoStruts/Index.st

就会看到

是不是挺简单,不过strtus只能做这点事情,用它干嘛呢?

它可以简化web开发中的一些重复、繁杂的劳动,仅仅是简化而已,而不是替代,它能做得事情用传统的jsp技术也能做。

 

简化一  表单注册,它自动封装表单数据到一个bean

1.新建一个bean 继承至actionfrom

package struts.bean;

import org.apache.struts.action.ActionForm;

public class RegisterUserBean extends ActionForm {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

2.新建一个Action用于处理这个请求

package struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import struts.bean.RegisterUserBean;

public class RegisterAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//从ActionForm拿到封装后表单数据
		RegisterUserBean userbean=(RegisterUserBean) form;
		System.out.println(userbean.getUsername());
		request.setAttribute("msg", userbean.getUsername());
		return mapping.findForward("index");
	}

}


3.配置struts-config.xml 配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
<form-beans>
<form-bean name="registeruser" type="struts.bean.RegisterUserBean"></form-bean>
</form-beans>
<action-mappings>
<action path="/Index" type="struts.action.IndexAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
<action path="/RegisterUI" type="struts.action.RegisterUIAction">
<forward name="registerui" path="/WEB-INF/jsp/RegisterUser.jsp"></forward>
</action>
<action path="/RegisterAction" name="registeruser" type="struts.action.RegisterAction">
<forward name="index" path="/WEB-INF/jsp/Index.jsp"></forward>
</action>
</action-mappings>
</struts-config>


这样就配置OK了.

 

Struts 转发请求:


 

 

 浏览器发起一个请求,首先进入ActionServlet,它根据配置文件对这个请求做一系列的封装和处理(可以理解为预处理)后调用处理这个请求的Action类的Execute方法,Action处理完毕后返回一个ActionForward,ActionSerlvet根据返回的ActionServlet决定如何跳转。

 

 

STM32F407 FreeRTOS+LVGL移植实战:从驱动适配到性能优化 本文详细介绍了在STM32F407开发板上移植FreeRTOS和LVGL的实战经验,涵盖硬件准备、驱动适配、性能优化等关键步骤。通过TFTLCD屏幕驱动优化、DMA加速和任务优先级调整,显著提升界面流畅度,为嵌入式GUI开发提供实用解决方案。 阅读详情

相关推荐

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7447

Struts1.x教程(一) Struts概述及其工作原理

Struts是Apache软件基金会(ASF)赞助的一个开源项目,它是一个基于MVC模式的Web层框架。 架构模式中,最基本的也是使用最多的就是分层。然而,分层架构中最难的问题是决定建立哪些层次以及每一层的职责是什么。MVC模式正是一种三层的软件架构模式,它将系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。并确定了各层的职责: 模

boyazuo的专栏 9698

Android存储空间不足下,APP出现奔溃等情况

版权声明:本文为博主原创文章,未经博主允许不得转载。 1. 问题起因     实时录制视频,使用getExternalCacheDir()函数返回的路径作为文件缓存区 2. 问题产生     系统在空间不足的情况下第一清除getExternalCacheDir和getCache文件下的缓存,导致正在录制的视频出现Error。 3. 解决方案     第一

OverseasAndroid的博客 4160

Struts1.x工作原理

Struts1.x是MVC的最基础实现,那么在整个Struts1.x的开发过程之中,请求的处理流程是最需要关注的, 同时也是我们可以发现程序问题的所在。 整个Struts之中时将一个Servlet的控制变为了两个部分:ActionForm,Action. 它这样拆分的目的是为了让验证与具体的控制相分离。 分离的目的是为了让验证与核心操作分开,但是同时也产生一个新的问题,如果在项目之中, 每一个...

抛弃幻想,准备斗争 755

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2764

Rijndael密码算法

一 什么是Rijndael Rijndael是由比利时密码学家设计的分组密码算法,于2000年被选为新一代的标准密码算法——AES。今后会有越来越多的密码软件支持这种算法。 Rijndael的分组长度和密钥长度可以分别以32比特为单位在128比特和256比特的范围内进行选择。不过在AES的规格中,分组长度固定为128比特,密钥长度只有128、192和256比特三种。 二 Rijndael的加...

实践求真知 1万+

Struts1.x工作原理概述

一、Struts 的体系结构   二、Struts 的流程 三、具体原理 1、  Struts的核心是ActionServlet,它本质上就是一个Servlet,在Web.xml中配置ActionServlet为自动启动,指明Struts的配置文件所在位置,并指明Struts中工作条件 servlet>        servlet-name>strut

honghailiang的专栏 2029

【数据分析生命周期全揭秘】从零开始打造你的数据科学项目 | 最全指南

在当今数据驱动的世界中,数据科学正在颠覆传统行业,成为企业决策和价值创造的重要引擎。然而,如何科学、系统地开展一个数据分析项目?这是很多人关心的核心问题。本篇文章基于经典数据分析课程内容,深入解读数据分析生命周期的每个阶段,让你快速掌握从“发现问题”到“落地应用”的完整流程。如果你正在学习或准备从事数据分析领域,这篇文章一定会对你大有帮助!数据分析生命周期的六大阶段数据分析生命周期的六个阶段相辅相成,每个阶段都至关重要:发现问题:明确需求,提出假设。数据准备:清洗、转换和可视化数据。

AI手套的博客 1739

Struts1.X运行原理剖析

Struts是一个开源的web框架,框架提高了程序的规范,同时也约束了程序员的自由。 为什么会有struts?? 因为我们对mvc理解的不同,可能造成不同公司写程序的时候,规范不统一,这样不利于程序的维护和扩展,所以有必要用一个统一的规范来开发项目(struts)。 Struts 的好处: 程序更加规范化,开发效率提高了,可读性增加了,程序的可维护性增加了。   Struts1.X运行原

ミ安之偌素 1417

在 ABAP Cloud 中玩转 CL_ABAP_PARALLEL 并行处理:从原理到实战

ABAP并行处理框架CL_ABAP_PARALLEL解析 本文系统介绍了SAP ABAP环境中实现并行处理的CL_ABAP_PARALLEL框架。该框架通过封装异步RFC和对话进程,为开发者提供了面向对象的API,显著提升大批量数据处理的效率。 文章首先分析了ABAP环境需要并行处理的原因:传统的串行处理在面对百万级数据时效率低下。然后详细介绍了CL_ABAP_PARALLEL的设计思路,它是一个"小型线程池"式的同步并行框架,适用于批量计算场景。此外,文章重点讲解了控制并行任务的关键参

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 339

项目实战第四十七讲:易宝支付对接详解(保姆级教程)

本文是项目实战第四十七讲,易宝支付对接详解。1、xxl_job 接入fix;2、支付接口,将thirdOrderNo赋初始值,并将数据库中third_Order_No设置为非空;3、性能提效:将深拷贝改为字符赋值,提升程序性能;先不改动。

Jet_qi的博客 2680

Struts 1.x 的工作原理

1. 读取配置。初始化 ModuleConfig 对象,对web.xml中配置成自动启动的 ActionServlet ,读取 struts-config.xml 的配置信息,为不同的struts模块化初始化相应的ModuleConfig 对象 2. 发送请求。客户端提交表单,调用URL请求的数据,通过HTTP协议发送给Web服务器。 3. 填充form(实例化,复位,填充数据,校验,保存) ...

weixin_30832983的博客 142

水很深的深度学习(四): 卷积神经网络CNN

深度学习-CNN,卷积神经网络的概念 上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 3622

我理解的Struts 1.x工作原理

ActionServlet(org.apache.struts.action.ActionServlet) 拦截所有对*.do的请求(通过web.xml配置),并调用RequestProcessor对请求进行处理和转发。ActionServlet继承于HttpServlet(javax.servlet.http.HttpServlet),而HttpServlet是由容器提供的。大体过程如下:1、A

wts的专栏 1156

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Struts1.x工作原理解析

1.Struts 的体系结构   2.Struts 的流程    1.读取配置(初始化ModuleConfig对象)Struts框架总控制器(ActionServlet)是一个Servlet,在web.xml中配置成自动启动的Servlet。读取配置文件(servlet-config.xml)的配置信息,为不同的Struts模块初始化相应的ModuleConfig对象:ActionConf...

hailingling的专栏 202

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

传智播客 struts1.x 工作原理与流程

     预习视频到现在,发现赖老师对struts的讲解越来越深入,虽然是原理性的东西,但是在例子的配合以及形象的比喻下,理解并不会觉得困难。接下来的一段视频就是总结struts的工作原理和开发流程。赖老师将struts的工作流程总结为八步,如下:      1.初始化,读取配置(初始化ModuleConfig对象):ActionServlet是struts框架的总控制器,同时它也是一个Ser

JAVA专栏 1039

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Struts工作原理

一、Struts 1.x的工作原理 struts是基于前端控制器,在Jsp模式二的基础上实现的一个MVC的表现层。 MVC的工作原理,如下图1所示: Struts的体系结构与工作原理如下图2所示: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的 Servlet,在启动时总控制器会读取配置文件(struts

u012178240的专栏 487

struts 1.x自学 -- day01

struts1的基本概念、优点、和不同版本的关系

shenlong359的博客 237

struts1.x & struts2对比学习及源码分析

Struts1.x综述 一、业务逻辑 应包含在POJO类或EJB中,完全独立于Action。这样做的优点就是不依赖与框架本身,更好复用。 原则:类和类的方法应该有自己独立的职责,能够完成所建领域的特定任务(如ActionForm) 二、处理Exception 原则:1)在异常离开业务层之前捕获,处理,记录业务层抛出的所有异常;       2)在业务层捕获一个异常时,作为一个通用的异常类型重...

hanwesley的专栏 126

Struts 1.x 的学习

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34015566的博客 77

我的第一个struts程序(Struts1.X实现MVC框架)

 我的第一个struts程序(Struts1.X实现MVC框架)我对struts的理解是从看了陈宝峰老师的视频到我的第一个struts程序的产生之后得来的,struts是基于MVC模式的一种框架,struct分为两种,struct1.x和struct2.x。下面是struts的框架图和struts的原理,本人觉得这个图能够很好的表明struts的原理。一:struts原理(stru

1234564654的专栏 1408

(三)Struts1.x高级应用

一、国际化1、什么是国际化按照我个人的理解,国际化就是根据客户端的语言环境显示不同的语言。也就是服务器根据客户端提交过来的语言环境返回不同的内容(客户端语言环境会在请求头“Accept-Language”中提交过来)。2、Strut1.x国际化的使用(1)、提供不同的资源包资源包的命名格式:包名_语言简写_国家简写.properties(如:languang_zh_CN.properties),资源

lang_programmer的博客 363

Struts1.X学习笔记

    Struts1.X学习笔记 8月28日 2009    [在此处键入文档的摘要。摘要通常是对文档内容的简短总结。在此处键入文档的摘要。摘要通常是对文档内容的简短总结。] MVC框架以及标签的使用       Structs1.x框架工作流程 方法介绍 Action是Struct父接口,其中里面的方法是public ActionForward execute(Ac...

xuanchy的博客 233
上一篇: Java 内省技术(Introspector)
下一篇: Java WebService复习之WSDL
IT回忆录
博客等级 码龄16年 42粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值