﻿<?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-心梦帆影——JavaEE探索与研究-随笔分类-Struts2.1.6系列教程</title><link>http://www.blogjava.net/rongxh7/category/40605.html</link><description>Struts2.x+Spring2.x+Hibernate3.x+EJB3.0+JPA+Jquery+SOA+WebService+Eclipse+MySQL+Oracle+WebLogic+JBoss+.......探索与求知，寻找一条完美的路，通过梦想的世界！</description><language>zh-cn</language><lastBuildDate>Fri, 14 Aug 2009 22:19:04 GMT</lastBuildDate><pubDate>Fri, 14 Aug 2009 22:19:04 GMT</pubDate><ttl>60</ttl><item><title>Struts 2.1.6 精简实例系列教程(6)：重写用户登录模块（整合Jquery+JSON）</title><link>http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Fri, 14 Aug 2009 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/291207.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/291207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/291207.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 网上有许多关于Struts2与JSON的文章，Google加百度，查阅了许多，有各种各样的做法。其中，大部分的文章都说要加进一个叫jsonplugin的插件，在Google Code可以下载。以前我有做过测试，也是用它，但着实麻烦，要让Struts2的package继承一个叫&#8220;json-default&#8221;的父package。网上的文章，大部分都是说从Struts的Action...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/291207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-08-14 22:32 <a href="http://www.blogjava.net/rongxh7/archive/2009/08/14/291207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(5)：用户注册模块（整合Jquery）</title><link>http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 01 Aug 2009 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/289402.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/289402.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/289402.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 学习Jquery，当然要首先去它的官方网站：http://jquery.com/，如下图。在有&#8220;download&#8221;字眼的地方下载就行，我这里下载的是当前最新的版本Jquery 1.3.2。下载解压后，其实，也就是JS文件jquery-1.3.2.min.js。 Jquery最好的学习材料莫过于Jquery 1.3 API 参考文档中文版（如下图），下载地址：http...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/289402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-08-01 16:16 <a href="http://www.blogjava.net/rongxh7/archive/2009/08/01/289402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(4)：新闻管理模块的实现</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sun, 26 Jul 2009 17:14:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/288495.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/288495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/288495.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 上期讲了新闻管理模块Model层的开发，本期让我们来一起开发新闻管理的Action类和JSP页面。先从JSP页面写起吧，在admin目录下建两个文件，一个是显示新闻列表的article.jsp，另一个是新闻编辑的article-input.jsp，新闻添加和新闻修改归于同一文件，节省一点资源，这一点，学习了Springside开源项目。再建一个新闻管理的Action类ArticleAction...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/288495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-27 01:14 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/27/288495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(3)：新闻管理Model层的开发（整合iBatis）</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 25 Jul 2009 19:02:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/288414.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/288414.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/288414.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本期开始讲Model层的开发，整合iBatis框架，iBatis是Apache旗下Java数据持久层的框架，跟Hibernate是同一类型的框架。大家可到它的官方网站去下载http://ibatis.apache.org/java.cgi，如下图： 我这里下载的是当前最新版本iBatis 2.3.4 , 下载之后，解压包是这样的： 我们在lib目录下，找到&#8220;ibatis...&nbsp;&nbsp;<a href='http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html'>阅读全文</a><img src ="http://www.blogjava.net/rongxh7/aggbug/288414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-26 03:02 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/26/288414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(2)：用户登录模块的实现</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Mon, 20 Jul 2009 16:14:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/287554.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/287554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/287554.html</trackback:ping><description><![CDATA[<p>用户登录几乎是每一个Web系统的必需模块，本期教程就通过用户登录模块来讲解Struts2.1.6的Action和Result的Annotation配置。</p> <p>上期的<a href="http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html">Struts 2.1.6 精简实例系列教程(1)：环境的搭建与HelloSimple</a>中，我们建的package名为“cn.simple.action”，这些包名有一个规则的，只要包含“action,actions,struts,struts2”都会默认被扫描到为Action类，也就是说，我们只要配置了如“cn.simple.action”、“cn.simple.struts”、“cn.simple.action.admin”等包名，就可以不用在配置文件struts.xml（Struts2.0的配置文件）中配置这些Action类了。当然，这些包名，也可以是别的，但要写一点点配置，我们就用默认的吧。关于这方面的详细说明，还是强烈建议大家先看官方的文档<a href="http://struts.apache.org/2.1.6/docs/convention-plugin.html">http://struts.apache.org/2.1.6/docs/convention-plugin.html</a>。</p> <p>好，我们开始写我们的用户登录模块吧。先写个loginform.jsp，记得，不要忘记我们把JSP文件放在Web-Inf/content/目录下</p> <table border="1" cellspacing="0" cellpadding="2" width="582"> <tbody> <tr> <td valign="top" width="580"> <p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br>&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;<br><font color="#ff00ff">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;</font><br>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd&quot;">http://www.w3.org/TR/html4/loose.dtd"</a>&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br>&lt;title&gt;登录页&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;  <p><font color="#ff00ff">&lt;s:fielderror&gt;&lt;/s:fielderror&gt; </font> <p><font color="#ff00ff">&lt;form action="login.action" method="post"&gt;<br>&nbsp;&nbsp;&nbsp; 账号&lt;input type="text" name="loginName" value="${loginName}"/&gt;&lt;br/&gt;<br>&nbsp;&nbsp;&nbsp; 密码&lt;input type="password" name="password"&gt;&lt;br/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;input type="submit" value="登录"/&gt;<br>&lt;/form&gt;</font>  <p>&lt;/body&gt;<br>&lt;/html&gt;</p></td></tr></tbody></table> <p style="margin-right: 0px" dir="ltr">大家如果想用Struts 2的标签库的话，也可以用Struts 2的Form标签，用之前，要在JSP头配置上Struts 2标签库，换成Struts 2标签的版本后，即：</p> <table border="1" cellspacing="0" cellpadding="2" width="580"> <tbody> <tr> <td valign="top" width="578"> <p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br>&nbsp;&nbsp;&nbsp; pageEncoding="UTF-8"%&gt;<br><font color="#ff00ff">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;</font><br>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd&quot;">http://www.w3.org/TR/html4/loose.dtd"</a>&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br>&lt;title&gt;Insert title here&lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;  <p><font color="#ff00ff">&lt;s:fielderror&gt;&lt;/s:fielderror&gt; </font></p> <p><font color="#ff00ff">&lt;s:form action="login"&gt;<br>&nbsp;&nbsp;&nbsp; &lt;s:textfield name="loginName"&gt;&lt;/s:textfield&gt;<br>&nbsp;&nbsp;&nbsp; &lt;s:password name="password"&gt;&lt;/s:password&gt;<br>&nbsp;&nbsp;&nbsp; &lt;s:submit value="登录"&gt;&lt;/s:submit&gt;<br>&lt;/s:form&gt;</font>  <p>&lt;/body&gt;<br>&lt;/html&gt;</p></td></tr></tbody></table> <p>接着，我们写一个登录处理的Action类：loginAction.java，代码如下：</p> <table border="1" cellspacing="0" cellpadding="2" width="579"> <tbody> <tr> <td valign="top" width="577"> <p>package cn.simple.action;  <p>import org.apache.struts2.convention.annotation.Result;<br>import org.apache.struts2.convention.annotation.Results;<br>import com.opensymphony.xwork2.ActionSupport;  <p><font color="#ff00ff">@Results({<br>&nbsp;&nbsp;&nbsp; @Result(name="success", location="admin/index.action", type="redirect"),<br>&nbsp;&nbsp;&nbsp; @Result(name="input", location="loginform.jsp", type="dispatcher")<br>})</font><br>public class LoginAction <font color="#ff00ff">extends ActionSupport</font> {  <p>&nbsp;&nbsp;&nbsp; private String loginName;<br>&nbsp;&nbsp;&nbsp; private String password;<br>&nbsp;&nbsp;&nbsp; @Override<br>&nbsp;&nbsp;&nbsp; <font color="#ff00ff">public String execute() throws Exception {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SUCCESS;<br>&nbsp;&nbsp;&nbsp; }</font>  <p>&nbsp;&nbsp;&nbsp; @Override<br><font color="#ff00ff">&nbsp;&nbsp;&nbsp; public void validate() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( ! "simple".equals(loginName)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addFieldError("loginName", "登录名不正确!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(! "simple".equals(password)){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addFieldError("password", "密码不正确!");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</font>  <p>&nbsp;&nbsp;&nbsp; //*******Getter和Setter方法***********//<br>&nbsp;&nbsp;&nbsp; public String getLoginName() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return loginName;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setLoginName(String loginName) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.loginName = loginName;<br>&nbsp;&nbsp;&nbsp; }  <p>&nbsp;&nbsp;&nbsp; public String getPassword() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return password;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; public void setPassword(String password) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.password = password;<br>&nbsp;&nbsp;&nbsp; }<br>}</p></td></tr></tbody></table> <p>解释一下这个类吧：</p> <table border="1" cellspacing="0" cellpadding="2" width="579"> <tbody> <tr> <td valign="top" width="577"> <p><font color="#ff00ff">execute</font> 这个方法是重写了父类ActionSupport的方法，是Action默认会执行的方法，即访问…/login.action或者…/login，它默认会执行这个方法。</p> <p><font color="#ff00ff">validate</font> 在执行execute方法之前，它会先执行validate这个方法，检查登录框是否输入正确，这个方法也是重写了父类的validate方法。</p> <p>getter和setter，有了setter方法，才能使action能拿到上一个JSP页面传过来的Request域的数据；有了getter方法，下一个转发（dispatcher）过去的页面才能拿到此Action的Request域的数据。</p> <p>执行过程是这样：表单提交给LoginAction，LoginAction先执行validate方法，检验loginName和password是否符合要求，如果不符合，就会<font color="#ff00ff">addFieldError</font> （把错误信息放到Field栈里），如果Field栈里有错误信息的话，它就不会再执行execute方法，直接转发（Dispatcher）到INPUT即“input”所指定的错误处理页面，这里为<font color="#ff00ff">location="loginform.jsp"，</font>即让它返回到表单登录页去，如果刚才validate方法中验证正确，即Field栈中没有错误信息，就会执行execute方法。在这里execute返回SUCCESS,即“success”，根据Result注解，就会重定向到admin/index.action这个action。</p></td></tr></tbody></table> <p>返回SUCCESS重定向到的后台主页，其实简单，admin/index.jsp，代码很简单，就在HTML中显示一句“登录成功”，代码略。</p> <p>这些的目录结构如下：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb.png" width="226" height="331"></a> </p> <p>运行一下吧：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb_1.png" width="371" height="165"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb_2.png" width="366" height="143"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.62Action_14DA2/image_thumb_3.png" width="369" height="114"></a> </p> <p>一点提醒：本项目网页的排版以精简为主，在真实的网站开发中，建议用Dreamweaver可视化排版，再作必要的修改和嵌入必要的动态标签。</p> <p>“Struts 2.1.6 精简实例系列教程(2)：用户登录模块的实现” 讲解就到此，你也试一下吧，好，敬请关注下文！</p><img src ="http://www.blogjava.net/rongxh7/aggbug/287554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-21 00:14 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/21/287554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts 2.1.6 精简实例系列教程(1)：环境的搭建与HelloSimple</title><link>http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html</link><dc:creator>心梦帆影</dc:creator><author>心梦帆影</author><pubDate>Sat, 18 Jul 2009 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html</guid><wfw:comment>http://www.blogjava.net/rongxh7/comments/287258.html</wfw:comment><comments>http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/rongxh7/comments/commentRss/287258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rongxh7/services/trackbacks/287258.html</trackback:ping><description><![CDATA[<p>下载Struts2.1.6，网址<a title="http://struts.apache.org/download.cgi#struts216" href="http://struts.apache.org/download.cgi#struts216">http://struts.apache.org/download.cgi#struts216</a>，点击下图中选中的部分即可下载。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb.png" width="586" height="448" /></a> </p>
<p>下载Eclipse for JavaEE（3.4 or 3.5），网址<a title="http://www.eclipse.org/downloads/" href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>，点击下图选中的链接，进入下一个页面，找到能够下载的地方下载就行。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_1.png" width="594" height="424" /></a> </p>
<p>JDK6.0和Tomcat6.0，请大家自行下载。</p>
<p>另外，建议下载JSP标准标准库JSTL，下载地址：<a href="/Files/rongxh7/jstl-jar.rar">/Files/rongxh7/jstl-jar.rar</a></p>
<p>好，暂时下载这些，以后，需要用到其他的时，再下载。至于JDK6.0，Tomcat6.0，Eclipse的安装，请大家自行安装，在这里就不演示安装过程了，如有什么问题，再联系我。</p>
<p>关于Eclipse的部分用法，如在Eclipse里配置Tomcat服务器，新建动态Web项目等，请看我的<a href="http://www.blogjava.net/rongxh7/category/39849.html">(Eclipse图解教程)</a>，或者上网找一下其他的资料学习一下。</p>
<p>来开始我们的项目吧，先做个简单的测试，New一个Dynamic Web Project，起名为&#8220;SimpleWeb&#8221;，将Struts2.1.6的下载包解压后得到的lib目录，在lib目录下，找到以面的jar包：</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400">
            <p><img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />xwork-2.1.2.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />struts2-core-2.1.6.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />struts2-convention-plugin-2.1.6.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />ognl-2.6.11.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />freemarker-2.3.13.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />commons-loggin-1.0.4.jar<br />
            <img alt="" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" />commons-fileupload-1.2.1.jar</p>
            </td>
        </tr>
    </tbody>
