ActionServlet深入探讨--3

【用unity实现100个游戏之18】从零开始制作一个类CSGO/CS2、CF第一人称FPS射击游戏——基础篇1(附项目源码) 生存和射击游戏一直是我的最爱,说起3D最普遍的应该就是射击系统了,你可以在任何情况下加入射击功能,所以我写下了这篇FPS开发记录。希望对你有帮助。在这个项目中,你将学习如何设计和实现射击系统、武器系统、玩家控制、场景设计等方面的内容。通过这个项目,你将深入了解游戏开发中的许多核心概念和技术,并且在实践中不断提升自己。本项目将带你从零开始逐步实现一个完整的第一人称射击游戏,并且会逐步引入一些高级功能,如特效、声音等。 阅读详情
在initMapping()中,首先链接mappings对象到本servlet实例。其实这句话的作用很简单,在ActionMappings中会有一个ActionServlet类型的属性,这个属性就界定了这个ActionMappings对象所属的ActionServlet。Struts的实现比较灵活,其中的ActionFormBean、ActionForward、ActionMapping类你完全可以使用自己实现的子类,来定制Struts的工作方式。上面的代码就从配置文件(web.xml)中读取formBean、forward、mapping参数,这些参数就是你定制的ActionFormBean、ActionForward、ActionMapping类名。

        // Initialize the context-relative path to our configuration resources
        value = getServletConfig().getInitParameter("config");
        if (value != null)
                config = value;
                // Acquire an input stream to our configuration resource

        InputStream input = getServletContext().getResourceAsStream(config);
        Digester digester = null;
                digester = initDigester(detail);
        try {
                formBeans.setFast(false);
                forwards.setFast(false);
                mappings.setFast(false);
                digester.parse(input);
                mappings.setFast(true);
                forwards.setFast(true);
                formBeans.setFast(true);
        } catch (SAXException e) {
                throw new ServletException
        (internal.getMessage("configParse", config), e);
        } finally {
                input.close();
        }

从web.xml读取Struts的配置文件的位置。使用org.apache.struts.digester.Digester解析config参数标示的配置文件,通常为“/WEB-INF/struts-config.xml”,解析出所有的data-source、form-bean、action-mapping、forward。从上面的程序片断看到,Digester仅仅调用了一个parse()方法,那么,Digester是怎样把解析struts-config.xml文件并把解析的结果form-bean等信息存储到属性变量formBeans等中的呢?你可以注意到在调用digester.parse(InputStream)之前,首先调用了initDigester()方法:

        Digester digester = new Digester();
        digester.push(this);
        digester.addObjectCreate("struts-config/action-mappings/action",
                                 mappingClass, "className");
        digester.addSetProperties("struts-config/action-mappings/action");
        digester.addSetNext("struts-config/action-mappings/action",
                            "addMapping",
                            "org.apache.struts.action.ActionMapping");

        digester.addSetProperty
            ("struts-config/action-mappings/action/set-property",
             "property", "value");

在这个方法中首先生成一个Digester对象,然后设置解析的规则和回调,如果你对XML、SAX不是很熟,这儿不必纠缠太深。要注意的是addSetNext()方法,设置了每一个要解析元素的Set Next回调方法,而这个方法就是由digester解析器的父提供的。上面的片断中的“addMapping”就是ActionServlet本身定义的一个方法,将由Digester回调。Digester就是籍此把解析出的每一个FormBean、ActionForward、ActionMapping等存储到属性变量formBeans、forwards、mappings等中的。
  • initUpload() -    初始化有关Upload的一些参数,比如:bufferSize、tempDir。
  • initDataSource() -取出在initMapping()中从配置文件中读取的每一个DataSource,设置LogWriter,如果为GenericDataSource的实例,则打开数据源。然后,把每个dataSource放入Context中。
    dataSource.setLogWriter(scw);
    ((GenericDataSource)dataSource).open();
    getServletContext().setAttribute(key,dataSource);
  • initOther() -        设置其它尚未初始化的的参数(content、locale、nocache),并发布formBeans、forwards、mappings到Context:
    getServletContext().setAttribute(Action.FORM_BEANS_KEY, formBeans);
    getServletContext().setAttribute(Action.FORWARDS_KEY, forwards);
    getServletContext().setAttribute(Action.MAPPINGS_KEY, mappings);
  • initServlet() -    初始化Controller Servlet的Servlet Mapping。这儿也使用了Digester工具,扫描web.xml所有的<web-app/servlet-mapping>,寻找servlet-name与当前Servlet相同的mapping,置入Context。代码如下;

            Digester digester = new Digester();
            digester.push(this);
            digester.setDebug(debug);
            digester.setValidating(validating);
            digester.addCallMethod(“web-app/servlet-mapping”,“addServletMapping”, 2);
            digester.addCallParm(“web-app/servlet-mapping/servlet-name”, 0);
            digester.addCallParm(“web-app/servlet-mapping/url-pattern”, 1);
            InputStream is = getServletContext().getResourceAsStream(“/WEB-INF/web.xml”);
            digester.parse(is); 
            getServletContext().setAttribute(Action.SERVLET_KEY,servletMapping);
