﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-BloveSaga-文章分类-STRUTS</title><link>http://www.blogjava.net/blovesaga/category/11875.html</link><description>在希腊帕尔纳斯山南坡上,有一个驰名世界的戴尔波伊神托所,在它的入口处的巨石上赫然锈刻着这样几个大字: 认识你自己!</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:33:41 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:33:41 GMT</pubDate><ttl>60</ttl><item><title>Struts细节小谈</title><link>http://www.blogjava.net/blovesaga/articles/55088.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Mon, 26 Jun 2006 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/55088.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/55088.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/55088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/55088.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/55088.html</trackback:ping><description><![CDATA[
		<p>动作映射</p>
		<p>这个时候，你可能会问自己:“当控制器接受到一个请求的时候，它如何知道调用哪个Action实例?”控制器要通过查看请求消息并使用一组动作映射(action mapping)来做出决定。动作映射是Struts配置信息(配置一个特殊的XML文件中）的一部分。这个配置信息会在启动时加载到内存中，让Struts框架得以在运行时加以利用。每个action元素在内存中都被表示为org.apache.struts.action.ActionMapping类的实例。ActionMapping对象包含一个path属性，用来与外部请求的URI部分匹配。如下:<br />&lt;action <br />    path="/login"<br />    type="com.oreilly.struts.banking.action.LoginAction"<br />    scope="request"<br />    name="loginForm"<br />    validate="true"<br />    input="/login.jsp"<br />    &lt;forward name="Success" path="/action/getaccountinformation" redirect="true"/&gt;<br />    &lt;forward name="Failure" path="/login.jsp" redirect="true"/&gt;<br />&lt;/action&gt;<br />这里的登录动作映射把路径"/login"映射到了com.oreilly.struts.banking.LoginAction这个Action类。无论何时，当控制器接受到一个URI路径中包含"/login"字符串的请求时，就会调用LoginAction实例的execute()方法。Struts框架还会使用映射来指出“动作"完成后要让用户转向哪个资源。</p>
		<p> </p>
		<p>使用Struts ActionForm</p>
		<p>Struts框架的ActionForm对象可用来在用户和业务层之间传输客户的输入数据。Struts框架会自动从请求中收集输入数据，再将这些数据交给一个使用表单bean(form bean)的Action对象，接着表单再交给业务层。为了把表示层和业务层分离开来，你不应该直接把ActionForm对象交给业务层，而是应该使用由ActionForm对象得到的数据创建适当的DTO。下面的步骤说明了Struts框架如何处理每个请求相应的ActionForm对象:<br />  <br />  1.检查该项动作的相应设置，查看是否已经有某个ActionForm得到配置。<br />  2.如果对应这个动作配置了某个ActionForm，则使用action元素中的name属性来查找表单bean的配置信息。<br />  3.查看是否已经创建了一个ActionForm的一个实例。<br />  4.如果在适当的作用域内已经存在一个ActionForm实例，而且这个实例的类型正是这个请求所需要的类型，则重用这个实例。<br />  5.否则，创建所需ActionForm的一个新实例，并存储在适当的作用域中（由action元素的scope属性设置)。<br />  6.调用ActionForm实例的reset()方法。<br />  7.反复处理请求参数，如果参数名在ActionForm实例中具有对应的设置方法(setter method),就为它填上该请求参数的值。<br />  8.最后，如果validate属性的值设置为true,则调用ActionForm实例的validate()方法，并返回所出现的任何误。<br /><br />对任何HTML页面而言，如果表单数据是以POST方法传输的，就应该使用ActionForm。必要时，相同的ActionForm可以同时给多个页面使用，只要HTML字段能和ActionForm对象的属性(property)匹配就可以了。<br />Struts框架所提供的ActionForm类实现了多个方法，但到目前为止，最重要的两个方法就是reset()和validate():<br />    public void reset(ActionMapping mapping,HttpServletRequest request);<br />    public ActionErrors validate(ActionMapping mapping,HttpServletRequest request);<br />在Struts ActionForm类中，这两个方法的默认实现是不完成任何的逻辑。你必须在自己的ActionForm类中覆盖这两个方法。控制器以请求中的值来填写ActionForm实例之前，会先调用reset()方法。reset()方法给了ActionForm一个机会，可将其属性设置为原来默认的状态。这一点非常重要，因为表单bean实例可能会由多个请求共享或者由好几个不同的线程所存取。不过，如果你是让好几页共享一个ActionForm实例，可能<br />不会去想去实现reset()方法，这样一来只要这个实例还在，属性的值就不会被重新设置。另一种做法就是实现你自己的resetFields()方法，在成功更新业务之后，就从这个Action类来调用此方法。当请求中所携带的值已经插入到ActionFrom实例之后，控制器就回调用validate()方法。ActionForm应该对输入数据完成必要的验证工作，然后向控制器返回所检测到的任何错误。业务逻辑验证应该在业务对象中而不是在ActionForm中来完成。在ActionForm中所进行的验证工作，只是表示的验证而已。一旦写好ActionForm类后，你必须通知Struts应用程序有这些ActionForm存在，告诉Struts应用程序哪个动作映射应该使用哪个ActionForm。这是在配置文件中设置的。第一步是为你的应用程序在配置文件中的form-beans段里配置所有的ActionForm。看下面的一个例子:<br /><br /> &lt;form-beans&gt;<br />    &lt;form-bean<br />       name="loginForm"<br />       type="com.oreilly.struts.banking.form.LoginForm"/&gt;<br />    &lt;form-bean<br />       name="accountInformationForm"<br />       type="org.apache.struts.action.DynaActionForm"&gt;<br />       &lt;form-property name="accounts" type="java.util.ArrayList"/&gt;<br />    &lt;/form-bean&gt;<br /> &lt;/form-beans&gt;<br />每个表单bean的name属性必须都是独一无二的，而且其type属性必须定义一个Java类（扩展了Struts ActionForm类）的完全限定名。下一步是在一个或多个action元素中使用在form-benas段里的某个form-bean名。如下：<br /><br />  &lt;action<br />    path="/login"<br />    type='com.oreilly.struts.banking.action.LoginAction"<br />    scope="request"<br />    name="loginForm"<br />    validate="true"<br />    input="/login.jsp"&gt;<br />    &lt;forward name="Success" path="/action/getaccountinformation" redirect="ture&gt;<br />    &lt;forward name="Failure" path="/login.jsp" redirect="true"/&gt;<br />  &lt;/action&gt;<br />注意：登录动作映射的name正好和前面form-beans段里某个name属性相匹配。</p>
		<p> </p>
		<p>
				<br /> </p>
