Struts in action

                Struts in action

这个简单的练习将展示以下内容:
l 创建HTML 表单;
l 从HTML 表单获取输入;
l 处理输入(业务逻辑);
l 根据动态输入改变控制流;
 为完成这个程序,你需要建立:
l 一个ActionForm
l 一个Action
l struts-config.xml 文件
l 三个页面
 就这些!
1.1.1.1 创建ActionForm
 ActionForm 是一个JavaBean ,扩展了 org.apache.struts.ActionForm类。这个对象捕获通过请求传送的输入。当浏览器提交一个表单,它在请求中为每个表单中的字段创建一个参数。ActionForm 针对每个HTML表单中的字段具有一个对应的属性。ActionServlet 匹配请求中的参数和ActionForm中的属性。当匹配好后,ActionServlet 为属性调用setter方法,并将请求中的值传入。在我们的练习中,表单中的username 字段需要一个setUsername(String)方法。password 字段需要setPassword1(String) 和 setPassword2(String)方法。这些方法负责组装隐藏在RegisterForm JavaBean中的实例变量。RegisterForm 的源代码显示在清单1中。
package app;import org.apache.struts.action.*;public class RegisterForm extends ActionForm {protected String username;protected String password1;protected String password2;public String getUsername () {return this.username;};public String getPassword1() {return this.password1;};public String getPassword2() {return this.password2;};public void setUsername (String username) {this.username = username;};public void setPassword1(String password) {this.password1 = password;};public void setPassword2(String password) {this.password2 = password;};}
代码清单 错误!文档中没有指定样式的文字。.1     RegistrationForm

 创建一个文件,取名为RegisterForm.java,内容示于代码清单1.1。存储在 <Base Directory>/webapps/register/WEB-INF/classes/app下。默认情况下, <Base Directory> 可能是 C:/PROGRAM FILES/APACHE TOMCAT 4.0。对于其他容器, 使用其classes目录的路径来部署我们的Register 程序。
1.1.1.2 创建 RegisterAction
 Action 一个 Java 类,扩展了 org.apache.struts.Action。ActionServlet 组装ActionForm ,然后将其传递给Action。Action 通常负责输入校验,存取业务信息,以及决定向Servlet返回哪个ActionForward 。
 现在,创建一个文件,命名为RegisterAction.java,其内容为代码清单1.2的内容:

package app;import org.apache.struts.action.*;import javax.servlet.http.*;import java.io.*;public class RegisterAction extends Action {public ActionForward perform (ActionMapping mapping,ActionForm form,HttpServletRequest req,HttpServletResponse res) {// ①Cast the form to the RegisterFormRegisterForm rf = (RegisterForm) form;String username = rf.getUsername();String password1 = rf.getPassword1();String password2 = rf.getPassword2();// ②Apply business logicif (password1.equals(password2)) {try {// ③Return ActionForward for successUserDirectory.getInstance().setUser(username,password1);return mapping.findForward("success");} catch (UserDirectoryException e) {return mapping.findForward("failure");}}// ④Return ActionForward for failurereturn mapping.findForward("failure");}}
代码清单 错误!文档中没有指定样式的文字。.2     RegisterAction.Java

 将文件存放在<Base Directory>/webapps/register/WEB-INF/classes/app 目录下。
 虽然很简单,但是我们的RegisterAction 却做了Action 的典型事情。在①,输入ActionForm 被转换为RegisterForm。我们就可以获取username, password1, 和 password2的内容。如果两次密码匹配②,我们将用户添加到 UserDirectory 中③,并返回与success 对应的ActionForward 。UserDirectory 是一个 helper 类,它记录usernames 和passwords 到一个标准的属性文件之中。否则,返回与failure 对应的ActionForward 。
当我们在下一步创建struts-config 文件时,我们将标识代表success和 failure的ActionForward 对象。

注:Struts 1.1提供另外一个进入方法,名为execute。这个方法提供更好的意外处理,但不和Struts 1.0 的perform方法一样。 在这里我们将使用perform 方法,以使我们的例子可以运行在两个版本之下。
1.1.1.3 创建Struts 配置文件 (struts-config.xml)
 struts-config.xml 文件包含了ActionServlet 需要用来处理对应用请求的详细信息。为了练习,我们创建一个空壳的struts-config.xml 文件。你需要做的是填入一些细节。
 文件存储在<BaseDirectory>/webapps/register/WEB-INF/目录下,需要改变的是:
首先,添加/register 到<action>元素的 path 属性。ActionServlet 使用Web容器转发给它的URI来选择正确的Action 类。URI 和ActionMapping 的path 属性匹配。这里,请求给出的路径必须在去除前缀和后缀后和/register 匹配。前缀或后缀通常是/do/ 或者 .do。 我们的练习中,将后缀设置为.do。当URI 具有一个.do 扩展名,容器就知道将请求转发给ActionServlet。Struts会自动去除 扩展名,所以我们在配置时不必加上它们。

下一步添加
registerForm
到<action> 元素的 name 属性。<action> 元素使用name 属性来识别哪个ActionForm 将被创建,并将提交的表单组装给他。

然后,添加
app.RegisterAction
到<action> 元素的 type 属性。ActionServlet 使用这个属性来识别将用来处理请求的Action 类。

接下来,在<forward> 元素下,添加
success
到 name 属性,并且
/success.html
到 path 属性。最后,再在另一个<forward>下添加
failure
到 name 属性,
/failure.html
到 path 属性。
 这些元素将创建ActionForward 对象,我们将用它来选择程序的控制流。<forward> 元素定义了在RegisterAction中使用的逻辑名称之间的关联。
 Struts-config.xml 源代码见代码1.3。
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"><struts-config><form-beans><form-bean name="registerForm" type="app.RegisterForm"/></form-beans><action-mappings><action path="/register"type="app.RegisterAction"name="registerForm"><forward name="success" path="/success.html"/><forward name="failure" path="/failure.html"/></action></action-mappings></struts-config>
代码清单 错误!文档中没有指定样式的文字。.3    Struts-Config.XML

 Struts框架将struts-config.xml 文件视为部署描述符使用。它使我们可以创建和改变ActionMapping 和路径的关联而不用重新编译java类。我们也可以改变页面之间的连接,而不改变JSP模板。
1.1.1.4 创建页面
 最后的步骤是创建success.html, failure.html, 以及register.jsp 页面。
 3个文件的源代码如下,见代码清单1. 4,1. 5,1.6。存放在<Base Directory>/webapps/register目录下。
<HTML><HEAD><TITLE>SUCCESS</TITLE></HEAD><BODY>Registration succeeded!<P><A href="register.jsp">try another?</A></P></BODY></HTML>
代码清单 错误!文档中没有指定样式的文字。.4  Success HTML

<HTML><HEAD><TITLE>FAILURE</TITLE></HEAD><BODY>Registration failed!<P><A href="register.jsp">try again?</A></P></BODY></HTML>
代码清单 错误!文档中没有指定样式的文字。.5   Failure.html

<%@ taglib uri="/WEB-INF/struts-form.tld" prefix="form" %><form:form action="register.do">UserName:<form:text property="username"/><br>enter password:<form:password property="password1"/><br>re-enter password:<form:password property="password2"/><br><form:submit value="Register"/></form:form>
代码清单 错误!文档中没有指定样式的文字。.6  Register.jsp

这时,所有构建一个简单Struts应用的工作都做完了。
现在,试一下运行如何。

如果,Tomcat 没有运行,启动它。
在浏览器中输入以下地址:
http://localhost:8080/register/register.jsp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值