ActionServlet深入探讨--2

深入理解Java Web MVC框架:Struts与Spring MVC的工作原理及对比 Struts 1 是一个基于 MVC 设计模式的 Web 应用框架,它是早期 Java EE 开发者中最受欢迎的框架之一。Struts1 的主要目标是将业务逻辑与界面表现层分离,从而简化企业级应用的开发。Struts1 的工作流程可以简单分为接收请求、处理业务逻辑、返回响应三个步骤。拦截器是Struts2中非常重要的一个概念,它为处理请求提供了一个可插拔的机制。自定义拦截器的步骤如下:创建拦截器类并实现接口。在intercept方法中编写拦截逻辑。在struts.xml。 阅读详情

init()


在它的init()方法中,ActionServlet依次调用如下protected的方法完成初始化:
  • initActions() -     大家可能还曾有这个疑问:Struts为什么可以找到一个请求URI对应的action类呢?答案就在这儿,ActionServlet有一个actions属性,类型为org.apache.struts.util.FastHashMap,用于存储以类的全名为key的已实例化的Action类。在init()时首先调用的就是initActions()方法,在这个方法中只是简单的清除map中的所有的名值对,

            synchronized (actions) {
                actions.setFast(false);
                actions.clear();
                actions.setFast(true);
            }

    首先把actions设为slow模式,这时对FastHashMap的访问是线程同步的,然后清除actions中的所有的已存在的名/值对,最后再把actions的模式设为fast。由于FastHashMap是struts在java.util.HashMap的基础上的一个扩展类,是为了适应多线程、并且对HashMap的访问大部分是只读的特殊环境的需要。大家知道java.util.HashMap是非线程安全的,所以HashMap一般适用于单线程环境下。org.apache.struts.FastHashMap就是继承于java.util.HashMap,在其中添加多线程的支持产生的。在fast模式下的工作方式是这样的:读取是非线程同步的;写入时首先克隆当前map,然后在这个克隆上做写入操做,完成后用这个修改后的克隆版本替换原来的map。那么在什么时候会把Actions类添加到这个map中呢?我们已经提到了struts是动态的生成Action类的实例的,在每次ActionServlet接收到一个GET或POST的HTTP请求时,会在这个map中查找对应的Action类的实例,如果不存在,那么就实例化一个,并放入map中。可见这个actions属性起到了对Action类实例的缓存的作用。
  • initInternal() -     初始化ActionServlet内部使用的资源包MessageResources,使用MessageResources.getMessageResources(internalName)得到    internalName为"org.apache.struts.action.ActionResources"对应的ActionResources.properties文件。这个资源包主要用于ActionServlet处理过程中的用到的提示信息,这儿不展开讨论。
  • initDebug() -     从web.xml中读取本应用的debug级别参数getServletConfig().getInitParameter("debug"),然后赋给debug属性。
  • initApplication()-    初始化应用资源包,并放置入ServletContext中。

            String factory =getServletConfig().getInitParameter(“factory”);    
            String oldFacory = MessageResourcesFactory.getFactoryClass();
            if (factory !=null)
                    MessageResourcesFactory.setFactoryClass(factory);
            String value = getServletConfig().getInitParameter("application");
            MessageResourcesFactory factoryObject =
                    MessageResourcesFactory.createFactory();
            application = factoryObject.createResources(value);
            MessageResourcesFactory.setFactory(oldFactory); 
            getServletContext().setAttribute(Action.MESSAGES_KEY, application);

    说明:文中引用的代码片断可能会省略了一些例外检查等非主线的内容,敬请注意。

    首先从配置文件中读取factory参数,如果这个参数不为空,那么就在MessageResourcesFactory中使用这个指定的Factory类;否则,使用默认的工厂类org.apche.struts.util.PropertyMessageResourceFactory。然后调用MessageResourcesFactory的静态createFactory()方法,生成一个具体的MessageResourceFactory对象(注意:MessageResourcesFactory是抽象类)。这样就可以调用这个具体的MessageResourceFactory的createResource()方法得到配置文件(web.xml)中定义的资源文件了。
    上面的application对象类型为MessageResources。在web.xml中在配置ActionServlet时可以指定一个特定的工厂类。不能直接MessageResourcesFactory的createResources()方法,因为这个方法是abstract的。创建factoryObject的过程如下:
        
            MessageResourceFactory factoryObject=
                    MessageResourcesFactory.createFactory();
            application = factoryObject.createResources(value);

    <li>initMapping() -    为应用初始化mapping信息ActionServlet有一个protected的属性:mapping,封装了一个ActionMapping的对象集合,以便于管理、查找ActionMapping。mappings是org.apache.struts.action.ActionMappings类的实例。主要有两个方法:addMapping(ActionMapping mapping)和findMapping(String path)。ActionMapping也是使用上面提到的org.apache.struts.util.FastHashMap类来存储所有的ActionMapping对象。

            mappings.setServlet(this);
            ……
            // Initialize the name of our ActionFormBean implementation class
            value = getServletConfig().getInitParameter("formBean");
            if (value != null)
                formBeanClass = value;
        
            // Initialize the name of our ActionForward implementation class

            value = getServletConfig().getInitParameter("forward");
            if (value != null)
                    forwardClass = value;

            // Initialize the name of our ActionMapping implementation class

            value = getServletConfig().getInitParameter("mapping");
            if (value != null)
                    mappingClass = value;
