﻿<?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-大大野猪的窝-随笔分类-Struts</title><link>http://www.blogjava.net/kylixlu/category/28323.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Jan 2008 05:40:04 GMT</lastBuildDate><pubDate>Mon, 21 Jan 2008 05:40:04 GMT</pubDate><ttl>60</ttl><item><title>Struts常见错误的全面汇总</title><link>http://www.blogjava.net/kylixlu/archive/2008/01/20/176620.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Sun, 20 Jan 2008 11:15:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/01/20/176620.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/176620.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/01/20/176620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/176620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/176620.html</trackback:ping><description><![CDATA[1、&#8220;No bean found under attribute key XXX&#8221;
<p><font face="Times New Roman">　　在struts-config.xml里定义了一个ActionForm，但type属性指定的类不存在，type属性的值应该是Form类的全名。或者是，在Action的定义中，name或attribute属性指定的ActionForm不存在。</font></p>
<p><font face="Times New Roman">　　2、&#8220;Cannot find bean XXX in any scope&#8221;</font></p>
<p><font face="Times New Roman">　　在Action里一般会request.setAttribute()一些对象，然后在转向的jsp文件里(用tag或request.getAttribute()方法)得到这些对象并显示出来。这个异常是说jsp要得到一个对象，但前面的Action里并没有将对象设置到request(也可以是session、servletContext)里。</font></p>
<p><font face="Times New Roman">　　可能是名字错了，请检查jsp里的tag的一般是name属性，或getAttribute()方法的参数值;或者是Action逻辑有问题没有执行setAttribute()方法就先转向了。</font></p>
<p><font face="Times New Roman">　　还有另外一个可能，纯粹是jsp文件的问题，例如会指定一个id值，然后在循环里使用这个值作为name的值，如果这两个值不同，也会出现此异常。(都是一个道理，request里没有对应的对象。)</font></p>
<p><font face="Times New Roman">　　3、&#8220;Missing message for key "XXX"&#8221;</font></p>
<p><font face="Times New Roman">　　缺少所需的资源，检查ApplicationResources.properties文件里是否有jsp文件里需要的资源，例如：</font></p>
<p><font face="Times New Roman">　　这行代码会找msg.name.prompt资源，如果AppliationResources.properties里没有这个资源就会出现本异常。在使用多模块时，要注意在模块的struts-config-xxx.xml里指定要使用的资源文件名称，否则当然什么资源也找不到，这也是一个很容易犯的错误。</font></p>
<p><font face="Times New Roman">　　4、&#8220;No getter method for property XXX of bean teacher&#8221;</font></p>
<p><font face="Times New Roman">　　这条异常信息说得很明白，jsp里要取一个bean的属性出来，但这个bean并没有这个属性。你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对：</font></p>
<p><font face="Times New Roman">　　5、&#8220;Cannot find ActionMappings or ActionFormBeans collection&#8221;</font></p>
<p><font face="Times New Roman">　　待解决。</font></p>
<p><font face="Times New Roman">　　6、&#8220;Cannot retrieve mapping for action XXX&#8221;</font></p>
<p><font face="Times New Roman">　　在.jsp的</font></p>
<p><font face="Times New Roman">　　标签里指定action='/XXX'，但这个Action并未在struts-config.xml里设置过。</font></p>
<p><font face="Times New Roman">　　7、HTTP Status 404 - /xxx/xxx.jsp</font></p>
<p><font face="Times New Roman">　　Forward的path属性指向的jsp页面不存在，请检查路径和模块，对于同一模块中的Action转向，path中不应包含模块名;模块间转向，记住使用contextRelative="true"。</font></p>
<p><font face="Times New Roman">　　8、没有任何异常信息，显示空白页面</font></p>
<p><font face="Times New Roman">　　可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。</font></p>
<p><font face="Times New Roman">　　9、&#8220;The element type "XXX" must be terminated by the matching end-tag "XXX".&#8221;</font></p>
<p><font face="Times New Roman">　　这个是struts-config.xml文件的格式错误，仔细检查它是否是良构的xml文件，关于xml文件的格式这里就不赘述了。</font></p>
<p><font face="Times New Roman">　　10、&#8220;Servlet.init() for servlet action threw exception&#8221;</font></p>
<p><font face="Times New Roman">　　一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息，其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下：</font></p>
<p><font face="Times New Roman">　　java.lang.NullPointerException</font></p>
<p><font face="Times New Roman">　　at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)</font></p>
<p><font face="Times New Roman">　　at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)</font></p>
<p><font face="Times New Roman">　　为解决问题，先下载struts的源码包，然后在ActionServlet.java的第1003行插入断点，并对各变量进行监视。很丢人，我竟然把struts-config.xml文件弄丢了，因此出现了上面的异常，应该是和CVS同步时不小心删除的。</font></p>
<p><font face="Times New Roman">　　11、&#8220;Resources not defined for Validator&#8221;</font></p>
<p><font face="Times New Roman">　　这个是利用Validator插件做验证时可能出现的异常，这时你要检查validation.xml文件，看里面使用的资源是否确实有定义，form的名称是否正确，等等。</font></p>
<img src ="http://www.blogjava.net/kylixlu/aggbug/176620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2008-01-20 19:15 <a href="http://www.blogjava.net/kylixlu/archive/2008/01/20/176620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发框架：利用STRUTS实现国际化支持</title><link>http://www.blogjava.net/kylixlu/archive/2007/12/28/171078.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Fri, 28 Dec 2007 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2007/12/28/171078.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/171078.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2007/12/28/171078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/171078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/171078.html</trackback:ping><description><![CDATA[<div id="article">
<p><font face="Times New Roman">一.JSP页面部分</font></p>
<p><font face="Times New Roman">　　1. 页面文字处理</font></p>
<p><font face="Times New Roman">　　1.1概述</font></p>
<p><font face="Times New Roman">　　由于STRUTS提供了很好的国际化的支持，因此JSP页面可以STRUTS的这一特性做到国际化。</font></p>
<p><font face="Times New Roman">　　STRUTS允许将不同语言的文字写在多个资源文件中，每个资源对应一种语言，而在JSP页面上则通过STRUTS标签&lt; bean:message&gt;来显示文字，该标签可以根据浏览器的当前语言设置确定从对应的语种资源文件中取出字符串，显示在页面上。</font></p>
<p><font face="Times New Roman">　　1.2资源文件</font></p>
<p><font face="Times New Roman">　　实现国际化，首先需要准备好资源文件，需要支持的语言各对应一个。资源文件一定要用支持多国语言文字的文本编辑器(如WORD，一定不能用NOTEPAD、UE等)编写，其格式如下：</font></p>
<p><font face="Times New Roman">　　# Project international</font></p>
<p><font face="Times New Roman">　　index.title=XX信息系统</font></p>
<p><font face="Times New Roman">　　index.copyright=XXX有限公司 版权所有</font></p>
<p><font face="Times New Roman">　　其中以#开头的行是注释，其它的行都是KEY=VALUE的形式，定义了一个KEY对应当前语言下的文字。保存资源文件时，需要在文件类型选项中选择纯文本类型，编码选择其它&gt;&gt;UTF-8，注意资源文件的扩展名为.properties，文件名可以任意取。</font></p>
<p><font face="Times New Roman">　　这样保存的资源文件还不能直接被STRUTS使用，JDK提供了一个工具native2ascii对编写的资源文件进行转换，该工具位于%JDK%/bin/目录下，一般在JDK正确安装后可以直接在命令行使用。使用native2ascii工具转换的资源的文件的命令行格式如下：</font></p>
<p><font face="Times New Roman">　　native2ascii -encoding UTF-8 ApplicationResources.properties ApplicationResources_zh_CN.properties</font></p>
<p><font face="Times New Roman">　　其中-encoding参数指明编写的资源文件的编码格式，这里必须与编辑时选择保存的编码格式一致，后面两个参数分别是需要转换的资源文件名和转换后保存的资源文件名。</font></p>
<p><font face="Times New Roman">　　转换后的资源文件名都必须以一个特定的前辍开头，该前辍写在struts-config.xml配置中，后辍是对应语言的简称，如</font></p>
<p><font face="Times New Roman">　　英文(美国) ApplicationResources _en_US.properties</font></p>
<p><font face="Times New Roman">　　中文(简体)ApplicationResources _zh_CN.properties</font></p>
<p><font face="Times New Roman">　　中文(繁体)ApplicationResources _tw.properties</font></p>
<p><font face="Times New Roman">　　泰语 ApplicationResources _th.properties</font></p>
<p><font face="Times New Roman">　　资源文件的存放目录可以是/WEB-INF/classes/下的任意目录，为了便于管理 ，建议在/WEB-INF/ classes/下建立目录resources，将所有的资源文件都放在该目录下。STRUTS通过配置文件struts-config.xml配置资源文件的所在位置，如：</font></p>
<p><font face="Times New Roman">　　&lt; message-resources parameter="resources.ApplicationResources" /&gt;</font></p>
<p><font face="Times New Roman">其中目录以包的方式表示。</font></p>
<p><font face="Times New Roman">　　1.3 JSP页面显示</font></p>
<p><font face="Times New Roman">　　为了支持国际化，JSP页面的编码方式需要设成UTF-8，即在页面的头部加入以下几行：</font></p>
<p><font face="Times New Roman">　　&lt; %@ page contentType="text/html; charset=UTF-8" %&gt;</font></p>
<p><font face="Times New Roman">　　&lt; %@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %&gt;</font></p>
<p><font face="Times New Roman">　　&#8230;&#8230;(STRUTS及其它标签库引用)</font></p>
<p><font face="Times New Roman">　　&lt; html:html locale="true"&gt;</font></p>
<p><font face="Times New Roman">　　JSP页面的中文字要全部写到资源文件中，注意每种语言资源文件都要写到，否则在使用某种语言访问系统时可能会报错。JSP中使用STRUTS标签&lt; bean:message key="index.title"/&gt;显示资源文件中定义的字符串。这样当改变浏览器的当前语言后，页面会自动取得与浏览器当前语言对应的资源文件中的字符串显示在页面上。</font></p>
<p><font face="Times New Roman">　　对于在ACTION的JAVA代码中直接设置的变量，如需要在JSP页面上进行显示，那么在设置变量时也需要从资源文件中通过KEY取到当前语言的字符串，再使用request.setAttribute方法进行设置，这样在JSP页面上使用&lt; bean:write&gt;标签展现设置的变量才会对应不同的语言会呈现不同的字符串。</font></p>
<p><font face="Times New Roman">　　在JAVA代码中取资源文件的信息的方法是，首先通过Globals.MESSAGES_KEY从request或session变量中取得资源对象(MessageResources)，再调用MessageResources.getMessage方法即可取得相应的字符串，该方法需的两个参数是当前语言区域设置(Locale)和字符串的KEY，其中当前语言区域设置(Locale)保存在SESSION变量中，其变量名为Globals.LOCALE_KEY，该变量在下一节手工设置语言时也有提到。</font></p>
<p><font face="Times New Roman">　　1.4手工设置显示语言</font></p>
<p><font face="Times New Roman">　　用浏览器的语言设置来决定系统采用哪种语言展现可能会出现一个问题，就是用户的浏览器语言与他想要使用系统的语言不一致的情况，如某客户浏览器的语言设置为英文，但他还是在使用主站系统时看到的是中文界面。该问题可以通过手工选择语言来解决，在程序中可以通过设置名为Globals.LOCALE_KEY(Globals.LOCALE_KEY 是 struts的常量)的SESSION变量，也能改变系统中当前语言的设置，代码类似于：</font></p>
<p><font face="Times New Roman">　　 Locale newLocale = new Locale( language, country ); <br />
　　session.setAttribute( Globals.LOCALE_KEY, newLocale ); <br />
　　其中变量language, country 可以通过用户的选择设置相应的值，各种语言的对应值参考http://www.unicode.org/unicode/onlinedat/countries.html。</font></p>
<p><font face="Times New Roman">　　2. 带有文字的图片处理</font></p>
<p><font face="Times New Roman">　　2.1静态图片</font></p>
<p><font face="Times New Roman">　　带有文字的图片应该也要根据语言的不同而显示不同的图片，但图片本身不是文本信息，无法直接用&lt; bean:message&gt;标签来完成国际化操作。但由于页面上显示图片取决于&lt; image&gt;标签的src属性，因此可以为每个图片对应各种语言的都准备一个版本，文件名或路径有所差异，然后将每种语言对应的图片的路径及文件名放在资源文件中，而在JSP页面上&lt; image&gt;标签的src属性由&lt; bean:message&gt;标签指定，这样即可以完成图片的国际化。</font></p>
<p><font face="Times New Roman">　　2.2 JAVA生成动态图片</font></p>
<p><font face="Times New Roman">　　由于生成动态图片是在服务器端进行，因此同样需要将生成图形字符的静态部分放在资源文件中，如图形名称等，从资源文件中取字符串的方法在JSP页面显示部分已有说明;从数据库中取出的部分可以不用做任何处理，直接从数据库取出与静态部分拼装成图形字符串即可，数据库相关设置在数据库部分有详细说明。</font></p>
<p><font face="Times New Roman">　　3. 页面提交参数处理</font></p>
<p><font face="Times New Roman">　　页面上向WEB服务器提交参数有两种方式，一是在访问URL后面附加上request变量，这样的变量在服务器端可以通过request.getParameter方法得到，另一种方式是在JSP页面上用FORM表单方式提交，这种方法提交的变量在服务器端可以通过form的getXXX方法取到变量的值。</font></p>
<p><font face="Times New Roman">　当WEB系统需要国际化时，JSP页面的编码方式被指定为UTF-8(前面已有说明)，也就是说页面上可以处理各国文字，在使用URL传递变量时需要将变量用JS方法encodeURI方法处理过，才能在服务器端得到正确的值，如</font></p>
<p><font face="Times New Roman">　　location.href="int/do/common/queryUserInfo.do?sqlcode=QUERY0001&amp;hh="+encodeURI(document.all.hh.value)+"&amp;hm="+encodeURI(document.all.hm.value)+"&amp;bmbh="+encodeURI(document.all.bmbh.value);</font></p>
<p><font face="Times New Roman">　　由于这种方式需要对每个request变量调用encodeURI方法，处理起来比较麻烦，但用FORM表单提交的方式即不需要进行任何处理，因此在开发时应尽量使用FORM表单提交的方式进行数据传递。</font></p>
<p><font face="Times New Roman">　　如果需要JAVA代码中生成URL，则其中传递的参数也需要调用URLEncoder.encode方法进行处理，并指定编码方式为"UTF-8"。</font></p>
<p><font face="Times New Roman">　　在服务器端取得客户端传递的参数时也需要对参数进行字符集的转换后才可以下确使用，如</font></p>
<p><font face="Times New Roman">　　strString = new String(strString.getBytes("ISO-8859-1"), "GBK");</font></p>
<p><font face="Times New Roman">　　但如此对每个变量都需要这样处理也是非常麻烦，实际上可以利用servlet的Filter机制进行统一处理。在调用servlet(包括struts)时，在到达实际的servlet类前，会首先调用指定的Filter进行处理，Filter处理完成后再决定是否交给实际请求的servlet类处理。</font></p>
<p><font face="Times New Roman">　　利用这一点，我们可以新建一个类继承自Filter基类，重载doFilter方法，并在该方法中加入</font></p>
<p><font face="Times New Roman">　　request.setCharacterEncoding(&#8220;UTF-8&#8221;);</font></p>
<p><font face="Times New Roman">　　指定客户端的字符集为UTF-8(默认客户端的字符集为ISO8859)，这样在ACTION类中取得的参数就不需要进行任何的转换处理了。</font></p>
<p><font face="Times New Roman">　　配置Filter的地方在web.xml，在web.xml文件中加入类似这样的配置即可以使自定义的Filter生效：</font></p>
<p><font face="Times New Roman">　 　&lt; filter&gt; <br />
　　&lt; filter-name&gt;charsetfilter&lt; /filter-name&gt; <br />
　　&lt; filter-class&gt; international.CharsetFilter&lt; /filter-class&gt; <br />
　　&lt; init-param&gt; <br />
　　&lt; param-name&gt;encoding&lt; /param-name&gt; <br />
　　&lt; param-value&gt;UTF-8&lt; /param-value&gt; <br />
　　&lt; /init-param&gt; <br />
　　&lt; /filter&gt; <br />
　　&lt; filter-mapping&gt; <br />
　　&lt; filter-name&gt;charsetfilter&lt; /filter-name&gt; <br />
　　&lt; url-pattern&gt;/*&lt; /url-pattern&gt; <br />
　　&lt; /filter-mapping&gt; <br />
　　二.数据库设置</font></p>
<p><font face="Times New Roman">　　在数据库建库时需要将数据库的字符集指定为unicode编码类型，以支持多种语言。</font></p>
<p><font face="Times New Roman">　　有一点需要特别说明的是UTF-8是用3个字节表示一个汉字，这点在进行表结构设计时需要注意，适当设置字段的长度。</font></p>
</div>
<img src ="http://www.blogjava.net/kylixlu/aggbug/171078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2007-12-28 09:54 <a href="http://www.blogjava.net/kylixlu/archive/2007/12/28/171078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts配置文件详细讲解</title><link>http://www.blogjava.net/kylixlu/archive/2007/12/27/170991.html</link><dc:creator>陆昱相</dc:creator><author>陆昱相</author><pubDate>Thu, 27 Dec 2007 13:23:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2007/12/27/170991.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/170991.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2007/12/27/170991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/170991.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/170991.html</trackback:ping><description><![CDATA[Struts应用采用两个基于XML的配置文件来配置,分别是web.xml和struts-cofig.xml文件.web.xml文件是配置所有web应用的而struts-config.xml文件是struts专用的配置文件,事实上也是可以根据需要给这个配置文件起其他名称的. <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Web应用的发布描述文件:
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; web应用发布描述文件可以在应用开着者,发布者和组装者之间传递配置信息,Web容器在启动的时候从该文件中读取配置信息,根据它来装载和配置web应用.文档类型定义DTD对XML文档的格式做了定义,DTD吧XML文档划分为元素,属性,实体每一种XML文档都有独自的DTD文件.可以从网上下载.&lt;web-app&gt;元素是web.xml的根元素,其他元素必须嵌入在&lt;web-app&gt;元素之内.要注意的是子元素也是有顺序的比如必须是首先&lt;servlet&gt;,然后&lt;servlet-mapping&gt;最后&lt;taglib&gt;.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为Struts应用配置Web.xml文件:</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先最重要的一步是配置ActionServlet,这个用&lt;servlet&gt;标签的servlet-name属性起一个名字叫action,然后用servlet-class属性指定ActionServlet的类.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后用&lt;servlet-mapping&gt;标签的servlet-name属性指定action,在用url-pattern指定接收范围是*.do的请求.不管应用中包含了多少子应用,都只需要配置一个ActionServlet,类来出来应用中的不同的功能,其实者就是不必要的,因为Servlet本身就是多线程的,而且目前Struts只允许配置一个ActionServlet.声明ActionServlet的初始化参数:&lt;servlet&gt;的&lt;init-param&gt;子元素用来配置Servlet的初始化参数.param-name设置config参数名.param-value设置struts-config.xml的路径参数值.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置欢迎使用清单:</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果客户访问Web的时候值是访问了WEB应用的根目录URL.没有具体的指定文件,Web会自动调用Web的欢迎文件.&lt;welcome-file-list&gt;元素来配置的.通过其中的&lt;welcome-file&gt;欢迎页面&lt;/welcome-file&gt;来配置.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置错误处理:</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 尽管Struts框架功能强大的错误处理机制,但是不能保证处理所有的错误或者异常.当错误发生时,如果框架不能处理这种错误,把错误抛弃给Web容器,在默认的情况下web容器会想客户端返回错误信息.如果想避免让客户看到原始的错误信息,可以在Web应用发布描述文件中配置&lt;error-page&gt;元素.通过&lt;error-code&gt;404来定义错误的类型.然后通过&lt;location&gt;要处理错误的JSP页面来对错误进行处理.还可以用&lt;exception-type&gt;来设置异常,然后通过&lt;location&gt;来处理异常的JSP页面来处理异常.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置Struts标签库:</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个就和以前学到的JSP自定义标签类似,配置元素为&lt;taglib&gt;来配置.&lt;taglib-uri&gt;这个指定标签库的uri,类似起一个名称.&lt;taglib-location&gt;这个是标签库的位置也就是实际所在的路径.通过这样的方法引入一个标签库,然后在前台JSP页面就可以通过自己定义的URI来调用标签.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struts配置文件:</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struts-config.xml文件.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先研讨一下org.apache.struts.config包,在struts应用启动的时候会把Struts配置文件信息读取到内存中,并把它们存放在config包中相关的JavaBean类的实例中.包中的每一个类都和struts配置文件中特定的配置元素对应,ModuleConfig在Struts框架中扮演了十分重要的角色,它是整个config包的核心,在Struts运行时来存放整个应用的配置信息.如果有多个子应用都会有一个ModuleConfig对象,它和Struts文件根元素的&lt;struts-config&gt;对应.根元素中包含&lt;form-bean&gt;&lt;action&gt;&lt;forward&gt;等元素.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;struts-config&gt;元素:时Struts配置文件的根元素,和它对应的配置类ModuleConfig类,&lt;struts-config&gt;元素有8个子元素.他们的DTD定义是data-sources?form-bean? global-exception?global-forwards?action-mapping?controller?message-resources?plug-in*在Struts配置文件中,必须按照DTD指定的先手顺序来配置&lt;struts-config&gt;元素的各个子元素,如果颠倒了这些子元素的顺序,会产生错误.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;data-sources&gt;元素:用来配置应用所需要的数据源,数据源负责创建和特定的数据库的连接.许多数据源采用连接池的机制实现.以便提高数据库访问的性能.JAVA语言提供了javax.sql.DataSource接口,所有的数据源都必须实现这个接口.许多应用服务器和Web服务器都提供了数据源组件.很多数据库厂商也提供了数据源的实现.&lt;data-sources&gt;元素包含多个&lt;data-source&gt;子元素永远配置特定的数据源.他们可以包含多个&lt;set-property&gt;子元素用于设置数据源的各种属性.配置了数据源以后,就可以在Action类中访问数据源,在Action中定义了getDataSource(HttpRequest)方法,用于获取数据源对象的引用.然后可以利用DataSource对象调用getConnection获取一个连接对象对数据库进行操作.在配置文件中声明多个数据源的时候需要为每一个数据源分配唯一的Key值,通过这个来表示特定的数据源.获取特定的数据源的时候可以用dataSource = getDataSource(reqeust,&#8221;A&#8221;);</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form-beans&gt;元素:用来配置多个ActionForm,包含一个或者N个&lt;form-bean&gt;子元素.每个&lt;form-bean&gt;元素都包含多个属性.className指定和&lt;form-bean&gt;匹配的类.name指定该ActionForm的唯一标识符,这个属性是必须的以后作为引用使用.type指定ActionForm类的完整类名,这个属性也是必须的.注意包名也要加上.&lt;form-property&gt;是指定动态的Form的元素,以后会深入了解.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;global-exception&gt;元素:用于配置异常处理,元素可以包含一个或者多个&lt;exception&gt;元素,用来设置JAVA异常和异常处理类ExceptionHandler之间的映射.className指定和元素对应的配置类,默认的不用动.handler指定异常处理类默认是ExceptionHandler.key指定在本地资源文件中异常的消息Key,path指定当前异常发生的时候转发的路径.scope指定ActionMessages实例存放的范围.type指定需要处理异常类的名字,必须的.bundle指定Resource Bundle.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;global-forwards&gt;元素:用来声明全局转发,元素可以有一个或者N个&lt;forward&gt;元素组成,用于把一个逻辑名映射到特定的URL,通过这种方法Action类或者JSP页面无需指定URL,只要指定逻辑名称就可以实现请求转发或者重定向.这样可以减少控制组件和视图的聚合.易于维护.className对应的配置类.contextRelative如果为true表示当path属性以/开头的时候,给出的是对应的上下文URL默认是false.name转发路径的逻辑名,必须写.path转发或者重定向的URL,必须写必须是以/开头.redirect设置为true的时候表示执行重定向操作,此项为false的时候,表示执行请求转发操作.重定向与请求转发的区别以后就是重定向是把请求生成应答给客户端然后在重新发送给定向的URL,浏览器地址栏会有显示.而转发就是直接把请求转发给本应用的另一个文件,不生成应答所以客户端IE没显示.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action-mapping&gt;元素:包含一个或者N个&lt;action&gt;元素,描述了从特定的请求路径到响应的Action的映射.在&lt;action&gt;元素中可以包含多个&lt;exception&gt;和&lt;forward&gt;子元素,他们分别配置局部异常处理和局部转发.attribute设置Action关联的ActionForm在request或者session范围内的key.就是在request或者session共享内的名称.className对应配置元素的类.默认的是ActionMapping.forward指定转发URL路径include指定包含URL路径.input指定包含表单的URL,当表单验证失败的时候发送的URL.name,指定和该Action关联的Form名字.该名字必须是在form-bean中定义过的,可写可不写.path必须/开头的方位Action的路径.parameter指定Action配置参数.在Action的execute()方法中可以调用ActionMapping的getParameter()方法来读取匹配的参数.roles指定允许调用该Action的安全角色,多个角色之间逗号格开.scope指定Form的存在范围.默认是session.tyep指定Action的完整类名.unknown如果是true表示可以处理用户发出的所有的无效的ActionURL默认是false.validate指定是否调用ActionForm的validate方法.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;controller&gt;元素:用于配置ActionServlet.buffreSize指定上载文件的输入缓冲大小.该属性为可选默认4096.className指定元素对应的配置类,ControllerConfig.然后是contentType指定响应结果内容类型和字符编码,该属性为可选,默认是text/html如果在Action或者JSP网页也设置了类型内容,会覆盖这个.locale指定是否把Locale对象保存到当前用户的session中默认false.tempDir指定处理文件上载的临时工作目录.nochache如果是true在响应结果中加入特定的头参数.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message-resources&gt;元素:用来配置Resource Bundle.用于存放本地文本消息文件.className元素对应的配置类.MessageResourcesConfig.factory指定消息的工厂类.key指定文件存放的Servlet对象中采用的属性Key.null指定如何处理未知消息.parameter指定消息的文件名.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;plug-in&gt;元素:用于配置Struts插件.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置多应用模块:所有的子应用都可以共享同一个ActionServlet实例,但是每个子应用都有单独的配置文件.把应用划分为多个子应用模块.首先为每个应用创建单独的Struts配置文件,在web.xml的ActionServlet配置代码中添加几个子应用信息.采用&lt;forward&gt;元素来实现应用之间的切换.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Digester组件:是一个Apache的另一个开源代码项目.当Struts被初始化的时候,首先会读取并解析配置文件,框架采用Digester组件来且西配置文件.然后创建config包中的对象.者对象用于存放配置信息.</font></p>
<p><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实配置文件不难,只要都理其中的原理就OK了.真正实际的项目开发中,采用的工具例如Eclipse系列,提供了相应的插件,在创建一个Struts工程的时候配置文件的标签都是自动生成的,而我们只需要往里面填写属性就OK了. </font></p>
<img src ="http://www.blogjava.net/kylixlu/aggbug/170991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">陆昱相</a> 2007-12-27 21:23 <a href="http://www.blogjava.net/kylixlu/archive/2007/12/27/170991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>