J2EE学习笔记(8) 真是知易行难 初试Struts

j2ee|笔记

实在是好事多磨,折腾了两个晚上才搞定了一个 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.

非常感谢下面两篇文章,它们帮助我解决了这个奇怪的问题,也间接导致了这篇文章的诞生。

时间: 2024-10-29 21:54:48

J2EE学习笔记(8) 真是知易行难 初试Struts的相关文章

J2EE学习笔记--Struts中文问题

       JSP的中文乱码问题,其根源在于:Web容器默认的字符处理编码是iso-8859-1,对于需要在浏览器页面上显示中文的JSP程序,但在程序中并没有指定中文的字符集,那么中文将在浏览器页面上显示为乱码.当然,前面所说的是指在Tomcat服务器下的,其他服务器有些不是这样的,比如BEA Weblogic和IBM Websphere是从操作系统中取得默认的编码,然后按该编码来转码所有用户请求.以前我也写过一遍JSP的学习笔记,关于本地化和国际化的,那里有详细解释在Tomcat服务器下中文

扬扬的J2EE学习笔记(四)Platform Services平台服务

j2ee|services|笔记 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!! 1. 平台服务概述    1) 为应用编程的部署提供服务.   2) 命名服务:能够帮助应用客户端寻找企业Beans:寻找通过Java Naming Directory Interface(JNDI)访问naming环境的WEB组件.   3) 无须更改源代码就能定制组件   4) 使用JNDI接口,J2EE组件可以定位自己的环境名称内容(envi

J2EE学习笔记(6) Struts HTML Tags

HTML Tags一些公用的tag attributes在HTMLTagLib里的含义前后一致,它们是name: ActionForm bean的实例名,如果name不存在,<html:form>所关联的formBean会生效.property: property既决定了生成的html的fieldname,也决定了该field的值 via formBean.getThisPropertyvalue: value决定了生成html的field的value,注意它不是bean的propertyNa

J2EE学习笔记(3) Struts Logic Tags

Logic Tags语法应用是 --<someComparisonTag value="someUserNameValue" cookie="userName"> (cookie specifies the name of the cookie to compare with value)<someComparisonTag value="en_US" header="Accept-Language">

扬扬的J2EE学习笔记(一)概述

j2ee|笔记 扬扬今天开始学习J2EE啦! 目标:尽可能在最短时间内,把J2EE体系结构相关了解个大概,以后再慢慢往深处学习. 加油!加油!!加油!!!一.分布式的多层应用程序 图1 分布式的多层应用程序 J2EE平台使用多层分布式的应用模式.应用逻辑根据其功能分成多个组件,各种不同的应用组件构成分布在不同的依赖于层的机器上的J2EE程序.位于不同层的组件有: ☆ 运行在客户机上的客户层组件 ☆ 运行在J2EE服务器上的网络层 ☆ 运行在J2EE服务器上的逻辑层 ☆ 运行在

J2EE学习笔记--MVC框架

MVC是一种软件设计模式,最初是为SMALLTALK-80语言提出来的,但后来在JSP开发中渐渐得到广泛应用,并且成为Sun公司推荐的J2EE平台的设计模式.Sun公司提出的Model2开发模型就是基于MVC设计模式的应用,在Web应用程序开发中,MVC框架应用非常广泛,特别适合应用在大型的.比较复杂的项目开发中.   MVC框架即是模型-视图-控制器(Model-View-Controller)设计模式.其中,M代表Model,V代表View,C代表Controller.MVC的核心思想是将来

扬扬的J2EE学习笔记(三)Components and Roles组件和角色

j2ee|笔记 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!!  1. 架构    1) 组件:一个应用级的软件单元      J2SE拥有JavaBeans:J2EE拥有EJB(Enterprise JavaBeans)   2) 系统级实体容器      提供:运行支持.生命周期管理.安全.部署.线程   3) applet和客户应用程序      客户端组件执行自己的Java虚拟机(JVM)   4) WEB组件:    

扬扬的J2EE学习笔记(五)Installing J2EE SDK(安装J2EE SDK)

j2ee|笔记 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!! 以在Linux下安装为例. 1 准备安装J2SE普通用户身份:./j2sdk-1_3_1_01-linux-i386-rpm.bin运行安装程序,最后生成jdk-1.3.1_01.i386.rpm文件2 安装J2SE SDK1) su root身份:rpm -iv jdk-1.3.1_01.i386.rpm得到jdk-1.3.1_01-fcs2) cd /usr发现

扬扬的J2EE学习笔记(二)J2EE的客户端/服务器

j2ee|笔记|服务器|客户端 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!! 图3 J2EE场景 图三里须注意的是: 1.Tier integration is the center of the J2EE programming model. 2.用户使用Browser方式访问:      1) Browser:使用HTML,HTTP,XML.可能经过防火墙      2) Web container:使用JSP,Serve