JBuilder 2005 Struts深度体验之改革
当前位置:以往代写 > JAVA 教程 >JBuilder 2005 Struts深度体验之改革
2019-06-14

JBuilder 2005 Struts深度体验之改革

JBuilder 2005 Struts深度体验之改革

副标题#e#

用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所示的对话框:

JBuilder 2005 Struts深度体验之改良

图6 建设UserActionForm

·Struts config:我们前面有提到Struts1.1支持多个设置文件,所以你在这儿可以选择利用哪个Struts设置文件。因为我们此刻还没有界说多个Struts设置文件,所以只得利用struts-config.xml。在开拓新增图书的成果时,我们将界说另一个设置文件。

·ActionForm:ActionForm的类名,这里我们填入UserActionForm。

按Next到下一步。

2.界说ActionForm属性

JBuilder 2005 Struts深度体验之改良

图7 界说ActionForm属性

通过Add…按钮为UserActionForm增加4个属性,如图7所示。出格的,假如这个ActionForm所对应的进口页面已经建设,你也可以直接通过Add from JSP…按钮,选择一个JSP页面,JBuilder会阐明这个页面的表单,并将表单的数据组件名抽取为ActionForm的属性。

按Next到下一步。

3.一些附加成果的界说

JBuilder 2005 Struts深度体验之改良

图8 附加成果界说


#p#副标题#e#

在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模块

JBuilder 2005 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模块间转换。

#p#分页标题#e#

由于我们的Action需要完成用户暗码验证的业务,并按照功效转换到差异的页面中,所以这个LoginAction是一个普通的Action,故我们选择org.apache.struts.action.Action。

按Next到下一步。

#p#副标题#e#

2.配置Action的设置信息

JBuilder 2005 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所示:

JBuilder 2005 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的后缀。

    关键字:

在线提交作业