一文吃透 SAP HANA Service Broker:原理、架构与落地实践 摘要:SAP HANA Service Broker 作为云原生开发的关键组件,通过标准化流程管理 HDI 容器与服务实例的生命周期,实现数据库资源的自动化配置与安全隔离。它采用服务目录、服务计划和绑定机制,将连接凭据注入应用环境变量,避免硬编码风险。在实际应用中,需根据模块生命周期决定共享或隔离容器,并通过跨容器访问模式实现安全数据共享。典型案例展示了电商平台的多模块协同与SaaS租户隔离场景,验证了其在提升运维效率与安全合规方面的价值。最佳实践强调以生命周期划边界、最小权限原则和HTTPS安全传输,为企 阅读详情

相关推荐

转子动力学 | 临界速度与稳定性分析

本文深入探讨了转子动力学中的核心问题——临界速度与稳定性分析。临界速度是旋转机械发生共振的危险转速,通过模态分析和坎贝尔图可进行预测。文章还剖析了油膜涡动等稳定性问题,并结合ANSYS仿真案例,详细阐述了从建模、分析到设计优化的完整工程实践流程,为旋转机械的可靠设计与安全运行提供关键指导。

weixin_29313239的博客 518

ActionServlet详解

大家都知道,Struts控制器组件负责接受用户请求,更通模型,以及返回给用户合适的视图组件. 控制器将模型层和视图层分开,这样分离,可以为同一个模型开发出不同的视图. 下面时Struts的三大主要组件 ActionServlet组件:充当Struts框架的中央控制器 RequestProcessor组件:充当每个子应用模块的请求处理器 Action组件:真正来处理一项具体的业务...

iteye_13391的博客 261

从时序迷宫到稳定通信:FSMC配置中的时间参数深度解析与实战避坑指南

本文深入解析STM32 FSMC配置中的时间参数,特别是AddressSetupTime和DataSetupTime的实战配置技巧。通过STM32F407连接SRAM的实际案例,提供从理论计算到CubeMX配置的全流程指南,帮助开发者避免常见时序陷阱,确保稳定通信。

nginx7reverse的博客 84

ActionServlet的初始化过程

一:介绍在tomcat的启动过程中,tomcat会读取/WEB-INF/web.xml文件中的配置信息进行一些初始化的工作,而Struts的启动工作就从这里开始. 在web.xml文件中有如下的配置信息:actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xmldebug3

wl_ldy的专栏 3391

微信Dat文件转图片(文末含工具下载)

PC端微信dat图片转换为jpg格式

weixin_40704848的博客 8096

LatentSync:开源数字人唇形同步技术的实战部署与优化指南

本文详细介绍了开源数字人唇形同步工具LatentSync的实战部署与优化全流程。从核心原理(潜在扩散模型与TREPA技术)解析,到手把手完成环境搭建、模型获取及首次推理。文章深入探讨了自定义素材处理、关键参数调优(如guidance_scale),并提供了显存不足、人脸检测失败等常见问题的解决方案与性能优化技巧,旨在帮助用户高效部署并提升生成效果。

9o8p7i6u5y的博客 1009

Struts控制器组件-ActionServlet

    org.apache.struts.action.ActionServlet类是Struts框架的核心控制器组件,所有的用户请求都是先由ActionServlet来处理,然后再由ActionServlet把请求转发给其他组件,Struts框架只允许在一个应用中配置一个ActionServlet类,在应用的生命周期中,仅创建ActionServlet类的一个实例,这个ActionServle

1432

让 ABAP BAPI_COSTACTPLN_POSTPRIMCOST 不再沉默:一套可落地的参数一致性校验与排错打法

SAP BAPI_COSTACTPLN_POSTPRIMCOST 沉默失败分析与解决方案 问题现象 使用 BAPI_COSTACTPLN_POSTPRIMCOST 上传计划数据时,接口执行不报错但数据未写入 COSP 等计划表,呈现"沉默失败"现象。 根本原因 索引关联断裂:INDEXSTRUCTURE 中 OBJECT_INDEX 和 VALUE_INDEX 未正确关联 COOBJECT 和 PERVALUE/TOTVALUE 表的数据 对象定义冲突:COOBJECT 中同一行填写了多

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

struts控制器组件--actionServlet类

ActionServlet类ActionServlet类对应的类名为org.apche.struts.action.ActionServlet,它是struts框架的核心控制器组件,所有用户的请求都先由ActionServlet来处理,然后再由ActionServlet把请求转发给其他组件。Struts只允许一个应用中配置一个ActionServlet,但是可以将ActionServlet扩展。S

mikechu的专栏 4663

环境配置与基础教程:当前大厂主流套路:使用 MLflow 全链路管理 YOLO 实验参数、指标与模型版本

