﻿<?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-业精于勤荒于嬉，行成于思毁于随-文章分类-MVCFramework</title><link>http://www.blogjava.net/produ/category/54579.html</link><description>&lt;h2&gt;见证学习的轨迹，记录闪光的想法&lt;/h2&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 01 Apr 2015 02:39:37 GMT</lastBuildDate><pubDate>Wed, 01 Apr 2015 02:39:37 GMT</pubDate><ttl>60</ttl><item><title>温故知新:springMVC_02参数传递</title><link>http://www.blogjava.net/produ/articles/424006.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 31 Mar 2015 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/424006.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/424006.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/424006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/424006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/424006.html</trackback:ping><description><![CDATA[后续记录<img src ="http://www.blogjava.net/produ/aggbug/424006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-03-31 23:56 <a href="http://www.blogjava.net/produ/articles/424006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:springMVC_01初步</title><link>http://www.blogjava.net/produ/articles/424005.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Tue, 31 Mar 2015 15:55:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/424005.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/424005.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/424005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/424005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/424005.html</trackback:ping><description><![CDATA[框架的使用和学习，总要从环境的搭建和第一个实例做起。<br /><strong>1：类库的引用，新建一个maven项目，将springMVC的依赖添加进来</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;springMVC&nbsp;dependency</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.springframework<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>spring-webmvc<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>4.0.3.RELEASE<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">6</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span></div><strong>2：在web.xml中添加springMVC的控制器<br /></strong><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">servlet</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">servlet-name</span><span style="color: #0000FF; ">&gt;</span>demo<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">servlet-name</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">servlet-class</span><span style="color: #0000FF; ">&gt;</span>org.springframework.web.servlet.DispatcherServlet<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">servlet-class</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">servlet</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">5</span>&nbsp;<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">servlet-mapping</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">servlet-name</span><span style="color: #0000FF; ">&gt;</span>demo<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">servlet-name</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000FF; ">&gt;</span>/<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">9</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">servlet-mapping</span><span style="color: #0000ff;">&gt;</span></div><strong>3：添加springMVC的配置文件，注意：文件的名字需要是xxx-servlet，xxx就是刚才web.xml中添加的控制器的名称<br /></strong><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&nbsp;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:mvc</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/mvc"</span><span style="color: #FF0000; ">&nbsp;xmlns:context</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:util</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/util"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context&nbsp;http://www.springframework.org/schema/context/spring-context-3.0.xsd&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/mvc&nbsp;http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/util&nbsp;http://www.springframework.org/schema/util/spring-util-3.0.xsd"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;激活@Controller模式&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mvc:annotation-driven&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;对包中的所有类进行扫描，以完成Bean创建和自动依赖注入的功能&nbsp;需要更改&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context:component-scan&nbsp;</span><span style="color: #FF0000; ">base-package</span><span style="color: #0000FF; ">="com.demo.*"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;默认采用BeanNameViewResolver的请求解析方式，即<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;name="/hello.html"&nbsp;class="XXXpackage.XXXclass"/&gt;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的方式进行请求映射，该配置默认开启，不写亦可，这里采用注解映射<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;注解方式的请求映射&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;视图的映射，这里需要根据controller的返回值来确定视图&nbsp;</span><span style="color: #008000; ">--&gt;</span><br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="viewResolver"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.web.servlet.view.InternalResourceViewResolver"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="prefix"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>/WEB-INF/jsp/<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="suffix"</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>.jsp<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000ff;">&gt;</span><br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">34</span>&nbsp;<br /><span style="color: #008080; ">35</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">36</span>&nbsp;</div><strong>4：添加一个控制器</strong><br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;com.duyt.controllor;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.stereotype.Controller;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.web.bind.annotation.RequestMapping;<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">注明当前这个类是控制器，项目启动时会被扫描</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; "></span>@Controller<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">该类的请求映射，为"/"</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #008000; "></span>@RequestMapping("/")<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HelloControllor&nbsp;{<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">该方法的请求映射，需要将类的请求映射和方法的请求映射拼接起来，也就是"/hello"（类的请求映射为"/"）</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping("/hello")<br /><span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;Hello(){<br /><span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">视图的响应，根据配置文件的配置，会在WEB-INF/jsp文件夹中查找以hello为名称，.jsp结尾的视图文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;"hello";<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">19</span>&nbsp;}<br /><span style="color: #008080; ">20</span>&nbsp;</div>视图就省略了，以上就是使用springMVC的流程，这篇就不记录其他相关的功能了，传参，异常，文件上传等功能后续再整理，这里就只是记录一个最简单的体验案例。<img src ="http://www.blogjava.net/produ/aggbug/424005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2015-03-31 23:55 <a href="http://www.blogjava.net/produ/articles/424005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_09其他功能：异常的处理</title><link>http://www.blogjava.net/produ/articles/419438.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Mon, 03 Nov 2014 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419438.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419438.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419438.html</trackback:ping><description><![CDATA[针对运行时产生的异常，除了try/catch捕获之后进行自定义处理，还可以考虑使用struts2提供的全局结果集。<br /><hr />Action：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; "> demo.action;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;HelloWorld&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;execute()&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">模拟一个异常</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">throw</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Exception(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Exception&nbsp;test</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">success</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "></span></div>struts.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.3//EN"<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.3.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constant&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="struts.devMode"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">package&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="helloworld"</span><span style="color: #FF0000; ">&nbsp;extends</span><span style="color: #0000FF; ">="struts-default"</span><span style="color: #FF0000; ">&nbsp;namespace</span><span style="color: #0000FF; ">="/"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">global-results</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;指定一个页面作为异常页面&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="error"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/error.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">global-results</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">global-exception-mappings</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;配置需要捕获的异常类型，以及返回结果&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">exception-mapping&nbsp;</span><span style="color: #FF0000; ">result</span><span style="color: #0000FF; ">="error"</span><span style="color: #FF0000; ">&nbsp;exception</span><span style="color: #0000FF; ">="Exception"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">global-exception-mappings</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="hello"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="demo.action.HelloWorld"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="success"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/helloWorld.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">package</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">&nbsp; <br /></span></div>全局异常结果集的配置很简便，可以配置一些404或者一些通用的异常页面，在页面中使用${exception.message}就可以获得异常信息。<img src ="http://www.blogjava.net/produ/aggbug/419438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-11-03 10:37 <a href="http://www.blogjava.net/produ/articles/419438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_08其他功能：表单验证</title><link>http://www.blogjava.net/produ/articles/419427.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Mon, 03 Nov 2014 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419427.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419427.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419427.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419427.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419427.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 其实，struts2的表单验证感觉真的好鸡肋，要不是为了系统的整理一下struts2的功能，根本不会去想它，抽取一个官方的例子吧。struts2的验证分为客户端和服务端，可以通过注解和配置文件的方式去配置，以下是通过配置文件的方式定义一个Action，自定义的Action必须继承ActionSupport才能使得校验生效Code highlighting produced by Actipro C...&nbsp;&nbsp;<a href='http://www.blogjava.net/produ/articles/419427.html'>阅读全文</a><img src ="http://www.blogjava.net/produ/aggbug/419427.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-11-03 09:50 <a href="http://www.blogjava.net/produ/articles/419427.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_07其他功能：国际化</title><link>http://www.blogjava.net/produ/articles/419400.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sun, 02 Nov 2014 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419400.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419400.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419400.html</trackback:ping><description><![CDATA[说起国际化，第一次接触的时候感到这个功能很神奇，起初很天真的以为是什么国际通讯之类的功能，其实不是的。。。这个功能用中文叫国际化，英文里就有一个很高大上的称呼，叫i18n，其实i18n就是internationalization的偷懒写法，听起来很有逼格。除了i18n，L10n（localization），g11n（globalization），还有m17n（multilingualization），这些解决方案都是为了能让站点的页面能够适应多国语言，当然，如果有必要的话。<br /><hr />其实多语言问题，Java本身就提供了解决方案，util工具包中ResourceBundle就可以解决该问题，ResourceBundle的说明如下写道<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">......<br />This&nbsp;allows&nbsp;you&nbsp;to&nbsp;write&nbsp;programs&nbsp;that&nbsp;can: <br /></span><ul><li><span style="color: #000000; ">be&nbsp;easily&nbsp;localized,&nbsp;or&nbsp;translated,&nbsp;into&nbsp;different&nbsp;languages&nbsp;</span></li><li><span style="color: #000000; ">handle&nbsp;multiple&nbsp;locales&nbsp;at&nbsp;once&nbsp;</span></li><li><span style="color: #000000; ">be&nbsp;easily&nbsp;modified&nbsp;later&nbsp;to&nbsp;support&nbsp;even&nbsp;more&nbsp;locales </span></li></ul><span style="color: #000000; ">......</span><br /><span style="color: #000000; "></span></div>显然，为了能使用国家化，我们需要为每一个需要使用的语言单独配置他们的语言内容。分别新建中文和英文的语言配置文件置于src下<br /><div>Message_zh.properties<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">username</span><span style="color: #000000; ">=</span><span style="color: #000000; ">\u7528\u6237\u540D（用户名）<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">password</span><span style="color: #000000; ">=</span><span style="color: #000000; ">\u5BC6\u7801（密码）<br /></span><span style="color: #008080; "></span><span style="color: #000000; "></span></div><div>Message_en.properties<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">username</span><span style="color: #000000; ">=</span><span style="color: #000000; ">username<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">password</span><span style="color: #000000; ">=</span><span style="color: #000000; ">password<br /></span><span style="color: #008080; "></span><span style="color: #000000; "></span></div>由于properties只支持iso-8859格式的编码，所以在输入中文的时候会有些问题，只是Eclipse自带的properties编辑器可以进行可视化的文本输入，不需要关注编码。另外我们可以通过Java自带的转码工具native2ascii进行转码。<br />测试类如下，<span style="color: #000000; ">getBundle</span>方法接收两个参数，第一个是BaseName，可以理解为资源的基础名，第二个是语言码，中文是zh，英文是en等等，测试类运行完毕之后会给出英文资源文件中username所对应的值，同理Locale设置为中文则输出中文的值。所以资源文件我们以Message_en.properties这种格式来命名，其中en之后还可以添加下划线跟第三个值区域码，但是一般可以省略。<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; "> demo.i18n;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.Locale;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.util.ResourceBundle;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000;">&nbsp;I18nTest&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResourceBundle&nbsp;rb&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ResourceBundle.getBundle(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Message</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;Locale.ENGLISH);<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rb.getString(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">username</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "></span></div><hr /></div>基于上面的内容，struts2使用它们配置全局国际化资源，在struts.xml中添加国家化的配置，其中value就是资源的基础名<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constant&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="struts.custom.i18n.resources"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="Message"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span></div>之后，在页面上使用struts2的标签进行对应语言内容的显示，当然，显示哪种语言需要显式的将语言码作为参数传入，请求地址需要写作/XXX.action?request_locale=en<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; ">全局国际化</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:text&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="username"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">/&gt;</span></div>除了全局国际化的配置，struts2还提供了包范围和action范围的国际化，其中包范围的国际化，需要将资源文件命名为&#8220;package_语言码.properties&#8221;的形式，然后置于需要的包下，struts2会优先取得较小范围的国际化资源文件，同时定义全局国际化资源和包国际化资源，那么包范围的资源会优先生效。至于action范围的国际化，因为国际化在日常的开发中本来用的就不是很多，就算真的碰到需要双语开发的情况，或许也是做两套页面，或者直接做两套网站，除非是那种跨国性质的&#8220;因特噗啦一吇&#8221;，否则不要说struts2的全局国际化的使用，针对包范围和action范围的国际化，都是少有问津。<br /></div><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/produ/aggbug/419400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-11-02 15:13 <a href="http://www.blogjava.net/produ/articles/419400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_06其他功能：拦截器</title><link>http://www.blogjava.net/produ/articles/419384.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sun, 02 Nov 2014 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419384.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419384.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419384.html</trackback:ping><description><![CDATA[<div> struts2的拦截器其实和过滤器是一个概念，虽然自定义的过滤器用的不多，但是struts2的核心功能都是用拦截器来实现的，异常捕获，参数绑定，和国际化等等。<br /><hr />写一个最简单的过滤器的例子，感受一下自定义过滤器的使用就好。<br />先上action<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; "> demo.action;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;InterceptorDemo&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;name;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;execute(){<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我是Execute的方法</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">name：</span><span style="color: #000000; ">"</span>&nbsp;<span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;name);<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #000000; ">"</span><span style="color: #000000; ">success</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">get/set方法略</span><span style="color: #008000;"><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">16</span>&nbsp;</div>创建一个interceptor只需要新建一个类，继承struts2的<span style="color: #000000; ">AbstractInterceptor</span>，重写<span style="color: #000000; ">intercept</span>方法<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; "> demo.interceptor;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.opensymphony.xwork2.ActionInvocation;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.opensymphony.xwork2.interceptor.AbstractInterceptor;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;InterceptorDemo&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;AbstractInterceptor{<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">long</span><span style="color: #000000; ">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000; ">=</span>&nbsp;<span style="color: #000000; ">-</span><span style="color: #000000; ">1739072578539674220L</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;intercept(ActionInvocation&nbsp;invocation)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000;">&nbsp;Exception&nbsp;{<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我是一个炫酷的拦截器</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">校验用户是否登陆等操作<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">ServletActionContext.getContext().getSession()...<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">校验用户是否有权限访问等操作<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">invocation.getProxy().getActionName()</span><span style="color: #008000; ">...<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;invocation.invoke();<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">25</span>&nbsp;</div>如此一来，拦截器就创建好了，接下来就是对拦截器的配置，看到struts.xml<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">package&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="interceptorDemo"</span><span style="color: #FF0000; ">&nbsp;extends</span><span style="color: #0000FF; ">="struts-default"</span><span style="color: #FF0000; ">&nbsp;namespace</span><span style="color: #0000FF; ">="/"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;需要在包内声明拦截器，之后可以定义在action中定义对声明拦截器的引用&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="InterceptorDemo"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">=demo.interceptor.InterceptorDemo"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;在指定的action中使用指定的拦截器&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="interceptorDemo"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="demo.action.InterceptorDemo"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method</span><span style="color: #0000FF; ">="execute"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="</span><span style="color: #0000FF; ">InterceptorDemo</span><span style="color: #0000FF; ">"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><div><span style="color: #008080; ">14</span></div></span><span style="color: #008080; ">15</span> <span style="color: #000000; ">&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">package</span><span style="color: #0000FF; ">&gt;</span></div>将定义好的拦截器添加到某个action的定义中，让拦截器拦截对应的action，但如果如上述那样去配置的话，除了自定义拦截器的功能，struts2 的拦截器功能都会失效，action中的name值根本拿不到。配置中的每个包都会继承struts-default这个包，简单看一下struts-default.xml这个文件<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-stack&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="defaultStack"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp; <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="exception"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="alias"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="servletConfig"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="i18n"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="prepare"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="chain"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="scopedModelDriven"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="modelDriven"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="fileUpload"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008080; ">11</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="checkbox"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="multiselect"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ...<br /></span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="debugging"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp; &nbsp; </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">interceptor-stack</span><span style="color: #0000ff;">&gt;<br /><div><span style="color: #000000; ">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ...</span></div><div>&nbsp;&nbsp;&nbsp; <span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;"><span style="color: #800000;">default-in</span></span><span style="color: #800000; ">terceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000ff;">="default-stack"</span><span style="color: #0000FF; ">/&gt;</span></div><div><div><span style="color: #0000ff;"><span style="color: #000000; ">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ...</span></span></div></div></span></div>上述就是部分配置，定义了默认的拦截器栈，也就是一组拦截器，从名字就可以看出很多功能都由拦截器完成，所以，自定义的拦截器也需要引用这一组拦截器，需要在配置中添加默认拦截器栈<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="interceptorDemo"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="org.duyt.action.InterceptorDemo"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method</span><span style="color: #0000FF; ">="execute"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="</span><span style="color: #0000FF; ">InterceptorDemo</span><span style="color: #0000FF; ">"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="defaultStack"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">6</span> <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span></div>或者定义一组拦截器栈<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="InterceptorDemo"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="demo.interceptor.InterceptorDemo"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; </span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;声明的拦截器栈一定要引用defaultStack，不然struts2无法发挥作用，参数封装等最基本的功能都会失效&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-stack&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="selfStack"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="InterceptorDemo"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="defaultStack"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">interceptor-stack</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;在指定的action中使用指定的拦截器&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="interceptorDemo"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="demo.action.InterceptorDemo"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method</span><span style="color: #0000FF; ">="execute"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptor-ref&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="selfStack"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span></div>这样，自定义的拦截器就能融入到完整的功能之中。<br /> </div><img src ="http://www.blogjava.net/produ/aggbug/419384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-11-02 09:28 <a href="http://www.blogjava.net/produ/articles/419384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_05其他功能：文件上传</title><link>http://www.blogjava.net/produ/articles/419380.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Sat, 01 Nov 2014 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419380.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419380.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419380.html</trackback:ping><description><![CDATA[不得不说，struts2的文件上传功能做的实在是太方便了，如果脱离struts2的文件上传功能，单纯使用servlet结合fileUpload工具包，1k1k的读，1k1k的写，那么struts2的文件上传功能，简直是把代码量缩减的不止一点半点。<br />首先，文件上传的表单必须是以下设置<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">form&nbsp;</span><span style="color: #FF0000; ">action</span><span style="color: #0000FF; ">="XXX"</span><span style="color: #FF0000; ">&nbsp;method</span><span style="color: #0000FF; ">="post"</span><span style="color: #FF0000; ">&nbsp;enctype</span><span style="color: #0000FF; ">="multipart/form-data"</span><span style="color: #0000FF; ">&gt;</span></div><div>设置完毕之后，看一下servlet的post的方法的设置</div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">protected</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;ServletException,&nbsp;IOException&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">utf-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "> 首先需要确认，到底是不是</span><span style="color: #008000; ">文件上传的请求，<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;isMultipart&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ServletFileUpload.isMultipartContent(request);<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(isMultipart)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "> 创建一个文件处理对象</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletFileUpload&nbsp;upload&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ServletFileUpload();<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;os&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "> 解析请求中的所有元素</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileItemIterator&nbsp;iter&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;upload.getItemIterator(request);<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(iter.hasNext())&nbsp;{<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileItemStream&nbsp;item&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;iter.next();<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;item.openStream();<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">是否是表单域</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(item.isFormField())&nbsp;{<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">其他操作，保存参数等</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;{<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">不是表单域则保存文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;request.getSession().getServletContext().getRealPath(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;path&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/upload/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;item.getName();<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;FileOutputStream(path);<br /></span><span style="color: #008080; "></span><div><span style="color: #008080; ">27</span> <span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000; ">//</span><span style="color: #008000; ">流读写</span><span style="color: #008000; "><br /></span></div><span style="color: #000000; "></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">byte</span><span style="color: #000000; ">[]&nbsp;buf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">byte</span><span style="color: #000000; ">[</span><span style="color: #000000; ">1024</span><span style="color: #000000; ">];<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(is.read(buf)</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">){<br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.write(buf);<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(FileUploadException&nbsp;e)&nbsp;{<br /></span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /></span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">{<br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(is&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is.close();<br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(os&nbsp;</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.close();<br /></span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>洋洋洒洒一大堆，struts2封装了这些通用的处理，我们可以按照struts2的风格来获取要上传文件的对象，直接写一个多文件上传的例子吧<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="background-color: #FFFF00; color: #000000; ">&lt;%</span><span style="background-color: #F5F5F5; color: #000000; ">@&nbsp;page&nbsp;language</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">java</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;contentType</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">text/html;&nbsp;charset=UTF-8</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="background-color: #F5F5F5; color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;pageEncoding</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">UTF-8</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #FFFF00; color: #000000; ">%&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/html4/loose.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">meta&nbsp;</span><span style="color: #FF0000; ">http-equiv</span><span style="color: #0000FF; ">="Content-Type"</span><span style="color: #FF0000; ">&nbsp;content</span><span style="color: #0000FF; ">="text/html;&nbsp;charset=UTF-8"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">文件上传</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">form&nbsp;</span><span style="color: #FF0000; ">action</span><span style="color: #0000FF; ">="FileUpload"</span><span style="color: #FF0000; ">&nbsp;method</span><span style="color: #0000FF; ">="post"</span><span style="color: #FF0000; ">&nbsp;enctype</span><span style="color: #0000FF; ">="multipart/form-data"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件上传测试：</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="file"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="text"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="file"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="text"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="file"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="text"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="submit"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="提交"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">form</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">&gt;</span></div>action为<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">package</span><span style="color: #000000; "> demo.fileUpload;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.File;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.IOException;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.commons.io.FileUtils;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.struts2.ServletActionContext;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;FileUpload&nbsp;{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">文件接收数组</span><span style="color: #008000; ">，</span><span style="color: #008000; ">如果是单文件上传，那就不需要定义数组了，定义单个文件对象就行</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;File&nbsp;text[];<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">对应的文件名</span><span style="color: #008000; ">，这里的文件名是&#8220;名字.后缀&#8221;的形式，这个属性的命名需要是&#8220;文件属性的名字&#8221;+FileName。<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String[]&nbsp;textFileName;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">对应的文件类型</span><span style="color: #008000; ">，是文件的真实类型，比如&#8220;text/plain&#8221;</span><span style="color: #008000; ">，</span><span style="color: #008000; ">这个属性的命名需要是&#8220;文件属性的名字&#8221;+ContentType</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String[]&nbsp;textContentType;<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;execute()&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;IOException{<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dir&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">""</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;text.length;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">创建要新建的文件位置</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;ServletActionContext.getServletContext().getRealPath(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/upload/</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;textFileName[i];<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;File(dir);<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">保存文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">file.exists())&nbsp;{<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">使用common.io工具包保存文件</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileUtils.copyFile(text[i],&nbsp;file);<br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">success</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #000000; "><div><span style="color: #008080; ">36</span></div></span><span style="color: #008080; ">37</span><span style="color: #000000; ">}<br /></span><span style="color: #000000; "></span></div><img src ="http://www.blogjava.net/produ/aggbug/419380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-11-01 22:10 <a href="http://www.blogjava.net/produ/articles/419380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_04常用标签</title><link>http://www.blogjava.net/produ/articles/419345.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Fri, 31 Oct 2014 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419345.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419345.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419345.html</trackback:ping><description><![CDATA[struts2提供的一套from标签使得数据的展示变得非常容易，想必这是它如此流行的原因之一，真的很方便。。<br /><hr />首先，为了能够使用struts2提供的标签，我们需要先添加标签的引用<br />在JSP页面上添加，uri的具体值可以在struts2包的META-INF的struts-tags.tld文件中查看<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="background-color: #FFFF00; color: #000000; ">&lt;%</span><span style="background-color: #F5F5F5; color: #000000; ">@taglib&nbsp;prefix</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">s</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">&nbsp;uri</span><span style="background-color: #F5F5F5; color: #000000; ">=</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #F5F5F5; color: #000000; ">/struts-tags</span><span style="background-color: #F5F5F5; color: #000000; ">"</span><span style="background-color: #FFFF00; color: #000000; ">%&gt;</span></div>先看一下最常用的<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="str"</span><span style="color: #FF0000; ">&nbsp;default</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;escapeCsv</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;escapeHtml</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;escapeJavaScript</span><span style="color: #0000FF; ">=""</span><span style="color: #FF0000; ">&nbsp;escapeXml</span><span style="color: #0000FF; ">=""</span><span style="color: #0000FF; ">/&gt;</span></div><div>和EL表达式${str}的作用类似，展示动态数据，只不过property标签强化了很多功能，可以免去判断直接设定默认值，忽略cvs，html等内容，虽然struts2的标签不支持EL表达式但是有一种类似的写法<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="%{str}"</span><span style="color: #0000FF; ">/&gt;</span></div><hr />其次是流程控制标签<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:if&nbsp;</span><span style="color: #FF0000; ">test</span><span style="color: #0000FF; ">="condition !=&nbsp;null"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">你的代码</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">s:if</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080;"></span><span style="color: #000000; "></span><span style="color: #008080; "></span><span style="color: #000000; "></span></div>test的内容可以使用OGNL表达式获取，除了Java那些常规的判断写法，可以将&amp;&amp;可以写作and，||可以写作or，和JSTL的判断类似，都有自己的个性<br /><br />之后是迭代标签，迭代标签可以说是struts2标签中最常用的标签之一，不仅是因为列表功能很常见，而且迭代标签给出了很好用的功能<br />假定vals是个list，那么遍历这个list<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:iterator&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="vals"</span><span style="color: #FF0000; ">&nbsp;var</span><span style="color: #0000FF; ">="val"</span><span style="color: #FF0000; ">&nbsp;begin</span><span style="color: #0000FF; ">="0"</span><span style="color: #FF0000; ">&nbsp;end</span><span style="color: #0000FF; ">="5"</span><span style="color: #FF0000; ">&nbsp;status</span><span style="color: #0000FF; ">="st"</span><span style="color: #FF0000; ">&nbsp;step</span><span style="color: #0000FF; ">="2"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="val"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="#st.index"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="#st.count"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">s:iterator</span><span style="color: #0000FF; ">&gt;</span></div>begin和end属性可以灵活的设定遍历的区间，step则是步进的长度，但是step必须在指定了begin之后才生效，特别要说明status这个属性，声明了st之后，便可以获得当前遍历的下标或者行号，这样一来就可以根据需求执行其他的操作。var属性则声明了当前的遍历对象，使用var属性之后，会在ValueStack中的root和ActionContext中各生成一份当前对象，所以也可以写为<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000ff;">="#val"</span><span style="color: #0000FF; ">/&gt;</span>，如果不声明var属性，则只会在root中生成一份当前对象，是否声明var属性，取决于当前遍历的元素类型，比如vals是一个user列表，那么迭代标签会把当前迭代的user对象置于栈顶，循环内直接写<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000ff;">="name"</span><span style="color: #0000FF; ">/&gt;</span>就可以获取user的name值，无需声明var属性。<br /><br />假定vals是个map，那么遍历这个map<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "></span><span style="color: #000000; ">1&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:iterator&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000ff;">="mapVals"</span><span style="color: #FF0000; ">&nbsp;var</span><span style="color: #0000FF; ">="val"</span><span style="color: #FF0000; ">&nbsp;begin</span><span style="color: #0000FF; ">="0"</span><span style="color: #FF0000; ">&nbsp;end</span><span style="color: #0000FF; ">="5"</span><span style="color: #FF0000; ">&nbsp;status</span><span style="color: #0000FF; ">="st"</span><span style="color: #FF0000; ">&nbsp;step</span><span style="color: #0000FF; ">="2"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "></span><span style="color: #008080; "><br /></span><span style="color: #000000; ">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000ff;">="mapVals.get(#val.getKey())"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="#st.index"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="#st.count"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080;"></span><span style="color: #000000; ">3&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">s:iterator</span><span style="color: #0000ff;">&gt;</span></div>或者写为<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "></span><span style="color: #000000; ">1&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:iterator&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="mapVals.keySet()"</span><span style="color: #FF0000; ">&nbsp;var</span><span style="color: #0000FF; ">="keyId"</span><span style="color: #FF0000; ">&nbsp;begin</span><span style="color: #0000FF; ">="0"</span><span style="color: #FF0000; ">&nbsp;end</span><span style="color: #0000FF; ">="5"</span><span style="color: #FF0000; ">&nbsp;status</span><span style="color: #0000FF; ">="st"</span><span style="color: #FF0000; ">&nbsp;step</span><span style="color: #0000FF; ">="2"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; "></span><span style="color: #000000; ">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="mapVals.get(#keyId)"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="#st.index"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">="#st.count"</span><span style="color: #0000FF; ">/&gt;&lt;</span><span style="color: #800000; ">br</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; "></span><span style="color: #000000; ">3&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">s:iterator</span><span style="color: #0000FF; ">&gt;</span></div><hr /></div>一些其他的表单标签<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:textfield&nbsp;</span><span style="color: #FF0000; ">label</span><span style="color: #0000FF; ">="username"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="%{user.username}"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:checkboxlist&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="name"</span><span style="color: #FF0000; ">&nbsp;label</span><span style="color: #0000FF; ">="多选框"</span><span style="color: #FF0000; ">&nbsp;&nbsp;list</span><span style="color: #0000FF; ">="#{'1':'Nick','2':'lily','3':'Mary'&nbsp;}"</span><span style="color: #FF0000; ">&nbsp;listKey</span><span style="color: #0000FF; ">="key"</span><span style="color: #FF0000; ">&nbsp;listValue</span><span style="color: #0000FF; ">="value"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="#{'1','2'}"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">3</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:radio&nbsp;</span><span style="color: #FF0000; ">label</span><span style="color: #0000FF; ">="Conutry"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="Conutry"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="2"</span><span style="color: #FF0000; ">&nbsp;list</span><span style="color: #0000FF; ">="#{'1':'中国','2':'美国','3':'俄罗斯'&nbsp;}"</span><span style="color: #FF0000; ">&nbsp;listKey</span><span style="color: #0000FF; ">="key"</span><span style="color: #FF0000; ">&nbsp;listValue</span><span style="color: #0000FF; ">="value"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">4</span> <span style="color: #000000;"></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:select&nbsp;</span><span style="color: #FF0000; ">list</span><span style="color: #0000FF; ">="users"</span><span style="color: #FF0000; ">&nbsp;label</span><span style="color: #0000ff;">="姓名"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="1"</span><span style="color: #FF0000; ">&nbsp;listKey</span><span style="color: #0000FF; ">="id"</span><span style="color: #FF0000; ">&nbsp;listValue</span><span style="color: #0000FF; ">="username"</span><span style="color: #FF0000; ">&nbsp;headerKey</span><span style="color: #0000FF; ">="-1"</span><span style="color: #FF0000; ">&nbsp;headerValue</span><span style="color: #0000FF; ">="请选择"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "></span><span style="color: #008080; "></span><span style="color: #000000; "><br /></span></div>这些标签虽然能很好的完成任务，但是不怎么灵活，一般来说前端的这些控件或多或少的都需要的添加自定义的样式，所以这些标签出现的机会比较少，只是简单记录一下。<br />还有很多其他的标签，比如form等，HTML自带标签完全可以满足一般需求。<br />这里特别提一下两个工具类的标签，其中格式化时间的date标签用的比较频繁，其次格式化数字的标签number，可以用来截取数字长度，四舍五入等操作<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span><span style="color: #000000;"></span><span style="color: #0000FF; "> &lt;</span><span style="color: #800000; ">s:date&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="time"</span><span style="color: #FF0000; ">&nbsp;format</span><span style="color: #0000FF; ">="yyyy-MM-dd"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">2 </span><span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:number&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="money"</span><span style="color: #0000FF; ">/&gt;</span></div><br /><br /><br /><img src ="http://www.blogjava.net/produ/aggbug/419345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-10-31 17:54 <a href="http://www.blogjava.net/produ/articles/419345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_03参数的传递</title><link>http://www.blogjava.net/produ/articles/419290.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Thu, 30 Oct 2014 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419290.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419290.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419290.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: struts2的参数传递和OGNL息息相关，先从几个OGNL的案例来感受一下OGNL的概念和作用，不赘述，直接百科传送门：http://baike.baidu.com/view/1347280.htm。使用OGNL可以极为灵活的在页面上对目标对象进行存取操作，而不仅仅是只是数据的展示。下面使用OGNL给出几个常用的例子。测试用实体类User和DepartmentCode highlighting ...&nbsp;&nbsp;<a href='http://www.blogjava.net/produ/articles/419290.html'>阅读全文</a><img src ="http://www.blogjava.net/produ/aggbug/419290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-10-30 16:38 <a href="http://www.blogjava.net/produ/articles/419290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_02请求和处理的映射</title><link>http://www.blogjava.net/produ/articles/419191.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Wed, 29 Oct 2014 16:38:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419191.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419191.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419191.html</trackback:ping><description><![CDATA[请求和处理的映射，也就是常说的action和url之间的关系，struts2提供了很多种方式来配置他们之间的映射，01中提到的struts.xml配置<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.3//EN"<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.3.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constant&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="struts.action.extension"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="action,,"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "> 请求后缀名</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">package&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="helloworld"</span><span style="color: #FF0000; ">&nbsp;extends</span><span style="color: #0000FF; ">="struts-default"</span><span style="color: #FF0000; ">&nbsp;namespace</span><span style="color: #0000FF; ">="/"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;struts-default这个包是一定要继承的，否则struts很多重要功能会失效</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="hello"</span><span style="color: #FF0000; ">&nbsp;&lt;!--&nbsp;action的名称，namespace的值连接/hello表示请求该action&nbsp;&nbsp;--</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="demo.action.HelloWorld"&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;class表示该action的位置，在action的配置中，如果不指定调用哪个方法，则默认调用execute方法&nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="success"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/helloWorld.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;action的返回结果，以及相应的视图&nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">package</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000;"> <br /></span></div>就是一种方式。这个配置中，就已经能很明显的看出action和url之间的关系，只是这段配置没有指明具体调用action中的哪个方法，所有默认调用了execute方法，虽然比较笨拙，但是这可以记为配置映射的第一个方法。需要特别一提的是<span style="color: #000000;">struts.action.extension</span>配置，它代表了action的后缀名，逗号隔开。也就是说，它指定了哪些结尾的请求为struts请求，默认是action和空结尾的请求。<br /><hr /><strong>方法一：</strong><br />一个action只对应一个请求，默认调用execute方法，这样，为了满足业务需求，package中就会出现大量的action配置。实际开发中，除非这个请求进行的操作非常多，以至于书写的代码几千行，甚至上万行，否则一般不会这么配置，就算真的出现这样的情况，也极有可能和其他配置方式混搭使用，单独使用的比较少。<br />优点：配置简单明了，而且action中只有一个方法，方便阅读<br />缺点：会出现大量的action配置，大量的action类<br /><hr /><strong>方法二：</strong><br />为了让一个action能够对应多个请求，可以在方法一的基础上为action的配置添加method属性<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.3//EN"<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.3.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">package&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="helloworld"</span><span style="color: #FF0000; ">&nbsp;extends</span><span style="color: #0000FF; ">="struts-default"</span><span style="color: #FF0000; ">&nbsp;namespace</span><span style="color: #0000FF; ">="/"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="hello"</span><span style="color: #FF0000; "> <u><strong>method</strong></u></span><u><strong><span style="color: #0000FF; ">="method01"</span></strong></u><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="demo.action.HelloWorld"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="success"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/helloWorld.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">package</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "> <br /></span></div>如此一来，action中的method01方法就会对应/hello请求。<br />优点：可以减少action类的数量<br />缺点：还是有大量的配置！！<br /><hr /><strong>方法三：</strong><br />这种请求和处理的映射有点类似于将方法名当做参数来传递，struts.xml的配置和方法一一致，无需更改，只是在发送请求的时候需要将请求的方法一并发送，原始的请求是/hello，而连带方法名的请求是/hello!hello，或者还可以写/hello?method:hello（假定Helloworld类中有hello方法），这样一来，就是直接调用hello方法来完成处理。<br />优点：不仅可以完成一个action和多个请求的映射，还能减少action的配置，仅仅只是额外配置action的result即可<br />缺点：地址注意不能写错，实际开发中不常用，或许只是看起来请求地址怪怪的。。。但依然是个不错的配置方式<br /><hr /><strong>方法四：</strong><br />基于通配符的映射<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.3//EN"<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF00FF; ">&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.3.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">package&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="helloworld"</span><span style="color: #FF0000; ">&nbsp;extends</span><span style="color: #0000FF; ">="struts-default"</span><span style="color: #FF0000; ">&nbsp;namespace</span><span style="color: #0000FF; ">="/"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="*_*"</span><span style="color: #FF0000; ">&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="demo.action.{1}action"</span><span style="color: #0000FF; "></span><span style="color: #FF0000; "> method=</span><span style="color: #0000FF; ">"{2}"</span><span style="color: #FF0000; "></span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="success"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000;">/{1}/{2}.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">package</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "> <br /></span></div>显而易见，任何形式的&#8220;XX_XX&#8221;请求都会得到映射，{1}代表第一个*的值，{2}代表第二个，以此类推，最主要的是，一定要从action的名称，到action内的方法，直至最后响应视图的位置，都要好好的在请求中写好。基于通配符的配置方式显得十分灵活，但也要求十分的细心，是一种能同时简化action类和配置内容的映射方式。这里要特别提到result的结果，结果可以是struts提供的SUCCESS，ERROR等但不限于这些返回结果，自定义的返回结果只要有对应的相应视图即可。<br />优点：配置灵活，精简<br />缺点：配置时要求仔细，使用统一的规则，所谓的&#8220;约定优于配置&#8221;<br /><hr />实际开发中，根据各个配置方式的优缺点自行选择，配置没有绝对的好坏<br /><br /><br /><br /><img src ="http://www.blogjava.net/produ/aggbug/419191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-10-30 00:38 <a href="http://www.blogjava.net/produ/articles/419191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>温故知新:struts2_01整体流程感受</title><link>http://www.blogjava.net/produ/articles/419171.html</link><dc:creator>都较瘦</dc:creator><author>都较瘦</author><pubDate>Wed, 29 Oct 2014 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/produ/articles/419171.html</guid><wfw:comment>http://www.blogjava.net/produ/comments/419171.html</wfw:comment><comments>http://www.blogjava.net/produ/articles/419171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/produ/comments/commentRss/419171.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/produ/services/trackbacks/419171.html</trackback:ping><description><![CDATA[使用了一阵子struts2，但是一直没能好好整理一下，所以将平时学习工作中的一些心得记录一下，温故知新，时刻保持空杯心态。<br /><hr />环境如下<br /><strong>系统：</strong>64位win7<br /><div><div><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaIAAACxCAIAAAAJXC65AAAQTUlEQVR4nO2dvXHrvBJA1ZMzluIC0IZbYHoz584ZOXH+xg1wxjNuwC3oBfzBLrAAIZmS6P3OGc+9JkWCPyIOFwDNPZ0AANxzBgBwCpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOegOQBwDpoDAOfcXHPj69vp5et25QMA1Dms5r7C07/T8tO9/ljL/PTPpY8Uw8u/8GGvruf/9M/vg1nE92f39NZ/N3/08X56qhRV+Kh50+Pr2+n5cyysUTrnw8v26WpZ5vzxrrf+FUonR9H6fQHsy66a+/7shJvqP5NfhpfSAg0iqKhE8TN+fHZP/5KaP7z8y0zx0z/nM9dDM2vyT/+cH5oxM25daS5fMj0iy1m5oDdXmQ95D80Ztqpot/wVLz9lXwPswk2jua/w9BZe3k7Pb83xSzUu+HhvdKjSysT3Z/cU1TC+vhUU+dM/Z+ueS5pbKrwW7vj61r3+TFs0lJFpLgorEXd+25iMYNxOpn1TIXD1563/vux8xp2c9n/zlracww1vpoEhwP7cSnOrR5bI4itYdX58fWupY4UVt9V5Tflmo9LS3PASK7MIZ75CwWLZzrz135uaE5OLEdI2eLZv10dzi/gqoaI86haI5uDh7K+56bJeq5OscnM9L1WS1kbouRgoNVDv1apu0Q4zt02abE4d5uWay8MfU3PNNwzBV3h6Dy//upf3rnSK5JmvBINidaI5eDh7am4SXHhpawq9fDWGWlnN2WqaVatNWXOim2wJP1u2sjHGklXj4eXfbzTX58MpWfh5XTQ3fTr9O76+mQFdcg9rgWgOHs4NGq21+3NxrK25KbTIqLDwZrDWtEBr39yy/AXVONozfJyviebO5/PHe72VfU00J1rE3euPbnrLZd7D8g3WDpxoDo7EbTRXrfYX99DFajCPD7Quf0kXu9nKjtQ11xzNja9v3ct79/Q+nL/CMiZ78RDEvG5hrSuiOXF0cRkjDp07E4nm4G/x+GhurgalVURpaw2smGUjWJvE8bBo7qd/fus/LhpptaK5ZH+WtS7rBIjHqKQpVWiF2NdojmgOHstjNbc8p1YPu7LSrtbctGLhaeFq4XtEc/OSSl76AZp2zcnn/uxBCfN2ko/wpCPg2kr54zXiG6x8a8UTYrWFAW7MIxutMViomNH6qLmRq4mqqlW220Vzw8tb/63llRzdqrnpl6rmoiLV/LnvUj3FUhrp/rafmtZ+/ApqmURzxmmUW1y+4mVXv3+G7Emg+l0H4Pc8vtE6r3LraC4JcMoPr8TCvz87ZYTq3zMZR1141DnKKzsbUnPPn+OG5tL5sflffHZ37lybZKduM8Xlzzriu0Rz6r4ST8X8+PQswc/pb1QwHdyOY7yh5IporqK5/KOP91M+9PHxfrI0tDZs1SqlPyxt7wtT3WprV5rWhPwobd4Wz1K91Xzp3xRvPULcrjnZ4NVjJjNi5vdn9/zZvpMAF7Gn5q7tAt8hmpPDebo6TQ9wVP7qPi3fHhLZiuas3vpqNGcXqB83KY60SlT32faw5kbf2aWaay3fvjYYfIC78CejuUamqrXZGtI9VmbcUdbcYiJrK43v7ShTjOaSP/inUx+gxjE0BwBwM9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc9AcADgHzQGAc+6uubHvTl3fmNxhCO3LXsgQun48D+EUkkQKY9+dTsZmx7671b4AwC3ZU3NDOElpJEKbJw+puUltM6n3ZtAcwB9l12hOWSmNiq5R1h01l8tNuc8C6wH8CXbVnIrUhnAKIbYJrwqGHqo5xey8jaUA4IDs2zc39t1igiGcwhCn19/irCGcur4PWWQ0BDtkkvPjRpbPRYt5mSvCsVxPqrQ+DdwSuY59F/q+6/o+IDqAv8bOQxCrxGKYNBlj7etXmjuJmety0UlDWIUjfhVLycK6Lm6q60epXIspmou7HcI6I43tpn2fD0WtBwB/gL1HWmcZrHpb5bBIKonmRrVa2kpdJ9PW61LK8v8Qun6cDCTNWulAW6O5afXTFK3Nuywst25ZlovpAP4Qe2tubayKxqSa3k1zUj5CcEPSB1h6PmRdZdHckO2q7muUHyRjygBwZHbX3Dz0oBqYcrquOSWQse/KjVahza6L/X5r0/U89v2QbjIy+236b21Rq63Mc3VX4dpzJ3f0fwBwYPbXnOxzM6Y3NCe10vV9qA9BLAUu0/qhvLhCFnkt2xv7Lgzy4bmu6wqBGs/NAfxRbqC5v8AykLCMPfQyjJPijKA5gD/Kf1RzAPDfAc0BgHPQHAA4B80BgHPQHAA4B80BgHPQHAA4B80BgHPQHAA4B80BgHPQHAA4B80BgHPQHAA4B80BgHPQHAA4B80BgHP+lOb0y4E3eGxmmiGoBGWFxBExTVj6KvY1X1lMJispZbgAgJyjaC5JIpMIbZ48hubGNKmrvZ1FTkYuiTWZRJzM8inmmlPbJeEOQDNH0Zy2UhqsXKOs+0RzVjodKbYu9MMQMyKqnBdrNp80+WJRc8gN4AoOozkVqU3ZwE6GHNq5i+ZKOa8Hmds6j+aW1LJ9OIUBzQHclsNoThpjSZg6T6+/JVnB+pC1GXULsZoVTGhQtJiXucJOFbcUVaqSXY+XRHNqBbXbfSpMuuYAmjiO5qLEYvSy5m5NfCeTIsYwUPXviZSrWY7XtatrjZm6uKlZNy29X+WAsdyplllU9s3lmkt67IKMEontAJo4kOZEk23NLjjLYs0wXcvxmkhnnUxltJSy/J83Gpcwqh4u1VxYam1uRHOzvfNobs6LHXpxbrAcQBtH0tzaWBWNSTW9m+akRoXghqQPsPrYRs1ys4TK0dy88T4abtrlrlOFqhhvKi09JwCwxaE0Nw89qAamnK5rTjVax74rN1qFNlevTL+vDuqHdJP5rpZNM5urFs1NM+UBjn0XhvgYyvQATVx/bbrrwwGALY6lOdnnZkxvaE522Xd9H+pDEEuBy7R+KC+uYEqu/gTfbLk5YDvlqMBxMdpJB4BxGem/Sd9dx5NzAM0cTHMuGMI6KhqGLPaaDD0E0ZztuijNIQ4fDyLMC9PjJ0ruqA6gCTQHAM5BcwDgHDQHAM5BcwDgHDQHAM5BcwDgHDQHAM5BcwDgHDQHAM5BcwDgHDQHAM5BcwDgHDQHAM5BcwDgnONorjH18rRAMV+WKjCZNYRT/kJKlW7BERfltN1pe6W38/0Bbny6lvcHGm8eXN/8Kq7jJLdvsmO/v7CbK9GyI/odjX/vSz6o5sqpl8VLdNMXmscUOOLi2EjRZWi1gtqtaq2wN7tevsnb3LOZcXVzK6W3t4vr/b6aa8wRpOrzoSrLbU/X9ObX7NX2cUbuJJnnafcLe6MSmVffsh9o7lds5iRNHDOoRdK3jxsf2AWZWN9jVhEqNWOwXuwulo/3Y3OmkVDR2JcuPbDlJZ0PiE71m+cLFSx5NfTj4+hmOf9+OyqhUjL/HM/F4h+dACXxXbqynLV1YfdtlWgiSyyH5n5NW+plcWWqL8HO/2zdQtUmm69ycf3JG11DCWN81Xn+undzplKbuf9j301XbHbd9/dIwp3ToLmsqfV47qQ5eQWkZJGZvrjkTXe/C3u7EhnTaG4XmlIvr1/1mnlwXVlklZFfoX0FpRuUNzw7wc3sHyGlsdDcyI9LZp+Nc/OuyDhTaS7fpXnmkKS76PpxnaXWkzkyVuPKHh07V4bVLrITexvkHUq1WplvPdlJMZl+TS2r5wcj1hK5OMoFljKgb7K+Jl/mZkpjtgZ2u7C3KpGh45h/Cc39jpbUy2uGv1HkHkwul/xqEImzzmIDhc4tu8HaD6UPJwOWj8rSzjLfnKnSPKQ5gOLea+9mkaBKD5Qc6XQdq1qtk/2sV7sxqmMs2RLNFTVXKjPZST2pG/hNqwdpAX3SKqdLbyjvadhklBnjYqH2OJtJVgt+eWG3VCLjKNHcLmynXh5lhr9lnTAkV00ptpdfz1x8/aYnuFJzKvprj+bkyZhzuWb7E9Mu6gAw15zhF22idAG5pg5cikv+QnPFMpNyCpOtqy+fqS/Z0lztbMgO11bNDf2Uoc0aZhUaUyXKO/52b8xlF3ZbJZrmhiA8i+Z2YTv18tBnYjjnY+nJTS8fsYpbao7mrmm0pn1RZlN0u31q7pHqXFHJGvfRnJwe46huecm2vjnrTBXLvFpz1uoyxomfNGouuYHkp2gDvfTYh647dV0/JMtcGM1deWE3VaL52o3phmm07sTYmHo5vRGlEVjyJcfF06+ndGHZ36HoYZNXX7GRa7RqUjeNxZlqs1Z9knV42iMxZTVa14/7bDTEaKYtJWQ5uQtLNmkua07FSmSWaXhN9r8WG63m6sn+XdRozU2uZVq8ZsSui/6vxVD6/rgdze15YW9UojjuW2u0Nh37QTiK5sY4GlVPvawMKPth1l/1VyMvzfRqaI/mzoa6yj00aR9w3uwwG9lJP5Rc09gXtbRsteTRTLqJ3ERmp7uYa8072RpZtlZqola3Y+Yej5PBTBLeuvp8SkNQcjtdMgSRaG5YHrOt1nVxba93i+X6zr+iDKvr7JcX9kYliosZX+KyubZjPwjzqXz0bpxFR2g99fJ8J7Se+p56stS3adyNxLRuL+b1J0NdjBc0W+DXFIPEh9IezQ06AE9/LTaDY2S144W9UYmsqPIc7S/i5c1jPwhH0RxAlWNqDv4GaA7+BGgOrgfNAYBz0BwAOAfNAYBz0BwAOAfNAYBz0BwAOAfNAYBz0BwAOAfNAYBz0BwAOAfNAYBz0BwAOMej5sovgrvDhvnzcoCjcSjNWa9xvIJfaU69Uu7C3WjTnHiVIQDcgeNoTr7L+4HvJBUvJbxYl5uam96HLF5fCwC35zCauyyLyJ32o5SOqrxui79o2wLclcNoLsuEJeerlzPPmpjSEYXQ6Zepl9/rL9KzJHMkBc2JtmySLEYUlaRQKTVN0RzAXTmO5lZpJC+tVxJb3psvFsuTOZWyNBULlJiNVjOZcV74UqD1ln1jMQC4C0fS3Pl8ThJppCmysqBpXkjPlhmUEtvYBRrbzz9M47lS/tNQiEqTxdAcwL04nObO53MMmey+sVQTa7rcNEWnqbmNzjarj1BmGK0UHjMu1reB5gDuymE0pwZXV4WoDrslh1umibHvuhA63Xd3TlafMjGbBSb7UUsKnSRCttM8Gykvk02gOYD7cRjN6eZitIDR959rQnullom5NJggi8pjMTuZcTXN89Q8TraQJh1GdgB34ECaAwC4BWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOWgOAJyD5gDAOScAAPf8H6Bsgux58XLiAAAAAElFTkSuQmCC" alt="" /><br /><strong><br />测试环境：</strong><br /><div><img src="data:image/png;base64,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" alt="" /><br /><hr />先从一个helloworld的简单案例开始吧<br />新建一个maven项目，选择<br /><div><div><img src="data:image/png;base64,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" alt="" /><br /><br />其实不论使用哪个框架技术，都无非三步走，import，config，run，首先，我们import<br />因为使用maven来管理项目，所以直接添加struts2的依赖到pom.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">org.apache.struts</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">struts2-core</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">2.3.7</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp; &lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span></div>之后，我们开始config，具体配置哪些呢，首先要让struts2去过滤请求，那么肯定要在web.xml中配置struts2的过滤器，然后还需要让struts2知道请求和控制器之间的关系，那么肯定还需要再给struts2单独进行配置。<br />首先添加struts2的过滤器到web.xml中<span style="color: #0000FF; "><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">struts2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-class</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-mapping</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">struts2</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">filter-name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/*</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">url-pattern</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "></span><span></span><span><br /></span><div><span style="color: #0000FF; ">&nbsp;&nbsp; &lt;</span><span style="color: #800000; ">/filter-mapping</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span></div><span></span></div><span style="color: #0000FF; "><br /><div><span style="color: #000000;">其次添加struts2的配置struts.xml，特别说一下constant的name值是配置在org.apache.struts.default.properties中的，还有其他常用的常量，比如struts.action.extension=action,,，请求后缀等</span><br /><span style="color: #000000;">配置头部的dtd在jar包中会有struts-2.X.dtd的配置，也不用到处搜索了。</span></div></span><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;struts&nbsp;PUBLIC<br />&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.3//EN"<br />&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.3.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constant&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="struts.devMode"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "> 开发模式开启，能够显示更详细的异常信息--&gt;</span><span style="color: #0000FF; "></span><span style="color: #000000; ">&nbsp;&nbsp; <br /></span><span style="color: #0000FF; ">&nbsp;&nbsp; &lt;</span><span style="color: #800000; ">package&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="helloworld"</span><span style="color: #FF0000; ">&nbsp;extends</span><span style="color: #0000FF; ">="struts-default"</span><span style="color: #FF0000; ">&nbsp;namespace</span><span style="color: #0000FF; ">="/"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "> struts-default这个包是一定要继承的，否则struts很多重要功能会失效--&gt;</span><span style="color: #0000FF; "></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">action&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="hello"</span><span style="color: #FF0000; "> </span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "> action的名称，namespace的值连接</span><span style="color: #FF0000; "></span><span style="color: #008000; ">/hello表示请求该action&nbsp; </span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "></span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="demo.action.HelloWorld"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "> class表示该action的位置，在action的配置中，如果不指定调用哪个方法，则默认调用execute方法&nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="success"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">/helloWorld.jsp</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #008000; ">&lt;!--</span><span style="color: #008000;"> action的返回结果，以及相应的视图</span><span style="color: #008000; ">&nbsp; </span><span style="color: #008000; ">--&gt;</span><span style="color: #0000FF; "></span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">action</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">package</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">struts</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "> <br /></span></div><span style="color: #0000FF; "></span><br />action的内容<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000;"> demo.action;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;HelloWorld&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;execute()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Hello&nbsp;Struts2</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">success</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div><br />整个配置的过程就是这样了，非常简易。</div></div></div></div></div><img src ="http://www.blogjava.net/produ/aggbug/419171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/produ/" target="_blank">都较瘦</a> 2014-10-29 15:52 <a href="http://www.blogjava.net/produ/articles/419171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>