北斗导航 | 接收机自主完好性监测与神经网络结合的技术路径、应用场景及研究进展 2] 许承东, 黄国限, 钟贤发, 等. 一种用于神经网络RAIM的故障卫星识别方法[P]. 中国专利: CN117192573A, 2023-12-08.随着6G通信与低轨卫星星座的融合发展,神经网络RAIM有望在2025-2030年实现从辅助技术向主导技术的跨越,成为智能导航系统的核心支撑技术。该架构采用改进型BP神经网络实现非线性映射,在GPS/北斗双模系统中实现98.7%的故障识别率[2]。注:测试条件为GPS/北斗双模系统,12颗可见卫星,含3颗故障卫星的复合场景。 阅读详情

相关推荐

【Web实战】微信小程序逆向

2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。

若有战,召必回 1950

GreenDao的配置使用

greenDAO是一款面向Android的轻便快捷的ORM,可将对象映射到SQLite数据库。 针对Android进行了高度优化,greenDAO提供了出色的性能并消耗了最少的内存。

进击的小怪兽 1104

Linux下Linpack测试GPU和CPU性能

前面的文章已经介绍了如何搭建Linpack环境:https://blog.youkuaiyun.com/liu_feng_zi_/article/details/107429720 接下来说明如何使用 一、编写运行脚本: 新建文件:run_linpack.sh,内容如下: export HPL_DIR =/root/LHC/Linpack/hpl-2.0_FERMI_v15 export MKL_NUM_THREADS=6 export OMP_NUM_THREADS=6 export MKL_DYNAMI.

liu_feng_zi_的专栏 4634

Init 进程详解

Android 内核加载完成后,就会启动init进程,init进程是Android系统用户空间的第一个进程。init程序放在系统根目录下,init进程代码位于源码的目录“system/core/init”下面。下面我们来分析init进程的启动过程1. 分析入口函数进程init入口函数是main,具体实现文件的路径是: system\core\init\init.c 分析main函数:int ma

七月冷雨 1万+

华为BEM战略解码体系完整版(85页PPT)(文末有下载方式)

在部门层面,战略解码的核心是将公司战略逐层分解到部门,确保部门目标能够有效支撑公司战略。战略解码的关键原则包括:对公司战略和业务目标的支撑、指标选取考虑部门责任特色、对公司业务流程的支撑、战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码体系的核心目标是将公司战略逐层分解,确保战略目标能够通过可衡量的。在公司层面,战略解码的第一步是战略澄清,明确公司的使命、愿景、战略目标及。

AI_data_cloud的博客 2404

什么是深度展开网络?如何将迭代算法的每一次迭代展开成深度网络对应的一层?深度展开网络进行端对端训练,其中端对端是什么意思?

