J2EE学习笔记(8) 真是知易行难 初试Struts
实在是好事多磨,折腾了两个晚上才搞定了一个 HelloWorld Struts版,下面谈谈一点体会。开发环境 Eclipse + MyEclipse (Struts 1.1)
Struts 1.1支持多模块开发,在myEclipse的Web Application Project里先建立新module (New->Struts 1.1 Module),
再依次加Form Action ActionForward (New -> Struts 1.1 Action, Form & JSP).有时myEclipse会找不到自己刚刚加的Form,手动添加即可,没什么大不了的。myEclipse的web.xml模板不符合标准,需要手动更改。TLD文件好像也不太对,可以用自己曾经做过项目的TLD代替。
下面是两个折腾我很久的问题。
1) 如果在我们security模块里有
<action
path="/UserSecurityCheck"
type="com.scs.presentation.security.UserSecurityCheckAction"
name="UserLoginForm" scope="request"
input="/init.do">
<forward name="loginSucceed" path="/mainmenu.jsp"/>
</action>
这个例子中,注意mainmenu.jsp前面有个/,ActionServlet会在当前module里寻找这个jsp,也就是说mainmenu.jsp需要放在/%webroot%/security/的目录下面,而不是直接在/%webroot%/下
2) struts的form标记定义了一个页面的表单,但该struts标记需要根据action的值来查找module config里的action mapping,并根据action mapping的值来初始化action form。因此,在form标记中需要获取一个module config。在这里,获取哪一个module config成为了form标记能否正常工作的关键,如果module config的获取值不正确,将会造成Cannot retrieve mapping for {action name}的错误。查找方法为首先从request中获取当前的module config,如果没有找到,就从servlet context中获取默认的module config。
现在struts framework的实现是这样的,只有ActionServlet正确地将module config对象赋值给request的属性Globals.MODULE_KEY后,后来的含form tag的属于该模块的jsp页面才能被struts framework正确与对应此module config挂钩。倘若编程人员/用户试图对某个模块发出的第一个请求是jsp而不是action,actionServlet就没有机会做上述的准备工作(因为web container会直接处理jsp请求,不会转发给actionServlet),那么接下来处理jsp中的form tag时,struts framework就会试图从default module config中寻找该actionMapping(因为request里的module specfic config依然为空,所以只好从default里找了),一般上这种寻找是没有结果的,最后framework就会返回Cannot retrieve mapping for ThisAction的错误。
结论是,接入每个module的第一个页面必须是由action请求(而不是jsp请求),以给actionServlet一个机会装载对应的module config并cache.
非常感谢下面两篇文章,它们帮助我解决了这个奇怪的问题,也间接导致了这篇文章的诞生。
↓相关文章:
- · Spring Framework标记库初学指南
- · j2ee程序员应该掌握的linux知识
- · J2ME打包--解决移动平台api 问题
- · J2EE平台介绍
- · 应用Rational工具简化基于J2EE项目(五)架构与设计
- · 应用Rational 工具简化基于J2EE的项目 (三)转换到系统模型
- · 应用Rational 工具简化基于J2EE的项目(一)
- · 试析J2EE与.NET时代的商业利润
- · 应用OSCache提升J2EE系统运行性能
- · J2EE and XML Development -Ebook download
- · J2EE应用中与Oracle数据库的连接
- · 应用OSCache提升J2EE系统运行性能
- · j2EE基础概念(总结)
- · J2EE中的不同数据库之间事务(续)
- · J2SE 1.4 中assertion 功能介绍
- · J2EE学习笔记(4) 软件工程与系统框架
- · J2EE学习笔记(2) javascript 讨论
- · J2EE之类的概念
- · Charset in J2EE Web Application
- · EJB技术及应用
- · J2EE应用部署(三):高级篇
- · 了解Struts1.1介绍
- · 漫谈EJB (2)
- · PASX简化Java开发
- · io的学习
- · 使用mod_jk2.so整合Apache2.049与Tomcat5.019
- · J2SE 1.5 in a Nutshell 中文版
- · Apache 使用基础(建议初学者仔细看看)
- · Resin和iis配置多个站点
- · 用J2EE开发WebService
- · Resin和iis配置多个站点
- · Apache Tomcat 重要信息暴露漏洞
- · 安装好你的机器来使用JSP(转)
- · 在Windows上安装Tomcat
- · 在Linux上安装Tomcat
- · <试验>win2k在apache1.3上配置tomcat3.1
- · 在windows2000 server中文版上安装apache <原创>
- · EJB概述(上)
- · WebSphere快速入门(15)
- · EJB内部资参1
- · EJB内部资参3
- · JRun常见问题回答 (JRun 中文 FAQ)
- · 真正的apache,tomcat,mod_jk安装指南 原创
- · java bean 与 ejb的区别
- · 将 Microsoft 的 Internet Information Server 用作 Java servlet 引擎 一 (给学过ASP的朋友)

