??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一区在线观看视频,日韩欧美国产一区二区三区,欧美日韩国产色视频http://www.aygfsteel.com/zhengshuli-j2ee/category/38038.htmlzh-cnThu, 09 Apr 2009 19:48:27 GMTThu, 09 Apr 2009 19:48:27 GMT60struts之JSTL-core库学习笔?/title><link>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264311.html</link><dc:creator>郑舒?/dc:creator><author>郑舒?/author><pubDate>Tue, 07 Apr 2009 10:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264311.html</guid><wfw:comment>http://www.aygfsteel.com/zhengshuli-j2ee/comments/264311.html</wfw:comment><comments>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhengshuli-j2ee/comments/commentRss/264311.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhengshuli-j2ee/services/trackbacks/264311.html</trackback:ping><description><![CDATA[<p><span style="color: red">JSTL标签库的配置</span><br /> 需要在webE序的lib目录下粘贴jstl.jar和standard.jar(如果只用el表达式,不用拯q两个jar)<br /> 注意Qjstl必须在能够支持j2ee1.4/servlet2.4/jsp2.0版本上的容器才能q行?br /> c开头的核心库,fmt开头的为格式化库,fn开头的为函数库Qsql开头的为操作SQL库,x开头的操纵XML</p> <p>核心?br /> <span style="color: red"><c:out/>输出标签</span><br /> examples:<br /> <c:out value="${hello}"/><br /> 如果需要再scope里取?在value内必Lel表达式或jsp脚本,否则把引号内容按字W串输出<br /> <c:out value="abc"/>输出abc?br /> 如果只是以上业务的话Q推荐用el表达式取|更加z?br /> <c:out value="${abc}" default="123"/><br /> 如果abc在scope内ƈ不存在的话,可以加入default属性规定默认?<br /> <c:out value="${cz}" escapeXml="false"/><br /> 如果x字符串按HTML格式输出Q需加入escapeXml="false"?br /> 此处推荐使用el表达式,el自动按HTML格式输出?/p> <p><span style="color: red"><c:set><c:remove>讑ր|U除标签</span><br /> examples:<br /> <c:set value="123" var="temp"/><br /> temp:${temp}<br /> <c:remove var="temp"/><br /> temp:${temp}<br /> var指定变量名?/p> <p><span style="color: red"><c:if><c:if/>判断标签</span><br /> examples:<br /> <c:if test="${v1 lt v2}" var="v"><br />  v1于v2<br />  ${v }<br /> </c:if><br /> var标签指定变量q接收test内判断的?/p> <p><span style="color: red"><c:choose>条g分支标签</span><br /> examples:<br /> <c:choose><br />  <c:when test="${v1<v2}"><br />   v1于v2<br />  </c:when>   <br />  <c:otherwise><br />   v1大于v2<br />  </c:otherwise><br /> </c:choose><br /> <span style="color: #0000ff">使用choose标签有两炚w要注?br /> </span>1?lt;c:choose>标签不能单独出现<br /> 2?lt;c:otherwise>标签不能出现?lt;c:when>标签之前,</c:when>可以有多?/p> <p><span style="color: red"><c:forEach>循环标签</span><br /> examples:<br /> <c:forEach items="${userList}" var="user"><br />  <tr><br />    <td>${user.name}</td><br />   <td>${user.age}</td><br />   <td>${user.group.name}</td><br />  </tr><br /> </c:forEach><br /> items属性指定集合数l,var属性指定@环取出的每一的变量?变量var是存攑֜scope范围内的<br /> 所以需要用el表达式取出?/p> <p><c:forEach>循环标签各项属性说?br /> varStatus属?获取循环中var的状态?br /> <c:forEach items="${userList}" var="user" varStatus="vs"><br /> vs.count取出当前是@环的W几?vs.step获取循环的步?<br /> <c:forEach items="${userList}" var="user" begin="2" end="8" step=2><br /> 循环从集合的W二开始,循环到第八项Q@环步长ؓ2</p> <p><span style="color: #ff0000">循环取出map</span><br /> example:<br /> <c:forEach items="${map}" var="m"><br /> ${m.key }=${m.value }<br><br /> </c:forEach><br /> ${m.key }输出键,${m.value }输出?/p> <p><span style="color: #ff0000"><c:forTokens>支持分隔W的循环标签</span><br /> example:<br /> <c:forTokens items="${tok}" delims="," var="v"><br />  ${v }<br><br /> </c:forTokens><br /> 其他属性与<c:forEach>标签功能相同,需要注意的是delims=","Q它指定了以什么做为分隔符q行分割?br /> request内设|?1,2,3,4,5",此@环的输出效果如下:<br /> 1<br /> 2<br /> 3<br /> 4<br /> 5</p> <p><span style="color: #ff0000"><c:import>导入标签</span><br /> example:<br /> <c:import url="http://127.0.0.1/struts_taglib"></c:import><br /> 此标{作用相当于jsp:include标签的作用,当前面包含url里的面?/p> <p><span style="color: #ff0000"><c:redirect>重定向标{?/span><br /> example:<br /> <c:redirect url="http://127.0.0.1/struts_taglib"></c:redirect><br /> 直接重定向至url指定地址</p> <p><br />  </p> <img src ="http://www.aygfsteel.com/zhengshuli-j2ee/aggbug/264311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhengshuli-j2ee/" target="_blank">郑舒?/a> 2009-04-07 18:59 <a href="http://www.aygfsteel.com/zhengshuli-j2ee/articles/264311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts之el表达式简单学习笔?/title><link>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264309.html</link><dc:creator>郑舒?/dc:creator><author>郑舒?/author><pubDate>Tue, 07 Apr 2009 10:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264309.html</guid><wfw:comment>http://www.aygfsteel.com/zhengshuli-j2ee/comments/264309.html</wfw:comment><comments>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhengshuli-j2ee/comments/commentRss/264309.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhengshuli-j2ee/services/trackbacks/264309.html</trackback:ping><description><![CDATA[<p>JSTL?br /> SUN的标准Taglib库,JSTL不依赖于M框架。JSTL׃部分l成标签库以及el表达式?br /> JSTL标签库有以下几部分组?br /> 核心?br /> 国际化库<br /> 格式化库<br /> XML?br /> 数据?br /> 函数标签?/p> <p>EL表达?br /> el表达式的使用Ҏ$和{}<br /> examples:<br /> 取出普通字W串<br /> ${hello} 在request范围内寻扑ֱ性名为hello的属性,q打印输出在面?br /> 作用{同?lt;bean:write>标签<br /> 如果为在表达式中制定scope,它的搜烦序为pageScope~applicationScope.</p> <p>取出l构<br /> ${user.name }<br /> ?q行DQ也叫存取器。和struts?lt;bean:write>标签的用方式非常类?/p> <p>取出map<br /> ${mapValue.key1 }<br /> mapValue为scope中的属性名,key1为map中的Key倹{?/p> <p>取出字符串数l?br /> ${strArray[1] }<br /> 取出数组用[]和下标进行导?/p> <p>取出对象数组<br /> ${users[2].name }<br /> 取出数组用[]和下标进行导?/p> <p>取出List<br /> userList[3]:${userList[3].name }<br /> 取出数组用[]和下标进行导?/p> <p>el对运符的支?br /> 1+2=${1+2 }<br /> +-*/%cM</p> <p>el判断是否为空<br /> ${empty value}<br /> empty为关键字 value为key</p> <p>在el表达式中制定scope的用方?br /> example:<br /> ${requestScope.hello } 在request范围内寻找hello</p> <img src ="http://www.aygfsteel.com/zhengshuli-j2ee/aggbug/264309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhengshuli-j2ee/" target="_blank">郑舒?/a> 2009-04-07 18:58 <a href="http://www.aygfsteel.com/zhengshuli-j2ee/articles/264309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts ModuleConfigcd载初始化的过E以及RequestProcessorcL码分?/title><link>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264263.html</link><dc:creator>郑舒?/dc:creator><author>郑舒?/author><pubDate>Tue, 07 Apr 2009 07:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264263.html</guid><wfw:comment>http://www.aygfsteel.com/zhengshuli-j2ee/comments/264263.html</wfw:comment><comments>http://www.aygfsteel.com/zhengshuli-j2ee/articles/264263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhengshuli-j2ee/comments/commentRss/264263.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhengshuli-j2ee/services/trackbacks/264263.html</trackback:ping><description><![CDATA[<p>要的对struts ActionServlet init()Ҏ以及 struts RequestProcessorcd源码分析</p> <p>首先要确定的是Servlet臛_至终只有一个对象以及init()Ҏ会在ServletW一ơ加载时被执行一ơ也是唯</p> <p>一的一ơ,所以Servlet的初始化工作一般在init()Ҏq行</p> <p><span style="color: red">一、解析ModuleConfig</span><br /> ModuleConfig装了struts-config的所有配|信?br /> actionConfigs(ActionMapping)/actionConfigList 、exceptions 、formBeans(ActionForm)、forwards</p> <p>(ActionForward)、messageResources、plugIns{?br /> // 初始化ModuleConfig配置工厂 <br /> initModuleConfigFactory(); <br /> // 由配|工厂实例化一个ModuleConfig的对?<br /> ModuleConfig moduleConfig = initModuleConfig("", config); <br /> initModuleConfig(String prefix, String paths)Ҏ做了一下事?br /> 1?ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory();<br /> q成的配置工厂生成一个工厂实?br /> 2、ModuleConfig config = factoryObject.createModuleConfig(prefix);<br /> 创徏ModuleConfig实例createModuleConfig()Ҏ会有DefaultModuleConfigFactory 执行<br /> q是在配|文件中指定的工厂类<br /> Ҏ内部new 出ModuleConfig对象<br /> 在ModuleConfig构造方法内对以下参数进行了初始?br />  </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">this</span><span style="color: #000000">.prefix </span><span style="color: #000000">=</span><span style="color: #000000"> prefix;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.actionConfigs </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();  </span><span style="color: #008000">//</span><span style="color: #008000">ActionMapping集合</span><span style="color: #008000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #000000">        </span><span style="color: #0000ff">this</span><span style="color: #000000">.actionConfigIds </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.actionConfigList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList();<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.actionFormBeanClass </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">org.apache.struts.action.ActionFormBean</span><span style="color: #000000">"</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.actionMappingClass </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">org.apache.struts.action.ActionMapping</span><span style="color: #000000">"</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.actionForwardClass </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">org.apache.struts.action.ActionForward</span><span style="color: #000000">"</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.configured </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.controllerConfig </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.exceptions </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.formBeans </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();   </span><span style="color: #008000">//</span><span style="color: #008000">ActionForm集合</span><span style="color: #008000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #000000">        </span><span style="color: #0000ff">this</span><span style="color: #000000">.forwards </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();   </span><span style="color: #008000">//</span><span style="color: #008000">ActionForward集合</span><span style="color: #008000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #000000">        </span><span style="color: #0000ff">this</span><span style="color: #000000">.messageResources </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.plugIns </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList();</span></div> <p> </p> <p>到此config构造完?br /> Digester digester = initConfigDigester(); <br /> initConfigDigester()Ҏd解析struts文g的解析规?/p> <p>3、@环struts配置文gq把所有标{ְ装ؓ相应对象填充到config对象相应的map集合中中<br /> List urls = splitAndResolvePaths(paths);<br />         URL url;<br />         for (Iterator i = urls.iterator(); i.hasNext();) {<br />             url = (URL) i.next();<br />             digester.push(config);<br />             this.parseModuleConfigFile(digester, url);<br />         }<br /> 最后getServletContext().setAttribute(Globals.MODULE_KEY<br />             + config.getPrefix(), config);<br /> 把ModuleConfig讑օServletContext?br /> xconfig初始化工作全部完?/p> <p>struts每个模块都对应一个ModuleConfig对象个,在initҎ内被初始化,内部装了模块xml?/p> <p>件中的配|?/p> <p><br /> <span style="color: red">二、struts核心cRequestProcessorc解?/span><br /> ActionServlet做ؓ前端控制器当有请求被接收Ӟ会调用process(request, response)Ҏ<br /> 1、ModuleConfig config = getModuleConfig(request);<br /> 通过Servlet上下文找到ModuleConfig对象<br /> 2、RequestProcessor processor = getProcessorForModule(config);<br /> 通过Servlet上下文找到RequestProcessor对象  --所以RequestProcessorcM是单例的<br /> if (processor == null) {<br />             processor = getRequestProcessor(config);<br />      }<br /> 如果为空 也就说明是服务器端第一ơ接收客L的接收请?br /> 那么执行getRequestProcessor(config)Ҏ生成RequestProcessorq设入ServletContext?br /> 此方法ؓ同步ҎQ借此我猜此Ҏ为生成RequestProcessor的唯一Ҏ<br /> Ҏ内部对RequestProcessor调用了init()ҎQ进行了RequestProcessor的初始化q设入ServletContext</p> <p>里?br /> Z么RequestProcessor要做成单例,原因是RequestProcessorcd部有<br /> HashMap actions = new HashMap();<br /> q样一个集合封装了所有的控制器?br /> q样的设计是面向对象的。当ActionServlet接收到请求时它需要对h分发到相应控制器?br /> 此时它获取中央控制器Q而这个中央控制器内部拥有所有控制器的引用?br /> /*<br /> q里我的疑惑是ؓ什么要通过反射生成RequestProcessorQ此cdƈ没有l承实现M接口或类?br /> processҎ最后调用了RequestProcessor的process()Ҏ。此Ҏ为RequestProcessor的核心方?br /> */原因l过学习发现RequestProcessorq不是单例的Q而实际因为struts的多模块应用模式Q导?/p> <p>RequestProcessorcL多例?/p> <p>三、解析RequestProcessorcL心方法process<br /> 1?String path = processPath(request, response);<br /> 截取客户端请求字W串相当?lt;action>标签的path属?br /> 2、ActionMapping mapping = processMapping(request, response, path);<br /> 获取控制器相对的ActionMapping 对象<br />  processMapping(request, response, path)<br />  1、ActionMapping mapping =<br />             (ActionMapping) moduleConfig.findActionConfig(path);<br />  Ҏ内部调用了moduleConfig.findActionConfig(path);<br />  ModuleConfig对象前面已做q解析,在findActionConfigҎ内部已path属性做为Key|直接 </p> <p> 到ActionConfigHashMap集合内寻找ActionMappingQ原因见一.3<br />  2.if (mapping != null) {<br />             request.setAttribute(Globals.MAPPING_KEY, mapping);</p> <p>            return (mapping);<br />         }<br />  如果扑ֈmapping那么攑օrequest中,q返?br />  3?ActionConfig[] configs = moduleConfig.findActionConfigs();</p> <p>        for (int i = 0; i < configs.length; i++) {<br />             if (configs[i].getUnknown()) {<br />                 mapping = (ActionMapping) configs[i];<br />                 request.setAttribute(Globals.MAPPING_KEY, mapping);</p> <p>                return (mapping);<br />             }<br />         }<br />  //ActionMapping说明Q和Action的unknow属性有?br /> 3、if (mapping == null) {<br />             return;<br />         }<br /> 定w处理Q说明客Lh的path路径q没有被配置<br /> 4、ActionForm form = processActionForm(request, response, mapping);<br />  processActionForm(request, response, mapping);<br />  1、ActionForm instance =<br />             RequestUtils.createActionForm(request, mapping, moduleConfig,<br />                 servlet);<br />   1、String name = mapping.getName();<br />   获得mapping name属性也是映射的相对ActionForm的name<br />   2、FormBeanConfig config = moduleConfig.findFormBeanConfig(name);<br />   已name做ؓKey值在~存的HashMap内获取相?FormBeanConfig)对象<br />   <br />   <!--对这里的一些承关pd下说?br />   struts Configcȝ基类 BaseConfig<br />   ForwardConfig从BaseConfigl承<br />   FormBeanConfig从BaseConfigl承<br />   ActionConfig从BaseConfigl承<br />   ActionMapping从ActionConfigl承<br />   --><br />   <br />   3、if (config == null) {<br />               log.warn("No FormBeanConfig found under '" + name + "'");<br />               return (null);<br />          }<br />   如果为空也就说明q没有配|相对ActionFormQ而这是合法的所以返回空<br />   4、ActionForm instance =<br />              lookupActionForm(request, attribute, mapping.getScope());<br />   此方法试囑֜request,session内寻找ActionForm<br />   5、if ((instance != null) && config.canReuse(instance)) {<br />               return (instance);<br />          }<br />   如果扑ֈ那么q回<br />   6、return createActionForm(config, servlet);<br />   如果没有扑ֈ则进行创?Ҏ传递了configQ因为config内封装了formbean标签的所 </p> <p> 有配|信息。方法可以根据类名进行反生成对象?br />  2、if ("request".equals(mapping.getScope())) {<br />             request.setAttribute(mapping.getAttribute(), instance);<br />         } else {<br />             HttpSession session = request.getSession();</p> <p>            session.setAttribute(mapping.getAttribute(), instance);<br />         }<br />  Ҏ配置信息Q把ActionForm讑օ相应作用域内<br /> 此方法作用就是获取ActionForm<br /> 5、processPopulate(request, response, form, mapping);<br /> 此方法用于做ActionForm的数据收集工?br />  1、form.reset(mapping, request);<br />  此方法用于做数据重置Q程序员可以重写此方?br />  2、RequestUtils.populate(form, mapping.getPrefix(), mapping.getSuffix(),<br />             request);<br />  调用工具c进行数据收?br />   1、if ((contentType != null)<br />              && (contentType.startsWith("multipart/form-data"))<br />              && (method.equalsIgnoreCase("POST"))) { <br />   判断是否是数据上?br />   2、if (!isMultipart) {<br />              names = request.getParameterNames();<br />          }<br />   如果不是获取request里所有参数参数名?br />   3?while (names.hasMoreElements()) { <br />             String name = (String) names.nextElement(); //循环获取参数?br />              String stripped = name;<br />              Object parameterValue = null;<br />   ...<br />              if (isMultipart) {   <br />                 parameterValue = multipartParameters.get(name);<br />                 parameterValue = rationalizeMultipleFileProperty(bean, name,    </p> <p> parameterValue);<br />              } else {  //不是上传 则获取此参数名的所有参数?br />                 parameterValue = request.getParameterValues(name);<br />              }<br />              if (!(stripped.startsWith("org.apache.struts."))) {<br />                 properties.put(stripped, parameterValue); <br />              }<br />          }<br />   Ҏ最后把参数名做为Key,所对应的所有参数值做为键值放入hashmap?br />   5、BeanUtils.populate(bean, properties);<br />   q三方工具cL据ActionForm以及所有参数名参数D行数据收?br />  3、if (!processValidate(request, response, form, mapping)) {<br />                 return;<br />             }<br />  q行数据验证Q方法内部会调用ActionForm的validateҎQ程序员可以重写此方?br />  <br /> 6、Action action = processActionCreate(request, response, mapping);<br /> 获取控制?br />  1、方法首先获取Action的类?br />  2、然后此Ҏ对actionsq行了同步处理,原因RequestProcessor是多例的Qactions是一个成 </p> <p>员变量,~存了所有action?br />  3、instance = (Action) actions.get(className);</p> <p>            if (instance != null) {<br />                 if (log.isTraceEnabled()) {<br />                     log.trace("  Returning existing Action instance");<br />                 }</p> <p>                return (instance);<br />             }<br />  试图在集合内取出action,如果不ؓI?则返回。此时说明此Action已被执行q?br />  4、instance = (Action) RequestUtils.applicationInstance(className);<br />  如果没有反射创徏Action引用?br />  5、actions.put(className, instance);<br />  最后把action攑օ集合Qƈq回?br /> 7、ActionForward forward =<br />             processActionPerform(request, response, action, form, mapping);<br /> 此方法内部调用Action的execteҎQ获取{向类?/p> <p> <!--说明cȝl关p?br />  在他的父c里?HashMap forwards = new HashMap();q样一个集?br />  q里的类l织关系是这LQActionMapping从ActionConfigl承Q?br />  ActionConfig拥有forwards 集合Q?br />  而ModuleConfig内部拥有ActionConfig集合,<br />  q和struts-config标签的组l关pL完全cM?<br />  ModuleConfig模块配置cd应一个struts配置文gQ?br />  ActionConfig控制器配|类对应一个Action标签Q?br />  ForwardConfig转向配置cd应Forward标签Q?br />  而ModuleConfig在ActionServlet初始化时被加载?br />  q里可以看出大师对类的组l的合理Q每个标{N有相应的cR?br />  --></p> <p>lg所qͼ׃forward标签属于ActionMapping标签所以在E序里,能用findForward()Ҏ扑ֈ</p> <p>ActionForward.<br /> 而在ActionConfig内部有这样一个方法addForwardConfig(ForwardConfig config)Q它已ForwardConfig ?/p> <p>name属性做为Key,ForwardConfig cd例做为值添加入~存中?br /> q也是Z么我们可以在findForward()Ҏ内通过传name属性获取相应的ActionForward实例?/p> <p>8、processForwardConfig(request, response, forward);<br /> 在processҎ的最后调用了processForwardConfig()Ҏ。完成{向操作?br /> 在这个方法内部,他根据Redirect()是否讄为true选择是进行{发还是重定向。如果没有设|,默认是进</p> <p>行{发?br /> <br /> 说明Q?br />          此篇学习W记是阅读学堂王勇老师struts视频的读后感吧,当时弟刚学习strutsQ也是个j2ee的新人就斗胆写了q篇源码的分析,今天发上来ƈ未做M删减Q错误是隑օ的,q希望各位大NLQ多多指正,不吝赐教Q!<br />         最后感谢由L感谢王勇老师Q感谢尚学堂Q!</p> <img src ="http://www.aygfsteel.com/zhengshuli-j2ee/aggbug/264263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhengshuli-j2ee/" target="_blank">郑舒?/a> 2009-04-07 15:33 <a href="http://www.aygfsteel.com/zhengshuli-j2ee/articles/264263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts Taglib单标{介l?/title><link>http://www.aygfsteel.com/zhengshuli-j2ee/articles/257867.html</link><dc:creator>郑舒?/dc:creator><author>郑舒?/author><pubDate>Wed, 04 Mar 2009 11:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/zhengshuli-j2ee/articles/257867.html</guid><wfw:comment>http://www.aygfsteel.com/zhengshuli-j2ee/comments/257867.html</wfw:comment><comments>http://www.aygfsteel.com/zhengshuli-j2ee/articles/257867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zhengshuli-j2ee/comments/commentRss/257867.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zhengshuli-j2ee/services/trackbacks/257867.html</trackback:ping><description><![CDATA[<p>struts Taglib属于视图端的技?br /> 使用标签有如下优?br /> 一、易于用,能直接代替在面上写java脚本<br /> 二、便于重?br /> <span style="color: #ff0000">struts 标签的配|?br /> </span>1、在struts-config配置文g中加入标{?<message-resources parameter="MessageResources" /><br /> 2、引入taglib标签?br />    加入<%@ taglib prefix="bean" uri="在struts-taglib.jar包下的META-INF文g夹的tld文g夹下?nbsp;  到相应标{ֺ的tld文g打开Q把uri标签中的值复制到此处" %></p> <p><bean:write>标签<br /> 相当于jsp标签 <%= %> jsp内置对象out.println()Ҏ 做输Z?br /> 在相应scope内设|??lt;bean:write>标签取出?br /> examples:<br /> 取出普通字W串<br /> <bean:write name="hello"/> <br /> name属性也是在上一面setAttribute()的key?/p> <p>以HTML文本形式做输?br /> <bean:write name="hello" filter="false"/> <br /> filter="false"文本按HTML形式取出</p> <p>格式化日期Ş式输?br /> <bean:write name="date" format="yyyy-mm-dd HH:mm:ss"/> <br /> format属性内讄日期昄的格?/p> <p>格式化数?br /> <bean:write name="num" format="###,###.0000"/> <br /> format属性内讄数字昄的格?nbsp;  数字昄格式API在java.text.DecimalFormat?/p> <p>对象l构输出<br /> 对象普通属性输?br /> <bean:write name="user" property="name"/><br /> property="name",引号内设|属性名Q需要符合javaBean规范<br /> 对象l构属性输?br /> <bean:write name="user" property="group.name"/><br /> property="group.name"Q?q行D扑ֈl构相应属?</p> <p><logic:empty><logic:notEmpty><logic:present><logic:notPresent>标签<br /> q些标签主要用于q行属性状态的判断<br /> examples:<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff"><</span><span style="color: #800000">logic:empty </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="att1"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> att1为空</span><span style="color: #0000ff"><</span><span style="color: #800000">br</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">logic:empty</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"><</span><span style="color: #800000">logic:notEmpty </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="att1"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> att1不ؓI?/span><span style="color: #0000ff"><</span><span style="color: #800000">br</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">logic:notEmpty</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"><</span><span style="color: #800000">logic:present </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="att1"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> att1存在</span><span style="color: #0000ff"><</span><span style="color: #800000">br</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">logic:present</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"><</span><span style="color: #800000">logic:notPresent </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="att1"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> att1不存?/span><span style="color: #0000ff"><</span><span style="color: #800000">br</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">logic:notPresent</span><span style="color: #0000ff">></span></div> <p><br /> null值判断ؓ不存?br /> 不存在同样判断ؓ为空<br /> I字W串判断为空Q空集合判断为空</p> <p><logic:terate>q代标签<br /> <logic:iterate id="u" name="userList"><br /> </logic:iterate><br /> 寚w合进行P代,循环取出值放在变量u?br /> examples:<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff"><</span><span style="color: #800000">logic:iterate </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="u"</span><span style="color: #ff0000"> name</span><span style="color: #0000ff">="userList"</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />  </span><span style="color: #0000ff"><</span><span style="color: #800000">tr</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />   </span><span style="color: #0000ff"><</span><span style="color: #800000">td</span><span style="color: #0000ff">><</span><span style="color: #800000">bean:write </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="u"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="name"</span><span style="color: #0000ff">></</span><span style="color: #800000">bean:write</span><span style="color: #0000ff">></</span><span style="color: #800000">td</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />   </span><span style="color: #0000ff"><</span><span style="color: #800000">td</span><span style="color: #0000ff">><</span><span style="color: #800000">bean:write </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="u"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="age"</span><span style="color: #0000ff">></</span><span style="color: #800000">bean:write</span><span style="color: #0000ff">></</span><span style="color: #800000">td</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />   </span><span style="color: #0000ff"><</span><span style="color: #800000">td</span><span style="color: #0000ff">><</span><span style="color: #800000">bean:write </span><span style="color: #ff0000">name</span><span style="color: #0000ff">="u"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="group.name"</span><span style="color: #0000ff">></</span><span style="color: #800000">bean:write</span><span style="color: #0000ff">></</span><span style="color: #800000">td</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />  </span><span style="color: #0000ff"></</span><span style="color: #800000">tr</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff"></</span><span style="color: #800000">logic:iterate</span><span style="color: #0000ff">></span></div> <img src ="http://www.aygfsteel.com/zhengshuli-j2ee/aggbug/257867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zhengshuli-j2ee/" target="_blank">郑舒?/a> 2009-03-04 19:51 <a href="http://www.aygfsteel.com/zhengshuli-j2ee/articles/257867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">»Ȱ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">ƽ½</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϻ</a>| <a href="http://" target="_blank">Į</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">պ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">绯</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">пѷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">찲</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">崨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ն</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">е</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>