</table>
<p>把这些包放进项目的lib目录下，同时，建议也把JSTL的核心jar包也放到lib目录，这些JSTL的包主要有：</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
    <tbody>
        <tr>
            <td valign="top" width="400">
            <p>jstl.jar<br />
            standard.jar</p>
            </td>
        </tr>
    </tbody>
</table>
<p>我们先要在项目WEB-INF下的web.xml文件中配置Struts2应用，配置后，web.xml全部代码如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="666">
    <tbody>
        <tr>
            <td valign="top" width="664">
            <p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
            &lt;web-app xmlns:xsi="<a href='http://www.w3.org/2001/XMLSchema-instance"' href_cetemp='http://www.w3.org/2001/XMLSchema-instance"'>http://www.w3.org/2001/XMLSchema-instance"</a> xmlns="<a href='http://java.sun.com/xml/ns/javaee"' href_cetemp='http://java.sun.com/xml/ns/javaee"'>http://java.sun.com/xml/ns/javaee"</a> xmlns:web="<a href='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"' href_cetemp='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"'>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a> <a href='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"' href_cetemp='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"'>http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> id="WebApp_ID" version="2.5"&gt;<br />
            &nbsp; &lt;display-name&gt;SimpleWeb&lt;/display-name&gt;<br />
            <font color="#ff00ff">&nbsp; &lt;filter&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Struts2&lt;/filter-name&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;<br />
            &nbsp; &lt;/filter&gt;<br />
            &nbsp; &lt;filter-mapping&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;filter-name&gt;Struts2&lt;/filter-name&gt;<br />
            &nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
            &nbsp; &lt;/filter-mapping&gt;</font><br />
            &lt;/web-app&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p>我们在项目的WEB-INF目录下新建一个文件夹命名为&#8220;content&#8221;，这个文件夹名一定要这样，如果写成别的，要另外配置一下，但初学的话，就按它默认的吧。我们新建的这个content目录，就是专门用来放JSP文件的。</p>