在深度学习和机器学习的背景下,“端到端”(End-to-end)训练指的是将输入数据直接映射到最终输出的过程,而不需要任何中间的手动数据预处理或特征工程。- **自然语言处理**:端到端自然语言处理系统可以将自然语言输入直接转化为计算机可理解的语言输出,而不需要对语言进行分解和转化。- **推荐系统**:通过使用深度神经网络,端到端推荐系统可以直接根据用户历史行为预测其未来的兴趣爱好,并推荐相应的产品或服务。4. **直接映射**:从输入到输出的直接映射,中间没有任何拆分或分解的过程。

m0_67897882的博客 5440

LR中Vuser的init、action和end之间的区别

LR运行脚本时,运行顺序为 int->action(XN次)->end;其中action可以运行N次(或一段时间),这在LR中有设置;而int 和 end都只能运行一次 因此实际运用中 一般  int录制的一般是用来做初始化的事情 比如要测试业务某个具体业务操作环节时,可以先把系统用户登录的写在int中。 action 录制的一般是操作的事件,即需要测试业务操作点 end 录制的一般是退出的

myohmy2008的博客 7144

鸢尾花分类预测

鸢尾花数据总用有150个样本,是一个典型的分类数据集,共有3个类别,分别是山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),每个样本的特征有4列sepal_length:萼片长度sepal_width:萼片宽度petal_length:花瓣长度petal_width:花瓣宽度这里我们定义了随机森林模型作为实例,来进行模型训练,之后我们会对其使用网格搜索找到最优的参数。

优快云 精品推荐 2191

Struts 学习笔记2 -ActionServlet深入探讨

java.lang.Object  |  +--javax.servlet.GenericServlet        |        +--javax.servlet.http.HttpServlet              |              +--org.apache.struts.action.ActionServletStruts提供了一个缺省版本的ActionServle

上善若水.class 2万+

深入大模型-19-Windows10中安装OpenClaw-CN配置接入智谱免费大模型

OpenClaw CN (中国社区版) 是 OpenClaw 的本地化维护版本,针对国内网络环境进行了深度优化,源码级原生支持 DeepSeek/Qwen 等国产大模型,致力于让中国开发者拥有最顺滑的 Agent 开发体验。

qq_20466211的博客 771

C# 工业上位机集成 YOLOv8 全实战:模型转换→相机取流→PLC 联动落地部署

// 检测结果实体类,工业场景扩展置信度、坐标、类别字段set;set;set;set;/// 模型配置常量,与导出参数保持一致// 置信度阈值// 非极大值抑制阈值public static readonly string[] ClassNames = { "物料", "缺陷", "挡板" };// 自定义类别本文完整实现了YOLO模型转换→C#上位机集成→工业相机对接→PLC联动→现场部署标准化模型转换流程,杜绝C#端兼容性问题;解耦相机取流、推理、UI线程,满足工业高稳定性要求;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 322

Struts学习笔记2-ActionServlet深入探讨

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 571

【高级】系统架构师 | 2026年上半年案例分析真题

标准答案:系统因缺乏足够历史数据(用户行为、物品信息或评分等),难以做出准确推荐的问题。另外两种:物品冷启动(新课程 / 新知识点缺少互动数据)系统冷启动(平台上线初期整体数据稀缺)类型典型表现常见缓解用户冷启动新注册学员无历史问卷/前测、热门兜底、人口统计学特征、知识图谱前置测评物品冷启动新课无人学无人评内容特征推荐、专家标注、探索流量系统冷启动新平台双边都稀缺规则引擎、运营冷启、知识图谱强约束路径本题已点明「用户冷启动」,另外两种按推荐系统经典三分法作答即可。

大胆尝试,小心实践 360

Struts 学习笔记2 -ActionServlet深入探讨(引用)

java.lang.Object  |  +--javax.servlet.GenericServlet        |        +--javax.servlet.http.HttpServlet              |              +--org.apache.struts.action.ActionServletStruts提供了一个缺省版本的ActionServle

蒙古狼 1331

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ActionServlet 的生命周期,和线程安全性

ActionServlet 的生命周期,和线程安全性 (2009-12-03 20:35:41) 转载 &lt;script&gt;&lt;/script&gt;标签: it   &lt;!-- 正文开始 --&gt; struts的Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因. 不是线程安全的。只要...

