Struts1.x工作原理

本文深入解析了Struts框架的核心组件ActionServlet及其初始化过程,详细阐述了Struts配置文件的结构和作用,以及从客户端请求到业务处理的完整流程,包括解析配置文件、匹配Action、验证参数等关键步骤。

1、  Struts的核心是ActionServlet,它本质上就是一个Servlet,在Web.xml中配置ActionServlet为自动启动,指明Struts的配置文件所在位置,并指明Struts中工作条件

<servlet>

       <servlet-name>struts</servlet-name>

       <servlet-class>

           org.apache.struts.action.ActionServlet

       </servlet-class>

       <init-param>

           <param-name>config</param-name>

//如果有多个配置文件,以逗号分隔

           <param-value>/WEB-INF/struts-config.xml</param-value>

       </init-param>

       <load-on-startup>0</load-on-startup>

    </servlet>

    <servlet-mapping>

       <servlet-name>struts</servlet-name>

       <url-pattern>*.do</url-pattern>

    </servlet-mapping>

2、  当服务器容器(Tomcat)启动时,自动加载ActionServlet,并执行init()方法,init方法会用Sax解析Web.xml中指定的Struts配置文件(struts-config.xml),读取里面的actionform-beanforwardexception及资源文件和插件信息,并将其保存到Struts相应的MAP缓存中。

<struts-config>

    <data-sources />

    <form-beans>

       <form-bean name="insertForm" type="com.form.InsertForm"></form-bean>

       <form-bean name="updateForm" type="com.form.UpdateForm"></form-bean>

       <form-bean name="searchForm" type="com.form.SearchForm"></form-bean>

    </form-beans>

    <global-exceptions />

    <global-forwards />

    <action-mappings>

       <action path="/insert" name="insertForm"

           type="com.action.InsertAction" input="/insert.jsp" scope="request"

           validate="true">

           <forward name="search" path="/search.do"></forward>

       </action>

       <action path="/update" name="updateForm"

           type="com.action.UpdateAction" input="/update.jsp" scope="request"

           validate="true">

           <forward name="search" path="/search.do"></forward>

       </action>

       <action path="/search" name="searchForm"

           type="com.action.SearchAction" input="/search.jsp" scope="request"

           validate="true">

           <forward name="search" path="/search.jsp"></forward>

       </action>

       <action path="/delete" type="com.action.DeleteAction"

           input="/search.jsp" scope="request" validate="true">

           <forward name="search" path="/search.do"></forward>

       </action>

    </action-mappings>

    <message-resources

       parameter="com.yourcompany.struts.ApplicationResources" />

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

       <set-property property="pathnames"

           value="/WEB-INF/validator-rules.xml,

                                                  /WEB-INF/validation.xml" />

    </plug-in>

</struts-config>

3、  在客户端发来请求以后,Tomcat会检测请求的URL,如果以.do结尾,则交于Struts进行处理:Struts首先分析出请求Action的名称,然后在ActionMAP缓存中找到actionpath属性与其对应的action信息,查看name属性是否指向form-bean,如果没有则跳转到第4步。如果有则在form-beanMAP缓存中找到form-beanname属性与此actionname属性相匹配的form-bean信息,通过form-beantype属性找到此form-bean的实体类,利用反映机制得到此实体类的所有以set开头的属性并从URL请求参数中得到相对应的参数名称,调用实体类的set方法将其参数值注入到实体类的属性中。注入完成后检测此action信息的validte属性,如果为真,则执行form-beanvalidte方法,如果验证不通过,则返回到actioninput属性所指向的页面,如果通过则跳转到第4

4、  查看此actionparametertype方法,以确认调用Action的默认方法还是自定义方法进行业务处理,返回ActionForward对象,将响应结果返回给前台

物联网通信协议测试是保障各类设备间实现可靠数据交互的核心环节。在众多适用于物联网的通信协议中,MQTT(消息队列遥测传输)以其设计简洁与低能耗的优势,获得了广泛应用。为确保MQTT客户端与服务端的实现严格遵循既定标准,并具备良好的互操作性,实施系统化的测试验证至关重要。 为此,采用TTCN-3(树表结合表示法第3版)这一国际标准化测试语言构建的自动化测试框架被引入。该语言擅长表达复杂的测试逻辑与数据结构,同时保持了代码的清晰度与可维护性。基于此框架开发的MQTT协议一致性验证套件,旨在自动化地检验MQTT实现是否完全符合协议规范,并验证其与Eclipse基金会及欧洲电信标准化协会(ETSI)所发布的相关标准的兼容性。这两个组织在物联网通信领域具有广泛影响力,其标准常被视为行业重要参考。 MQTT协议本身存在多个迭代版本,例如3.1、3.1.1以及功能更为丰富的5.0版。一套完备的测试工具必须能够覆盖对这些不同版本的验证,以确保基于各版本开发的设备与应用均能满足一致的质量与可靠性要求,这对于物联网生态的长期稳定运行具有基础性意义。 本资源包内包含核心测试框架文件、一份概述性介绍文档以及一份附加资源文档。这些材料共同提供了关于测试套件功能、应用方法及可能包含的扩展工具或示例的详细信息,旨在协助用户快速理解并部署该测试解决方案。 综上所述,一个基于TTCN-3的高效自动化测试框架,为执行全面、标准的MQTT协议一致性验证提供了理想的技术路径。通过此类专业测试套件,开发人员能够有效确保其MQTT实现的规范符合性与系统兼容性,从而为构建稳定、安全的物联网通信环境奠定坚实基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值