网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  jbuilder2005 struts深度体验之改造     
  文章作者:未知  文章来源:水木森林  
  查看:104次  录入:管理员--2007-11-17  
 
  用actionform截获登录表单数据
  
  原登录模块用bookstore.user描述login.jsp登录页面表单的数据,在switch.jsp程序中通过<jsp:usebean>标签获取login.jsp表单的数据。其实user类相当于struts框架中的模型,我们将通过一个actionform更好地实现这个功能。
  
  actionform和bean一样以属性名匹配的映射机制从http请求中填充对象数据,但actionform比一般的bean提供了更多的功能,struts允许actionform通过validate()方法进行自校验,当数据不合法时自动转向到输出界面,此外还可以通过reset()方法,在数据填充前复位属性值。
  
  下面我们就来创建useractionform,替换user的功能,建立起struts框架中的"数据模型"。
  
  1.指定actionform的web模块及类信息
  
  file->new...->web->在web页中双击actionform图标,弹出如图 6所示的对话框:
   jbuilder2005 struts深度体验之改造(图一)
  图 6 创建useractionform
  
  ?struts config:我们前面有提到struts1.1支持多个配置文件,所以你在这儿可以选择使用哪个struts配置文件。因为我们现在还没有定义多个struts配置文件,所以只得使用struts-config.xml。在开发新增图书的功能时,我们将定义另一个配置文件。
  
  ?actionform:actionform的类名,这里我们填入useractionform。
  
  按next到下一步。
  
  2.定义actionform属性
   jbuilder2005 struts深度体验之改造(图二)
  图 7 定义actionform属性
  
  通过add...按钮为useractionform增加4个属性,如图 7所示。特别的,如果这个actionform所对应的入口页面已经创建,你也可以直接通过add from jsp...按钮,选择一个jsp页面,jbuilder会分析这个页面的表单,并将表单的数据组件名抽取为actionform的属性。
  
  按next到下一步。
  
  3.一些附加功能的定义
   jbuilder2005 struts深度体验之改造(图三)
  图 8 附加功能定义
  
  在formbeanname中为useractionform指定一个名字,一般接受jbuilder所提供的默认名即可。这个名字将在struts-config.xml文件用来命名useractionform。
  
  actionform比一般javabean强大的地方在于它可以进行数据检验,还可以进行数据复位。如果这个actionform最终要放到session中的,那么最好实现reset()方法,以复位actionform的数据,否则属性可能不会反映最新的值。这里, useractionform无需进行数据有效性校验,但由于useractionform最终需要放到session中,所以我们需要实现reset()方法。故此我们勾选create/replace reset() method body选项。
  
  直接按finish创建useractionform,再将user类的代码拷贝过来,整改后的最终代码如下所示:
  
  代码清单 6 以actionform实现的user类
  
  1. package bookstore;
  2.
  3. import java.sql.*;
  4. import java.text.*;
  5. import java.util.date;
  6. import javax.servlet.http.*;
  7. import org.apache.struts.action.*;
  8.
  9. public class useractionform
  10. extends actionform
  11. {
  12.  private string userid;
  13.  private string password;
  14.  private string username;
  15.  private string logindatetime;
  16.  public string getpassword() {
  17.   return password;
  18.  }
  19.
  20.  …
  21.  //复位所有属性值
  22.  public void reset(actionmapping actionmapping,httpservletrequest servletrequest) {
  23.   this.userid = null;
  24.   this.username = null;
  25.   this.password = null;
  26.   this.logindatetime = null;
  27. }
  
  此外,jbuilder自动在struts-conf.xml文件中通过<form-bean>描述actionform。useractionform必须和一个action相关联,因为http请求通过struts总控制器转发给action,struts控制器一旦发现action有一个对应的actionform时,就用http请求的数据填充这个actionform。
  
  用action代替switch.jsp的控制转换功能
  
  我们在前面已经数落用switch.jsp实现请求转换控制的缺点,struts框架的action是实现请求转换控制的最适合替代者。
  
  在这节里,我们就来创建一个名为loginaction的action,让其完美的接替switch.jsp的工作。
  
  file->new...->web->在web页中双击action图标,启动创建action的向导。
  
  1.指定action名字及web模块
   jbuilder2005 struts深度体验之改造(图四)
  图 9 指定web模块及action名字
  
  在action中键入loginaction作为action的类名,其中base class的下拉框中有许多action基类可供选择,它们用于不同的场合,这些选项是:
  
  ?org.apache.struts.action.action:标准的action。
  
  ?org.apache.struts.actions.forwardaction:相当于jsp的<jsp:forward>,方便struts控制器进行预处理。此外,从学究的角度上来说,在jsp页面直接通过<jsp:forward>违反了mvc的分层原则,控制器无法干预。
  
  ?org.apache.struts.actions.includeaction:出于forwardaction相似的原因,struts推荐用includeaction代替jsp的<jsp:include>。
  
  ?org.apache.struts.actions.lookupdispatchaction:如果一个表单有多个提交按钮,不同的提交按钮执行不同的业务操作,用dispatchaction最为合适。
  
  ?org.apache.struts.actions.switchaction:用switchaction可在不同的struts模块间转换。
  
  由于我们的action需要完成用户密码验证的业务,并根据结果转换到不同的页面中,所以这个loginaction是一个普通的action,故我们选择org.apache.struts.action.action。
  
  按next到下一步。
  
  2.设置action的配置信息
   jbuilder2005 struts深度体验之改造(图五)
  图 10 设置loginaction的配置信息
  
  ?action path:访问这个action的uri,接受默认的/loginaction,这样我们将通过类似这样的url:http://127.0.0.1:8080/webmodule/loginaction.do来访问这个action。
  
  ?formbean name:下拉框中列出web模块中所有的actionform,我们选择前一小节中所创建的useractionform。这样客户端的http请求访问loginaction时,http请求所带的数据就会被struts总控制器自动填充到useractionform中了。
  
  ?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所示:
   jbuilder2005 struts深度体验之改造(图六)
  图 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的后缀。
 
 
上一篇: 运用jakarta struts的七大实战心法解析    下一篇: jbuilder2005 struts深度体验之新增
  相关文档
pow 方法 11-16
学习深入java 1.5枚举类型的内部 11-17
java how to program(third edition)——我的java手记(二) 11-17
在 tomcat 5 中配置数据库连接池(dbcp) 11-17
jsp中的三种页面跳转方式的介绍及比较 11-16
利用 struts 实现动态控制表格大小(1) 11-17
关于j2me——midp1.0中的碰撞检测 11-17
线程基础---wait(),notify的应用一例 11-16
java程序的加密和反加密 11-16
java高级编程:提升jsp应用程序的效率 05-28
头条:webwork将加入struts! 11-17
ibm java如何做到高性能gc的实现内幕 11-17
六个for循环的java小程序源码展播 11-16
lucene --open source text serch engine api(讲稿) 11-17
ejb设计模式(3) 11-17
dom属性用法速查手册 11-16
java实战篇:设计自己的annotation 11-17
jsp:javascript 实现输入多行动态输入 11-17
处理java程序中没有被捕获的异常 11-17
j2ee综合--总结java编程中的经验教训 03-06
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息