217

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

浅谈struts1与struts2

我想大家对于struts框架是绝对不会陌生的,最近刚刚学习了struts框架,这里我想谈一下自己对该框架的理解。首先,我要讲到的是struts1框架,该框架是对mvc模式思想的一种应用。为了对该框架的整体思想有个比较好的把握,个人认为必须要理解一下该框架的原理及具体的业务流程。这里,我们来模拟一下struts1的工作现场:首先假设有一个用户在客户端提交了一个请求,然后该请求会提交给stru...

johnzhangzeng的博客 131

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

struts1.2总结

struts1.2的基本流程:1、ActionServlet接收客户端的HTTP请求,使用ActionForm自动接收请求表单信息,然后将请求分发给相应的Action对象2、Action对象调用execute()方法处理请求,此时可以使用先前的ActionForm,也可调用其他的JavaBean实现业务逻辑。然后返回ActionForward对象给ActionServlet3、根据ActionF...

weixin_30242907的博客 121

struts1.2原理

  struts1.2原理:基于mvc的web层 框架没有涉及到数据库。就是一个大型的servlet容器,处理一类请求如请求的结尾都是 “.do/.htm” 把用户请求的内容提交到web.xml中找到处理的ActionServlet处理,然后在Struts-config.xml中找到具体哪个action来处理这个请求。 web.xml中的处理 ...

ajh42238的博客 147

Struts 2之配置文件

Struts 1使用ActionServlet作为分发器,而Struts2使用Filter作为分发器。如果有多个Filter,要把Struts 2的分发器Filter放在最后 web.xml [html] view plaincopyprint? filter>     filter-name>struts2filter-name>      filter-class

逸轩 533

一个计算机专业学生几年的编程经验汇总(四)

Java杂谈(九)--Struts                J2ee的开源框架很多,笔者只能介绍自己熟悉的几个,其他的目前在中国IT行业应用得不是很多。希望大家对新出的框架不要盲目的推崇,首先一定要熟悉它比旧的到底好在哪里,新的理念和特性是什么?然后再决定是否要使用它。                                 这期的主题是Struts,直译过来是支架。Struts

jiandanai54321的专栏 402

深入Struts 1.1

Model 2   Struts是基于Model 2之上的,而Model 2是经典的MVC(模型-视图-控制器)模型的Web应用变体,这个改变主要是由于网络应用的特性--HTTP协议的无状态性引起的。Model 2的目的和MVC一样,也是利用控制器来分离模型和视图,达到一种层间松散耦合的效果,提高系统灵活性、复用性和可维护性。在多数情况下,你可以将Model 2与MVC等同起来。 下图表示一个基于...

架构师的成长之路 89

嵌入式工程师学习路线:从寄存器到RTOS,避开自学弯路

嵌入式开发是软硬件结合的工程领域,C语言和数据结构是底层根基,寄存器操作与时序分析决定硬件交互能力。理解中断、状态机与RTOS调度,是构建可靠系统的关键。实际项目中,逻辑分析仪等调试工具能将黑盒问题转化为可观测信号,而通信协议(如UART、I2C、SPI)的正确配置直接影响数据链路。从GPIO点灯到综合项目训练,从外部晶振失效导致的串口乱码排查到代码分层设计,工程习惯决定技术天花板。本文结合真实案例,梳理了一套从基础到实战的嵌入式工程师培养路径,帮助新手避开典型弯路,系统建立从寄存器到系统的完整认知。

weixin_33851177的博客 335

框架类面试题总结

一.谈谈你对struts2的理解

方圆几里的博客 490

java基础知识记录--流行框架与新技术(摘自张孝祥整理java面试题)

1. 谈谈你对struts的理解   (1) struts是一个按MVC设计模式的Web层框架,其实它就是一个大大的servlet,这个servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个servlet处理,这个servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。      一个扩展知识点:struts的配置文件可以有多个,可以

adolinzi的专栏 2475
上一篇: ActionServlet深入探讨--3
下一篇: ActionServlet深入探讨--1
csdnloading
博客等级 码龄11年 0粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值