YOLO26与MLflow结合实现高效实验管理 YOLO26通过移除DFL模块和实现无NMS端到端推理,在CPU推理速度上提升43%,同时简化了模型导出流程。MLflow 3.10/3.11版本新增多工作区支持、成本追踪和安全序列化等功能,为机器学习实验提供全生命周期管理。两者结合可解决传统"截图+Excel"式实验管理的痛点,实现参数追踪、指标对比和模型版本控制的自动化。 关键优势: YOLO26架构优化带来显著性能提升 MLflow提供实验到生产的全链路管理 原生集成简化了计算机视觉

ZXSXJ的博客 192

NSIS教程(6): 使用第三方插件

NSIS内置了很多指令,这些指令可以满足我们基本需求,但难免会遇到NSIS没有内置的功能,如进程操作,后台运行(即多线程),7z压缩等等,这个时候我们就需要借助第三方插件来满足我们所需要的功能了。 一、插件获取 NSIS官方收录插件的网址是:http://nsis.sourceforge.net/Category:Plugins,我们可以在这个网站上查找和下载我们需要的插件,该网站上针对每

while(1) { smile(); } 9万+

struts的核心组件—ActionServlet、RequestForward、Action

前言       SSH已经成为了Java的主流框架,struts作为Web层的框架,主要负责页面的流转配置。说到页面流转的配置,也就意味着struts的配置文件比较强大一些。至于页面流转,那当然是ActionServlet类来控制了。但是实质做处理的却要靠RequestProcessor来进行。Action则负责调用相应的业务实现。   ActionServlet       Act...

Coder Yasmine 1793

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 968

ActionServlet

  Struts详解之-ActionServlet         由于最近见到的关于struts、hibernate等的基础问题很少受新人关注,所以,写了这些东西,还是希望能打好底子,以后会陆续的写些其他的各方面开发中会用到的东西。好,入正题。ActionServlet类 简介ActionServlet是Struts中最核心的部分,我们从这里开始。它相当于中央控制器,我们来看看他是怎么样实...

ailin52591314的博客 223

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入浅出学习Struts1框架(六):ActionServlet的实例化

之前写了五篇关于struts1框架学习的博客,主要是从mvc的一个实例开始,慢慢重构出一个struts1框架雏形,通过这个雏形来引出我们要学习的struts1框架并且编写了一个struts1实例。五篇博客如下:1、《深入浅出学习Struts1框架(一):一个简单mvc模式代码示例开始》2、《深入浅出学习Struts1框架(二):重构MVC模式代码中跳转路径和业务逻辑》3、 《深入浅出学习Strut

Q 7739

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ActionServlet的init()方法

 //struts1.1    public void init() throws ServletException {  /*   1. Initialize the framework’s internal message bundle. These messages are used to   output informational, warning, and error messages

Java之路 773

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Strust组件—ActionServlet详解

<br />大家都知道,Struts控制器组件负责接受用户请求,更通模型,以及返回给用户合适的视图组件. <br />控制器将模型层和视图层分开,这样分离,可以为同一个模型开发出不同的视图. <br />下面时Struts的三大主要组件 <br />ActionServlet组件:充当Struts框架的中央控制器 <br />RequestProcessor组件:充当每个子应用模块的请求处理器 <br />Action组件:真正来处理一项具体的业务. <br /><br />一. Struts的init()

xuyuhai的专栏 486

Struts 源码学习之ActionServlet ( 一)

Struts 源码最新版本为 struts-1.3.8-src.zip ( 12-Mar-2007 00:06 ) 学习笔记使用struts-1.3.5-src.zip 的源码, 下载地址:http://archive.apache.org/dist/struts/source/ 1.  在web.xml 中通过下面定义把所有的*.do 交给Acti...

samson_g_q_su的博客 148

struts ActionServlet源码分析

struts ActionServlet源码分析 一、ActionServlet有两种中用途: 1、用于系统初始化时,初始化URL的后缀,以及对应的类 ActionServlet.initServlet()请求的URL后缀 - servletMapping :*.do A

JAVA0317的专栏 734

Struts(三)ActionServlet

Struts框架中所使用的组件有:   ActionServlet 控制器   ActionClass是开发者自己写的类,包含事务逻辑,。   ActionForm 显示模块数据   ActionMapping 帮助控制器将请求映射到操作   ActionForward 用来指示操作转移的对象   ActionError 用来存储和回收错误   Struts标记库可

在你最感兴趣的事物上,隐藏着你人生的秘密 1657

Struts中ActionServlet源码深入分析执行过程

执行流程: 1、ActionServlet处理.do的请求 不管是get还是post方式都将转到     protected void process(HttpServletRequest request, HttpServletResponse response) 方法。     2、根据请求对象和servletContext对象选择请求所隶属的模块     ModuleUtil

wangdabin_1216的专栏 495
上一篇: 收集Eclipse插件网站 ^_^
下一篇: ActionServlet深入探讨--2
csdnloading
博客等级 码龄11年 0粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值