`
___loveOfForever
  • 浏览: 78380 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts开发步骤,struts执行顺序,struts常见错误汇总

阅读更多
struts1开发步骤 : 版本1.3.10
   1.添加jar
   2.配置主控制器 ActionServlet
   <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>2</load-on-startup>
       </servlet>
       <servlet-mapping>
         <servlet-name>struts</servlet-name>
         <url-pattern>*.do</url-pattern>
       </servlet-mapping>

    3.添加struts配置文件struts-config.xml
    4.编写子控制器及部署配置

---------------
struts1框架中核心 API

  ActionForm 表单bean : 属于视图组件,用于封装客户端请求参数。
                        每次请求创建新的ActionForm对象。

  Action 类 :  所有子控制器的父类。struts1框架默认只维护一个子控制器实例,
                使用一个实例处理所有请求。因此Struts1中Action不是线程安全的。

  ActionMapping 类 :与配置文件中action元素对应,存储映射信息,包括 转发信息。

  ActionForward : 封装转发结果信息。
----------------------------------------------------------------------
Struts应用的完整执行顺序

1.启动容器



2.根据web.xml的配置,加载ActionServlet
  注:如果配置了load-on-startup元素,则在容器启动时加载,
  否则在用户发出请求时加载


3.加载ActionServlet后,根据init-param的顺序,加载参数
  加载Struts框架的配置文件:struts-config.xml
  加载debug
  加载struts资源文件


4.ActionServlet解析strust-config.xml,并将元素封装成对象载入至内存
  如果该配置文件不符合DTD格式规范,则容器会报异常


5.web服务器就绪


6.接受客户请求


7.客户发出对视图的请求,容器会根据用户请求的视图表单中的action属性值,
  去查询在struts-config.xml文件中,是否存在相应的path
  如果没有找到,将显示错误提示:Cannot retrieve mapping for action
  (这说明,容器会在实例化ActionForm之前,分析视图的JSP语法,
   然后对其进行两次编译,再根据视图编译后产生的servlet代码,去
   和struts-config.xml中的action元素的path值比对,并返回给容器相应的信息)

  如果找到,容器会实例化ActionForm(自定义的ActionForm)类,
  然后执行reset方法,将所有的表单Bean属性初始化,接着调用其get方法,
  用属性值去更新视图的控件值
  (要注意的是:表单Bean的加载是在视图加载后完成的,
  而且只要视图正确显示,该视图就已经和一个action元素绑定了,换句话说,
  就是该视图已经和一个action元素对应的ActionMapping对象关联了)


8.客户请求一般是以表单的形式,提交的url以.do为后缀, web.xml中已经指定,
  ActionServlet会拦截所有.do的请求串,因此,用户的请求会首先被ActionServlet拦截


9.客户提交表单,容器会根据该视图对应的action元素,
  或者说是ActionMapping对象,去决定后续操作


10.表单提交,如果是action元素中的scope属性值为request,
   则证明该表单Bean的生命周期仅在两个web资源的交互之间,
   那么每次表单提交都会重新实例化表单Bean,而如果scope为session,
   则其生命周期为一次完整会话,只要不关闭浏览器,容器不会每次都实例化表单Bean。

   换个角度来思考,如果scope为request,那么表单Bean中的reset方法对我们来说是没有意义的,
   因为每次我们使用的都是一个新的表单Bean对象,所以不需要重新对其值做初始化,
   然后调用ActionForm中的set(重置)方法,将上一次的数据还原为初始值,
   接着调用表单Bean中的get方法,使用表单Bean中的模型值,更新视图的控件值,
   (因为视图的控件和表单Bean中的属性是绑定的)

   接着调用了属性相应的set方法,保证将表单数据填充值表单Bean对象,
   是该对象成为一个数据传输的DTO

   下面根据action元素中的validate方法中的值,决定是否进行表单验证,
   该属性的默认值为true


11.执行表单验证后,ActionServlet会根据validate方法返回的ActionErrors对象,
   判断表单验证是否成功,如果返回的ActionErrors实例不为空,则代表表单验证没有通过,
   将根据action元素中的input属性指定的页面,显示错误消息,如果返回的ActionErrors实例为空,
   则证明表单验证通过,这时,ActionServlet会将表单对象,传递给Action类中的execute方法参数


12.ActionServlet实例化Action类

13.ActionServlet执行execute方法,将通过表单验证的数据,进行业务逻辑验证,
   并返回相应的ActionForward实例给ActionServlet,
   由ActionServlet决定调用哪个视图显示结果
----------------------------------------------------------------------
Struts常见错误汇总


1、“No bean found under attribute key XXX” 
  在struts-config.xml里定义了一个ActionForm,但type属性指定的类不存在,
    type属性的值应该是Form类的全名。或者是,在Action的定义中,
    name或attribute属性指定的ActionForm不存在。 

2、“Cannot find bean XXX in any scope” 
  在Action里一般会request.setAttribute()一些对象,
    然后在转向的jsp文件里(用tag或request.getAttribute()方法)得到
    这些对象并显示出来。这个异常是说jsp要得到一个对象,但前面的Action里
    并没有将对象设置到request(也可以是session、servletContext)里。 
  可能是名字错了,请检查jsp里的tag的一般是name属性,
    或getAttribute()方法的参数值;或者是Action逻辑有问题没有
    执行setAttribute()方法就先转向了。 
  还有另外一个可能,纯粹是jsp文件的问题,例如会指定一个id值,
    然后在循环里使用这个值作为name的值,如果这两个值不同,也会出现此异常。
   (都是一个道理,request里没有对应的对象。) 

3、“Missing message for key "XXX"” 
  缺少所需的资源,检查ApplicationResources.properties文件里是否有jsp文件里
    需要的资源,例如: 
   
  这行代码会找msg.name.prompt资源,如果AppliationResources.properties里没有
    这个资源就会出现本异常。在使用多模块时,要注意在模块的struts-config-xxx.xml里
    指定要使用的资源文件名称,否则当然什么资源也找不到,这也是一个很容易犯的错误。 

4、“No getter method for property XXX of bean teacher” 
  这条异常信息说得很明白,jsp里要取一个bean的属性出来,但这个bean并没有这个属性。
    你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对: 
   

5、“Cannot retrieve mapping for action XXX” 
  在.jsp的 标签里指定action=''/XXX'',但这个Action并未在struts-config.xml里设置过。 

6、HTTP Status 404 - /xxx/xxx.jsp 
  Forward的path属性指向的jsp页面不存在,请检查路径和模块,对于同一模块中的Action转向,
    path中不应包含模块名;模块间转向,记住使用contextRelative="true"。 

7、没有任何异常信息,显示空白页面 
  可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。 

8、“The element type "XXX" must be terminated by the matching end-tag "XXX".” 
  这个是struts-config.xml文件的格式错误,仔细检查它是否是良构的xml文件,
    关于xml文件的格式这里就不赘述了。 

9、“Servlet.init() for servlet action threw exception” 
  一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息,
    其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下: 

  java.lang.NullPointerException 
   at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003) 
   at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955) 

  为解决问题,先下载struts的源码包,然后在ActionServlet.java的第1003行插入断点,
    并对各变量进行监视。很丢人,把struts-config.xml文件弄丢了,
    因此出现了上面的异常,应该是和CVS同步时不小心删除的。 


10、“Resources not defined for Validator” 
  这个是利用Validator插件做验证时可能出现的异常,这时你要检查validation.xml文件,
    看里面使用的资源是否确实有定义,form的名称是否正确,等等。


如果有误,请大家联系我,谢谢大家的支持.
1
0
分享到:
评论

相关推荐

    百度面试题汇总(java)

    ### 百度面试题汇总(Java) #### 一、Java基础知识 1. **自我介绍**:面试官希望从自我介绍中获取应聘者的基本背景信息,包括但不限于教育经历、工作经验等,以便于后续针对这些背景提出具体问题。 2. **项目...

    停车场管理系统c语言.docx

    问题描述: 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入; 当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 1.基本要求 (1)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 (2)每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。 (3)栈以顺序结构实现,队列以链表实现。 2.重点难点 重点:针对停车场问题的特点,利

    精选毕设项目-人民好公仆小程序(生活+便民+政务).zip

    精选毕设项目-人民好公仆小程序(生活+便民+政务)

    精选毕设项目-相册;处理用户信息.zip

    精选毕设项目-相册;处理用户信息

    精选毕设项目-喵喵小说.zip

    精选毕设项目-喵喵小说

    精选毕设项目-图片预览带后端.zip

    精选毕设项目-图片预览带后端

    精选项目-爱靓女带后台.zip

    精选项目-爱靓女带后台

    法院综合安全监管平台解决方案PPT(53页).pptx

    在科技与司法的交响曲中,智慧法院应运而生,成为新时代司法服务的新篇章。它不仅仅是一个概念,更是对法院传统工作模式的一次深刻变革。智慧法院通过移动信息化技术,为法院系统注入了强大的生命力,有效缓解了案多人少的矛盾,让司法服务更加高效、便捷。 立案、调解、审判,每一个阶段都融入了科技的智慧。在立案阶段,智慧法院利用区块链技术实现可信存证,确保了电子合同的合法性和安全性,让交易双方的身份真实性、交易安全性得到了有力见证。这不仅极大地缩短了立案时间,还为后续审判工作奠定了坚实的基础。在调解阶段,多元调解服务平台借助人工智能、自然语言处理等前沿技术,实现了矛盾纠纷的快速化解。无论是矛盾类型的多元化,还是化解主体的多元化,智慧法院都能提供一站式、全方位的服务,让纠纷解决更加高效、和谐。而在审判阶段,智能立案、智能送达、智能庭审、智能判决等一系列智能化手段的应用,更是让审判活动变得更加智能化、集约化。这不仅提高了审判效率,还确保了审判质量的稳步提升。 更为引人注目的是,智慧法院还构建了一套完善的执行体系。移动执行指挥云平台的建设,让执行工作变得更加精准、高效。执行指挥中心和信息管理中心的一体化应用,实现了信息的实时传输和交换,为执行工作提供了强有力的支撑。而执行指挥车的配备,更是让执行现场通讯信号得到了有力保障,应急通讯能力得到了显著提升。这一系列创新举措的实施,不仅让执行难问题得到了有效解决,还为构建诚信社会、保障金融法治化营商环境提供了有力支撑。智慧法院的出现,让司法服务更加贴近民心,让公平正义的阳光更加温暖人心。

    西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子12

    西门子1200与3台台达DTK温控器通讯程序 功能:实现西门子1200 PLC对3台台达DTK温控器进行485通讯控制,在触摸屏上设定温度,读取温度 器件:西门子1200 1214DC DC DC.昆仑通态TPC7062Ti ,西门子KTP700 Basic PN,台达DTK 4848V12温控器。 说明:的是程序,带详细注释程序,西门子触摸屏程序,PLC设置和温控器设置,接线说明书。 #SIEMENS 西门子

    机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip

    机械设计电阻绕线焊线一体机sw18全套技术资料100%好用.zip

    VB6编写的上位机采集2路温度 并形成曲线图 还可查看历史数据

    VB6编写的上位机源码,可实时显示曲线图,带有数据库,可以进行历史数据的保存 及 查看历史采集数据。

    精选毕设项目-新浪读书.zip

    精选毕设项目-新浪读书

    jQuery+Slick插件实现游戏人物轮播展示切换特效源码.zip

    jQuery+Slick插件实现游戏人物轮播展示切换特效源码是一款通过背景图片的切换来显示不同的人物效果,轮播效果通过slick幻灯片插件来制作。效果非常棒,有需要的朋友可以直接下载使用,适应各大网站

    精选毕设项目-地图查找附件.zip

    精选毕设项目-地图查找附件

    (蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据

    (蛐蛐voc数据)农作物病虫害识别目标检测数据集,VOC格式,蛐蛐数据集,纯手动标注,用来进行目标检测代码训练的数据。

    MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matl

    MATLAB Simulink仿真模型 双馈风机并网频率控制仿真模型,利用下垂控制与惯性控制结合的综合惯性控制,实现电力系统的频率稳定,两台同步发电机组,具体参数可自行调节,频率波形比较可利用matlab工作区画出。

    科研项目结题报告的撰写指南:结构、内容与注意事项

    一、结题报告的类型及主要结构 结题报告是一种专门用于科研课题结题验收的实用性报告类文体,也叫研究报告。它是研究者在课题研究结束后对科研课题研究过程和研究成果进行客观、全面、实事求是的描述,是课题研究所有材料中最主要的材料,也是科研课题结题验收的主要依据。   一篇规范、合格的结题报告,需要回答好3个问题:一是“为什么要选择这项课题进行研究?”二是“这项课题是怎样进行研究的?”三是“课题研究取得哪些研究成果?”  基本结构大致包括以下部分: 第一个问题 “为什么要选择这项课题进行研究?”  1.课题提出的背景;2.课题研究的意义(包括理论意义和现实意义,这个部分也可以合并归入“课题提出的背景”部分);第二个问题“这项课题是怎样进行研究的?”3.文献综述;4.课题研究的理论依据;5.课题研究的目标;6.课题研究的主要内容;7.课题研究的对象;8.课题研究的方法;9. 课题研究的主要过程(研究的步骤);   除了第9部分外,从第1到第8部分在填报课题立项申报表、在制定课题研究方案、在开题报告中,都有要求,内容基本相同。到了撰写结题报告时,只须稍作适当修改就可以了。而第9部分,则需要通过对

    1+X网络安全应急响应之应急准备:构建高效安全的应急响应体系

    内容概要:本文档重点讲述了网络安全应急响应的各项准备工作,涵盖了‘1+X’网络安全应急响应的职业技能等级证书概述、应急响应的基础知识、应急响应组织的建立、风险评估与改进、应急响应预案的制定以及详细的应急响应计划处置样例。文中详细介绍了各级职业技能的要求和任务,尤其关注如何未雨绸缪,制定完善的应急预案以应对潜在的网络安全风险;同时也探讨了如何在网络安全事件发生时,采取及时有效的应急处置措施。 适合人群:从事或有兴趣进入网络安全领域的从业人员,尤其是准备考取‘1+X’网络安全应急响应职业技能等级证书的相关人员。 使用场景及目标:帮助读者了解网络安全应急响应的基本概念及其在整个国家安全框架中的重要地位;指导读者学会如何建立健全高效的应急响应组织结构,如何进行全面的风险评估以及如何编制切实可行的应急预案;通过实例剖析,增强读者应对突发网络安全事件的能力。文档的目标在于提升读者在不同层面的专业技能,包括但不限于系统备份、日志分析、安全漏洞修复等方面的能力。 阅读建议:此文档结构清晰,内容详尽,非常适合有一定基础的技术从业者参考学习。建议读者逐章节深入了解,特别是关注自身岗位对应的技能细分类别。此外,结合实例深入理解和练习如何进行应急处置是非常有价值的,有助于提升自身的实战能力。

    电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电

    电动汽车动力系统匹配计算模型:输入整车参数及性能要求,一键生成驱动系统的扭矩功率峰值转速等参数。 2、整车动力经济性计算模型:包含NEDC WLTC CLTC工况,输入整车参数可生成工况电耗、百公里电耗、匀速工况续航、百公里电耗等信息。 实际项目中使用的计算仿真模型. 两个模型打包

    chromedriver-linux64_122.0.6254.0.zip

    chromedriver-linux64_122.0.6254.0

Global site tag (gtag.js) - Google Analytics