手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

JBuilder2005 Struts深度体验之改造

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


  ·Scope:Action有两个选择:request和session。表示ActionForm在填充后将放在request对象中还是session对象中,由于我们需要在通过密码验证后,才使用户登录系统。这样就不能使userActionForm在数据填充时就放入session中,而应该在通过密码验证后,手工将其绑定到session中(UserActionForm一旦绑定到session中,其valueBound()方法就会被调用,记录用户登录日志),故此,我们选择request。

  ·input JSP:输入的JSP页面。在ActionForm需要进行数据有效性自校验的情况下,如果校验失败,Struts框架总控制器将请求返回到这个输入页面上。因为UserActionForm无需进行有效性校验(在3.1的第3步我们没有为UserActionForm实现自校验功能),所以无需指定输入的JSP。

  按Finish按钮直接创建LoginAction,JBuilder自动打开Struts Config Editor,生动形象地展现用户登录模块Struts框架下的处理流程,如图 11所示:


图 11 Struts Config Editor
  位于中心的/loginAction是访问LoginAction的URI,它是登录业务的控制器。Struts总控制器创建一个UserActionForm实例,并用HTTP请求的数据填充UserActionForm实例,然后将其传给LoginAction的execute()方法。

  3.定义访问入口

  现在我们需要调整login.jsp表单的提交地址,使用LoginAction来处理用户登录的请求,调整后的代码如所示:

  代码清单 7 login.jsp 使用LoginAction处理用户登录

1. <%@page contentType="text/html; charset=GBK" import="bookstore.UserList" %>
2. …
3. <form name="form1" method="post" action="/webModule/loginAction.do">用户名:
4.  <select name="userId">
5.   <option value="" selected>--登录用户--</option>
6.    <%=UserList.getUserListHTML()%>
7.  </select>
8.  密 码:
9.  <input name="password" type="password">
10.   <input type="submit" name="Submit" value="登录">
11. </form>
12. </body>
13. </html>


  如第3行所示,将原来action="switch.jsp"改为"/webModule/loginAction.do",由于我们需要将整个应用部署于/webModule的URI下,所以需要在Action访问的地址前加上/webModule。如果通过Struts的<html:form>标签来指定表单提交的地址,则无需添加/webModule,标签将自动进行转换,你将在本专题后续内容中学习到这种方法。

  注意:

  Struts框架总控制器Servlet通过路径匹配的方式截获HTTP请求,其匹配串是*.do,表示URL以.do结束的HTTP请求才会被Struts框架处理,否则Struts忽略之。所以在写链接地址时千万不要忘了调用地址后加一个.do的后缀。


  对login.jsp做调整后,重新切换到/loginAction的Struts Config Editor中,你将看到如图 12所示的流程图:


图 12 在JSP中指定调用Action后的流程图
  JBuilder将分析Web模块中所有JSP文件,如果发现引用了/loginAction就将其添加到该图中来,作为其访问入口。

  4.为/loginAction定义两个出口

  一个Action一般只有一个入口,但往往会有多个出口,Action根据业务处理的不同结果转向相应的出口。图 12 /loginAction右边是一个带"forward"的浅色虚框,右键单击这个forward虚框,在弹出的菜单中点击Add Forward菜单项,在Strut Config Editor中将新增一个默认名为forward的出口项图标,左键单击这个forward新增的图标,对这个出口进行制定,如图 13所示:


图 13 为Action定义出口
  我们为这个出口地址取名为success,点击Path后的…按钮弹出Browser For Path对话框,列出当前Web模块所有可作为出口地址,如图 14所示:


图 14 可选出口地址
  我们选择welcome.jsp作为success的出口地址,按OK确定。

  按相同的方法再为/loginAction创建一个名为fail出口地址为fail.jsp以及名为error出口地址为error.jsp两出口,最后登录模块的流程如图 15所示:


图 15 登录模块的最终流程
  后面,我们将在LoginAction通过代码根据用户验证成功与否决定程序的出口,你将会发现我们通过出口的名字引用出口的地址。
完成以上配置后,切换到Source标签页,struts-config.xml文件中悉数记录下了这个配置信息:

  代码清单 8 登录模块对应struts-config.xml的配置信息

1. <struts-config>
2.  <form-beans>
3.   <form-bean name="userActionForm" type="bookstore.UserActionForm" />
4.  </form-beans>
5.  <action-mappings>
6.   <action name="userActionForm" path="/loginAction"
7.        scope="request" type="bookstore.LoginAction">
8.    <forward name="success" path="/welcome.jsp" />
9.    <forward name="fail" path="/fail.jsp" />
10.   <forward name="error" path="/error.jsp" />
11.   </action>

12.  </action-mappings>
13. </struts-config>


  其中第3行的配置信息声明了UserActionForm,为其指定了一个名字,在第6~10行是/loginAction的配置信息,它通过name属性声明这个Action对应的ActionForm为UserActionForm。

  在第8~10行,3个出口各对应一个<forward>配置项,在LoginAction中我们将通过<forward>的name属性引用出口的地址。

  下面,我们调整LoginAction类的execute()方法的代码,在其中验证用户密码,并根据验证结果转向不同的出口,其最终代码如下所示:

  代码清单 9 LoginAction.java

1. package bookstore;
2.
3. import org.apache.struts.action.ActionMapping;
4. import org.apache.struts.action.ActionForm;
5. import javax.servlet.http.HttpServletRequest;
6. import javax.servlet.http.HttpServletResponse;
7. import org.apache.struts.action.ActionForward;
8. import org.apache.struts.action.Action;
9.
10. import java.sql.*;

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!