<p>我们在content目录下建一个JSP文件，命名为&#8220;hello.jsp&#8221;，内容可以很简单，就在里面写一个简单的话：Hello SImple，代码略。</p>
<p>这时，整个项目的文件夹视图如下：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_2.png" width="411" height="460" /></a> </p>
<p>我运行Tomcat服务器，测试一下Struts2配置能不能用。首先我们在地址栏输入：<a title="http://localhost:8060/SimpleWeb2/hello.jsp" href="http://localhost:8060/SimpleWeb/hello.jsp">http://localhost:8060/SimpleWeb/hello.jsp</a> ，很遗憾，不管用了，报错了：HTTP Status 404 - <u>The requested resource (/SimpleWeb/hello.jsp) is not available.</u>截图如下：</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_20.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_9.png" width="532" height="290" /></a> </p>
<p>正确的做法是，输入地址： <a title="http://localhost:8060/SimpleWeb2/hello.action" href="http://localhost:8060/SimpleWeb/hello.action">http://localhost:8060/SimpleWeb/hello.action</a> 或者<a href="http://localhost:8060/SimpleWeb/hello">http://localhost:8060/SimpleWeb/hello</a> 如果出现如下结果，就说明Struts2配置成功了。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_18.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_8.png" width="389" height="100" /></a> </p>
<p>&nbsp;</p>
<p>注意一点，这只是在WEB-INF/content目录下的文件是通过这种方式访问的；如果不是在这目录下，而在项目目录下，即Eclipse对应项目的WebContent下，就不能这样访问了。举例说，在项目根目录下建个hello.jsp的文件，则我们只能通过<a title="http://localhost:8060/SimpleWeb2/hello.jsp" href="http://localhost:8060/SimpleWeb/hello.jsp">http://localhost:8060/SimpleWeb/hello.jsp</a>来访问。</p>
<p>能通过hello.action或者hello访问WEB-INF/content下的hello.jsp，这种做法，是Struts2.1.6跟Struts2.0不同之处之一。使用时请确保你使用的Struts版本是2.1.6+。相关的命名规范与默认的action匹配规则，请参考官方的文档：<a title="http://struts.apache.org/2.1.6/docs/convention-plugin.html" href="http://struts.apache.org/2.1.6/docs/convention-plugin.html">http://struts.apache.org/2.1.6/docs/convention-plugin.html</a></p>
<p>我们再新建一个Java类，命名为HelloAction，此类须继承com.opensymphony.xwork2.ActionSupport，代码如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="577">
    <tbody>
        <tr>
            <td valign="top" width="575">
            <p>package cn.simple.action;
            <p>import org.apache.struts2.convention.annotation.Result;<br />
            import org.apache.struts2.convention.annotation.Results;<br />
            import com.opensymphony.xwork2.ActionSupport; </p>
            <p><br />
            public class HelloAction <font color="#ff00ff">extends ActionSupport</font> { </p>
            <p>&nbsp;&nbsp;&nbsp; @Override<br />
            &nbsp;&nbsp;&nbsp; public String execute() throws Exception {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff00ff">System.out.println("HelloAction execute ... ");</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <font color="#ff00ff">SUCCESS;</font><br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </td>
        </tr>
    </tbody>
</table>
<p>让我们再次访问：<a title="http://localhost:8060/SimpleWeb2/hello.action" href="http://localhost:8060/SimpleWeb/hello.action">http://localhost:8060/SimpleWeb/hello.action</a> 或者<a href="http://localhost:8060/SimpleWeb/hello">http://localhost:8060/SimpleWeb/hello</a>&nbsp;</p>
<p>可以看出，在Eclipse的控制台确定打印出了以下信息，这说明，访问请求确定经过了HelloAction类。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_5.png" width="483" height="56" /></a> </p>
<p>同时页面是跳到了WEB-INF/content/hello.jsp文件（如下图），这说明请求的确是从HelloAction类转发到了hello.jsp。</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_16.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/rongxh7/WindowsLiveWriter/Struts2.1.6_110F3/image_thumb_7.png" width="463" height="119" /></a> </p>
<p>看来，好像在不做什么配置，Struts2.1.6也会找到名为HelloAction的类来处理&#8230;/hello.action或者&#8230;/hello的请求，而好像也没有做什么配置，HelloAction会自动将请求转发给名为hello.jsp的页面，这正是Struts2.1.6的妙用之处，全赖struts2-convention-plugin-2.1.6.jar这个插件，具体了解，可看我上面提供的官方链接，或者看这位帅哥的翻译之作：<a href="http://javeye.javaeye.com/blog/358744">struts2采用convention-plugin实现零配置</a>。</p>
<p>看了上面的HelloAction的代码若感到莫名其妙的话，我这里把那些默认的、约定俗成的代码也写出来，这样，修改后的HelloAction类如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="621">
    <tbody>
        <tr>
            <td valign="top" width="619">
            <p>package cn.simple.action;
            <p>import org.apache.struts2.convention.annotation.Result;<br />
            import org.apache.struts2.convention.annotation.Results;<br />
            import com.opensymphony.xwork2.ActionSupport;
            <p><font color="#ff00ff">@Results({<br />
            &nbsp;&nbsp;&nbsp; @Result(name="success",location="hello.jsp",type="dispatcher")<br />
            })</font><br />
            public class HelloAction extends ActionSupport {
            <p>&nbsp;&nbsp;&nbsp; @Override<br />
            &nbsp;&nbsp;&nbsp; public String execute() throws Exception {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("HelloAction execute ... ");<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return <font color="#ff00ff">SUCCESS</font>;<br />
            &nbsp;&nbsp;&nbsp; }<br />
            }</p>
            </td>
        </tr>
    </tbody>
</table>
<p>这样就容易明白许多了。解释如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="621">
    <tbody>
        <tr>
            <td valign="top" width="619"><font color="#ff00ff">name = &#8220;success&#8221;</font> 跟 Action里的execute()方法的返回值SUCCESS（也可写成&#8220;success&#8221;）对应，即若此Action类一旦返回SUCCESS，就会跳到对应的这个Result去处理。<br />
            <font color="#ff00ff">location = &#8220;hello.jsp&#8221;，</font>表示请求由这个Action跳转到hello.jsp这个页面。<br />
            <font color="#ff00ff">type = &#8220;dispathcer</font>&#8221;，表示转发方式，具体解释见下面。</td>
        </tr>
    </tbody>
</table>
<p><br />
其中type=&#8221;dispatcher&#8221;表示请求转发,还有另一种常用的叫做type=&#8221;redirect&#8221;重定向,在下文会出现。Struts2的请求转发和重定向的区别其实跟Java Servlet里的是差不多的。Servlet里与其功能等价的的代码片断如下：</p>
<table border="0" cellspacing="0" cellpadding="2" width="599">
    <tbody>
        <tr>
            <td valign="top" width="597">
            <p>request.getRequestDispatcher("hello.jsp").forward(request, response);&nbsp;&nbsp;&nbsp; //请求转发<br />
            response.sendRedirect("hello.jsp");&nbsp;&nbsp;&nbsp; //重定向</p>
            </td>
        </tr>
    </tbody>
</table>
<p>两者的区别可以这样理解：请求转发（Dispatcher）在转发到的另一页面（如hello.jsp）还能保留Request域里的东西，而重定向（Redirect）的话，就跟它的名字&#8220;重定向&#8221;一样，跳到了另一个页面(如hello.jsp)，不再跟原来页面（或者一个action、或者一个Servlet，或者JSP页面）有任何瓜葛，不会保存原来页面Request域的东西。还有一个表面上的区别就是：请求转发（Dispatcher）到另一个页面（如hello.jsp）后，地址栏里显示的仍然是上一个页面（这里称页面不太合适）的路径（如hello.action），而重定向则显示的是新跳到的那个页面的路径。大家自己测试一下，观察一下，其实也挺容易理解的。</p>
<p>Struts 2.1.6 精简实例系列教程第一期——环境的搭建与HelloSimple介绍就到此，敬请期待下文！</p>
<img src ="http://www.blogjava.net/rongxh7/aggbug/287258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rongxh7/" target="_blank">心梦帆影</a> 2009-07-18 17:27 <a href="http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>