<img src ="http://www.blogjava.net/blovesaga/aggbug/55088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-26 11:01 <a href="http://www.blogjava.net/blovesaga/articles/55088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Web Framework综述 </title><link>http://www.blogjava.net/blovesaga/articles/53564.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Sun, 18 Jun 2006 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/53564.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/53564.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/53564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/53564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/53564.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Written by 				王海龙				 buaawhl@sina.com																						0								.												简介																																								本文介绍				Java Web Framework				的基本工作...&nbsp;&nbsp;<a href='http://www.blogjava.net/blovesaga/articles/53564.html'>阅读全文</a><img src ="http://www.blogjava.net/blovesaga/aggbug/53564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-18 10:37 <a href="http://www.blogjava.net/blovesaga/articles/53564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts入门学习之--配置 </title><link>http://www.blogjava.net/blovesaga/articles/50396.html</link><dc:creator>blovesaga</dc:creator><author>blovesaga</author><pubDate>Sun, 04 Jun 2006 22:02:00 GMT</pubDate><guid>http://www.blogjava.net/blovesaga/articles/50396.html</guid><wfw:comment>http://www.blogjava.net/blovesaga/comments/50396.html</wfw:comment><comments>http://www.blogjava.net/blovesaga/articles/50396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/blovesaga/comments/commentRss/50396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/blovesaga/services/trackbacks/50396.html</trackback:ping><description><![CDATA[    Struts Framework是一种基于Java的技术,Web应用程序开发人员通过Struts Framework即可充分利用OOP的思想,真正做到"write once,run anywhere".Struts提供了一种可创建Web应用程序的框架,其中对应用程序的显示,表示和数据的后端代码进行了抽象.<br />    作为一个程序员你必须得了解STRUTS,在之前配置是一个问题，万丈高楼从地起,基础是保障!所以我们先得让它RUN起来，然后再谈驾御它^_^!<br />    配置Struts,必须要以下的环境和工具:<br />  <br />  . JDK(Java Development Kit)<br />    可以从 http://java.sun.com/j2se 下载最新版本<br />  . Servlet容器<br />    这个容器必须支持Servlet规范2.2版或后续的版本,已经JavaServer Pages规范1.1或者更高<br />  . XML解析器<br />    支持JAXP 1.1版或者后续版.Xerces解析器正好符合此要求,可以从 http://xml.apache.org/xerces-j 下载<br />  . Xalan XSLT处理器<br />    1.2 版或者后续版本.注意,2.0 版存在一些问题.这个处理器可以把XML文件转换成HTML文档.这个处理器包含Xerces解析器.<br />    可以从 http://xml.apache.org/xalan-j/index.html 下载Xalan .<br />  . JDBC 2.0以上的package .<br /><br />    具体的配置过程:<br />  <br />  1. 新建一个WEB应用,如在Tomcat\webapps目录下新建立一个 Dalston目录.<br />  2. 将Struts中的 lib/commons-*.jar 和 lib/struts.jar 文件copy到应用中的Dalston\WEB-INF\lib目录下,然后将Struts中全部的标签库描述文件<br />     (lib/struts-*.tld) copy到Dalston\WEB-INF\tld目录下 .<br />  3. 在Dalston\WEB-INF下新建立一个web.xml文件,在文件加入以下的内容:<br />  -------------------------------------------------------------------------<br />  web.xml<br /><br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br /><br />&lt;!DOCTYPE web-app<br />  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"<br />  "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"&gt;<br /><br />&lt;web-app&gt;<br />  &lt;display-name&gt;Struts Blank Application&lt;/display-name&gt;<br />  <br />  &lt;!-- Standard Action Servlet Configuration (with debugging) --&gt;<br />  &lt;servlet&gt;<br />    &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />     &lt;init-param&gt;<br />      &lt;param-name&gt;application&lt;/param-name&gt;<br />      &lt;param-value&gt;ApplicationResources&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;config&lt;/param-name&gt;<br />      &lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    <br />    &lt;init-param&gt;<br />      &lt;param-name&gt;debug&lt;/param-name&gt;<br />      &lt;param-value&gt;2&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;detail&lt;/param-name&gt;<br />      &lt;param-value&gt;2&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />  &lt;/servlet&gt;<br /><br /><br />  &lt;!-- Standard Action Servlet Mapping --&gt;<br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br /><br /><br />  &lt;!-- The Usual Welcome File List --&gt;<br />  &lt;welcome-file-list&gt;<br />    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />  &lt;/welcome-file-list&gt;<br /><br /><br />  &lt;!-- Struts Tag Library Descriptors --&gt;<br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/struts-bean&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/struts-bean.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br /><br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/struts-html&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/struts-html.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br /><br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/struts-logic&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/struts-logic.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br /><br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/struts-nested&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/struts-nested.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br /><br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/struts-tiles&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/struts-tiles.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br />  <br />  &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/struts-template&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/struts-template.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br />   &lt;taglib&gt;<br />    &lt;taglib-uri&gt;/jstl/c&lt;/taglib-uri&gt;<br />    &lt;taglib-location&gt;/WEB-INF/tld/c.tld&lt;/taglib-location&gt;<br />  &lt;/taglib&gt;<br />  <br /><br />&lt;/web-app&gt;<br />=================================================================================================<br />  4. 修改完web.xml后,在WEB-INF目录中新建一个struts-config.xml文件.struts-config.xml内容如下:<br />struts-config.xml<br /><br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br /><br />&lt;!DOCTYPE struts-config PUBLIC<br />          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"<br />          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"&gt;<br /><br />  &lt;struts-config&gt; <br />      &lt;form-beans&gt;<br />      &lt;/form-beans&gt;<br />      &lt;global-forwards&gt;<br />      &lt;/global-forwards&gt;<br />      &lt;action-mapping&gt;<br />      &lt;/action-mapping&gt;<br />  &lt;/struts-config&gt;<br />======================================================================================================<br />做完以上的工作,我们就可以测试一下配置是否正确了.<br />在WEB-INF 目录下建立一个ApplicationResource.properties 文件,增加一个属性:<br />index.title=Struts Tutorial<br />我们写一个测试JSP文件---test.jsp,它的代码如下:<br />test.jsp<br /><br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ taglib uri="/struts-logic" prefix="logic" %&gt;<br />&lt;%@ taglib uri="/struts-bean" prefix="bean" %&gt;<br />&lt;%@ taglib uri="/struts-html" prefix="html" %&gt;<br />&lt;html:html locale="true"&gt;<br />&lt;head&gt;<br />&lt;html:base/&gt;<br />&lt;title&gt;<br />&lt;bean:message key="index.title"/&gt;<br />&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />测试我刚配置的Struts!<br />&lt;/body&gt;<br />&lt;/html:html&gt;<br />重新启动WEB服务器,在浏览器里输入测试文件所在地址:<br />http://127.0.0.1:8080/Dalston/test.jsp<br />如果配置正确那么在IE里就会输出:<br />测试我刚配置的Struts!<br />如果这样，那么你成功了，你就可以继续高阶修炼了!^_^<br /><img src ="http://www.blogjava.net/blovesaga/aggbug/50396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/blovesaga/" target="_blank">blovesaga</a> 2006-06-05 06:02 <a href="http://www.blogjava.net/blovesaga/articles/50396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>