??xml version="1.0" encoding="utf-8" standalone="yes"?>
struts-config.xml Struts配置文g
ActionServlet 控制?br>Action Class 包含事务逻辑
ActionForm 昄模块数据
ActionMapping 帮助控制器将h映射到操?br>ActionForward 用来指示操作转移的对?br>ActionError 用来存储和回攉?br>Struts标记?nbsp; 可以减轻开发显C层ơ的工作
struts框架的优?br>1.良好的架构和设计
2.可重用,模块化,扩展性好
3.Open source
struts-config.xml
Struts-config.xml集中了所有页面的D定义。对于大型的WEB目Q通过此配|文件即可迅速把握其脉络Q这不管是对于前期的开发,q是后期的维护或升都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在?
FormBean部分
<struts-config>
<!-- Form Bean Definitions -->
<form-beans>
<form-bean name=“testform" type="com.cjea.test.TestForm" />
</form-beans>
全局转发部分
<!-- Global Forward Definitions -->
<global-forwards>
<forward name="failure" path="bad.jsp"/>
<forward name="success" path="/good.jsp" />
</global-forwards>
action部分
<action-mappings>
<action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request">
<forward name="success" path="/test/good.jsp" />
</action>
<action-mappings>
</struts-config>
ActionServlet
ActionServlet 是struts框架 MVC 实现?controller 部分Q它是这一框架的核心?br>ActionServlet 创徏q?Action、ActionForm ?ActionForward?/p>
ActionServlet的基本功?/p>
截获用户的Httph
把这个请求映到相应的ActioncR?br>创徏一个ActionForm bean实例,formh攑օformbean的实例中
调用Action实例的perform()Ҏ
ActioForm bean,Action Mapping对象,request和response对象传给Action的perform()Ҏ
performq回一个ActionForword对象Q根据方法执行情况{到相应的jsp面.
Action Classes
Action cL业务逻辑的一个包装。Action cȝ用途是?HttpServletRequest 转换Z务逻辑?/p>
ActionForm
ActionForm l护 Web 应用E序的会话状态?br>ActionForm 是一个抽象类Q必Mؓ每个输入表单模型创徏该类的子cR?/p>
ActionForm的?/p>
假定有一个由 HTML 表单讄?TestActionForm。Struts 框架执行以下操作:
?TestActionForm是否存在Q如果不存在Q它创cȝ一个实例?br>Struts ?HttpServletRequest 中相应的域设|?TestActionForm的状态?br>Struts 框架在将 TestActionForm传递给TestAction 之前更新它的状态?
struts-config.xml 文g控制 HTML 表单h?ActionForm 之间的映关pR?br>可将多个h映射?TestActionForm ?/p>
Struts标记?br>Struts框架包括自定义标{ֺQ它可以?在很多方面。尽这些库q不要求用框 Ӟ但用它们会有助于程序的开发?/p>
Struts标记?br>struts-bean taglibQ包含在讉Kbean和bean属性时使用的tagQ也包含一些消息显C的tag?br>struts-html taglibQ包含用来生成动态HTML用户界面和窗体的tag?br>struts-logic taglib Q包含的tag用来理Ҏ条g生成输出文本Q和其它一些用来控制的信息?br>struts-template taglib包含的tag用来定义模板机制?/p>
Bean Taglib
用于定义新bean、访问bean及其属性的标记
在struts-bean.tld中定义了它的标记库描q器
Bean Taglib主要功能
创徏和复制bean的标?br>脚本变量定义标记
bean译标记
消息国际化标?br>Bean复制标记 (<bean:define>)
可定义新beanQ可复制现有beanQ还可从现有bean复制属性?br>定义新字W串常数
现有的bean复制到新定义的bean对象
复制现有bean的属性来创徏新的bean
<bean:define>标记属性:
Id 新定义的bean脚本变量名称Q必设|?br>Type 定义引入脚本变量的类
Value 为id属性定义的脚本变量分配一个新的对?br><bean:define>标记属性:
Name 目标bean的名U。若value属性没有设|,q个属性就必须讄
property Name属性定义的bean的属性名Uͼ用来定义新的bean
Scope 源bean的作用域。若没有讄Q搜索范围是从页作用域到应用E序作用?br>toScope 目标bean的作用域。若没有讄Q默认值是作用域
举例
定义一个bean:
<bean:define id="test" value="this is a test"/>
源bean在页作用域中被拷贝到h作用域中的另一个bean:
<bean:define id="targetBean" name="sourceBean"
scope="page" toScope="request"/>
脚本变量的标?br>从多U资源中定义和生成脚本变量,q些资源包括cookie,h参数QHTTP标头{等?br>脚本变量的标记属性:
Id 脚本变量和要定义的页作用?nbsp; 属性的名称
Name cookie/标头/参数的名U?br>Value 如果没有匚w的cookie?nbsp; 数|p回这个属性指 定的默认?/p>
脚本变量的标记属性:
multiple 如果q个属性设|了L一个数|所有匹配的cookie都会被积累ƈ存储C个Cookie[](一个数l?cd的bean?nbsp; 若无讄Q指定cookie的第一个值将作ؓCookiecd的?br>举例
<bean:cookie id="myCookie" name="userName"/>
脚本变量名称是myCookieQ用来创个属性的cookie的名U是userName?br><bean:header id="myHeader" name="Accept-Language"/>
脚本变量名称是myHeader,h标头的名U是Accept-Language.
举例
<bean:parameter id="myParameter" name="myParameter">
脚本变量名称是myPatameter,它保存的h参数的名UC是myParameter
逻辑标记
Struts逻辑标签库包含的标记能够有条件地产生输出文本
在对象集合中循环从而重复地产生输出文本Q以及应用程序流E控?br>它也提供了一l在JSP中处理程控制的标?br>逻辑标记装在文件名为struts-logic.tld的标记包?br>逻辑标记库的功能
条g逻辑
重复
转发/重定向响?br>条g逻辑标记
W一cd以比较下列实体与一个常数的大小
W二cd计算标记体之前判断特定的目是否存在
W三cL据模板匹配的l果查标C的内?br>W一cL仉辑标记
<equal> 如果常数与被定义的实体相{,q回true
<notEqual> 如果常数与被定义的实体不相等Q返回true
<greaterEqual> 如果常数大于{于被定义的实体Q返回true
W一cL仉辑标记
<lessEqual> 如果常数于{于被定义的实体Q返回true
<lessThan> 如果常数于被定义的实体Q返回true
<greaterThan> 如果常数大于被定义的实体Q返回true
举例
判断名ؓ"name"的请求参数的值是否是"SomeName"?br><logic:equal parameter="name" value="SomeName">
The entered name is SomeName
</logic:equal>
举例
判断在页的作用域中是否有一个名?bean"的beanQ它有一个prop属性,q个属性的值是否大??br>如果q个属性能够{化ؓ数|p行数值比较,否则p行字W串比较?br><logic:greaterThan name="bean" property="prop" scope="page" value="7">
The value of bean.Prop is greater than 7
</logic:greaterThan>
W二cL仉辑标记
<logic:present>
<logic:notPresent>
W三cL仉辑标记
<logic:match>
<logic:notMatch>
重复标记<logic:iterate>
它能够根据特定集合中元素的数目对标记体的内容q行重复的检?br>集合的类?br>java.util.Iterator
java.util.Collection
java.util.Map
java.util.List
数组
举例
Strlst是一个包含字W串的ListQ现在要他内部的字W串全都昄在浏览器?br><logic:iterate id="element" name="strlst" indexId="index">
<%Q?String)element)%>
</logic:iterate>
转发标记
<logic:forward>标记能够响应{发给重定向到特定的全局ActionForward?br>ActionForward的类型决定了是用PageContext转发响应Q还是用sendRedirect响应进行重定向
此标记只有一?name"属性,用来指定全局ActionForward的名Uͼ例如Q?br><logic:forward name="myGlobalForward"/>
重定向标?br><logic:redirect>标记是一个能够执行HTTP重定向的强大工具?br>Ҏ指定的不同属性,它能够通过不同的方式实现重定向?br>它还允许开发h员指定重定向URL的查询参数?br>HTML标记
Struts HTML标记可以大致地分Z下几个功能:
昄表单元素和输入控?br>昄错误信息
昄其他HTML元素
模板标记
Struts模板标记可以大致地分Z下几个功能:
插入标记<template:insert>
攄标记<template:put>
获得标记<template:get>
论J2EEE序员的武功修ؓ(?
EasyJF开源团?www.easyjf.com) 大
l常会跟一些朋友讨论怎么h能学好Java,学到什么程度才撑握了Java的问题。其中有一个J2EEE序员层ơ及武功修ؓ的问题,有点意思。这里就把讨论的内容大致整理一下发出来Q大家l讨论?/p>
U观国内的Y件行业,靠Java吃饭的程序员q真不是,而且JavaE序员是有很大优感的,毕竟对于很多用b/s搞开发的业内朋友来说QJava技术意味着隑ֺ大、门槛高Q因此相Ҏ说JavaE序员比其它的程序员(如php?net)收入高就理所当然。然而J2EE所涉及到的范畴是很q的Q不能一个JavaE序员就概括了事Q而应该具有层ơ及水^之分Q很多时候经帔R要进行分cL评Q有时他评、有时自评?/p>
谈到国内J2EE领域的程序员层次水^Q当前流行的U谓及评U不外乎׃面几U:
W一U是_N掌握记事本、Dreamweaver{工h写JSP+JavaBean数据库应用的是J2EEE序员;
W二U是用JBuilder、Eclipse{专用Java开发工具写着一堆一堆过E式Java BeanQ而且q能_NStruts+Spring+Hibernate{应用框架的高J2EEE序员;
W三U是用Together建模Q然后生成一堆Java接口或代码,开口闭口都是设计模式的资深JavaE序同及高pȝ分析、构架师Q?br> 最后还有一U是整天在BlogJava或JavaEye上谈l论道的大师们,q些大师技术水q难以触摸,武功门派也各LԌ不好归类Q有时不好称为程序员Q因为有的时候他们甚至不写或者写不出E序Q,但又做着与J2EEE序员密切相关的事情Q我们暂且就归ؓ“牛牛”?#8220;大师”?/p>
U谓毕竟只是U谓Q带有点主观或者功利色彩,有时很难鉴定一个h应该属于什么,因此Q我们再从纯技术的角度Q也x功修为的角度Q作了一个简单的分析及归c,?EE领域E序员大致分成以下几个层ơ,可以作ؓ大家自评的一个参考标准:
W一个层ơ:_N掌握Java语法、能调试基本的程序错误,_N掌握JSP+Java Bean写一些Nq前ASP、PHPȝ的Java Web应用E序Q如论坛、网站新d布系l、OA、网上商城等Q,_NJDBC使用、精通SQL语句、精通XML{?/p>
W二个层ơ:掌握设计模式原理及应用,掌握ZOO的分析及设计Ҏ,q能_N熟l用几UJava专业设计及开发工P_N掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及应用Q精通J2EE中一两个l成部分(如Servlet、EJB{?的工作原理及l节?/p>
W三个层ơ:林的高僧有两种Q禅僧及武僧。J2EEE序员的W三个层ơ也同样有禅、武两个分支Q这里我们重点分析一下:
W一个分支属于走的禅僧线路。在l完W二个层ơ中的各U武功基上,l合实际目中的千奇百怪的用户需求,游刃有余的选择适合的技术方案ؓ客户解决问题Qƈ形成自己的一套解x案。达到这一个层ơ的J2EEE序员已l不在乎使用M工具、Q何框架了Q而是Ҏ不同的对手,使用不同的武器或招式来应寏V好比小李飞刀一P只有辑ֈ?#8220;手中无刀、心中有刀”的境界,才能辑ֈ“出手一刀Q例不虚?#8221;的效果。这一层次的武功属于一个熟l度问题Q刀l得多了、遇到的Ҏ多了Q再加上前面的武功修为,q做不C不虚发,也可辑ֈ十发九中?/p>
W二个分支属于走的武僧线路,在撑握熟悉第一二个层次中涉及到的内容后Q进一步专研ƈ撑握J2EE底层开发,J2EE规范制订、规范实现、Java虚拟机的工作原理、各U常见的J2EE服务器内核工作机制、内存管理、进E机制、源代码{。因为涉及的很多东西都比较抽象,代码也很多,l这一层的武功需要有很好的资质及耐性、ƈ兯得有一定的环境及条件。好比神雕大侠杨q拿?#8220;玄铁?#8221;Qƈl成“暗然销掌”的成长过E,需要前面的武功修ؓ作基Q更需那只威力武雕的帮助指点及他处处ؓ民、惩奔R恶的侠之心态?br>
胡侃了这么多Q现在来Ҏ自己情况算一下自q份量Q结果如下:
W一层 l到8成;
W二层 l到5成;
W三层 准备走禅僧线路,当前是l到1成;
唉,后面的武功提升越来越难,真不知道要到何年何月才能辑ֈ10成啊。你的武功练到哪一个层ơ了Q不防亮出来大家切磋切磋。嘿嘿,要是有一天,׃中国的JavaE序员h手一?#8220;玄铁?#8221;、hZ?#8220;暗然销掌”Q那q了??..Q写着写着居然做v白日梦了Q不好意思,此打住?br>
手中鸡蛋先别扔,q要打个q告Q本人刚开始涉Java开源,目前在EasyJF开源团队中负责EasyJWeb(官网www.easyjf.com)目Q欢q大家前来指对{?
作者BlogQ?a >http://blog.csdn.net/psyl/