选择java 进入自由开放的国度

随笔 - 49, 文章 - 3, 评论 - 154, 引用 - 1
数据加载中……

Struts学习心得之Struts流程篇(3) -示例

    上一篇我们讲了Struts的配置以及运行环境,这一篇我们通过一个实例来说明Struts实现MVC的过程和Struts开发WEB应用的一般方法。
     (1)实例介绍
       这是《论文在线提交》系统的用户注册部分,用户填入用户名(userid)和Email地址(email)后,如果Email和userid在数据库中不存在,则注册成功,将系统生成的8位密码发送到用户的信箱里。数据表定义如下:
    
CREATE TABLE passwd (
  userid varchar(
20) DEFAULT '' NOT NULL,       #用户id
  password varchar(
16) DEFAULT '' NOT NULL,     #密码 使用PASSWORD()加密后的
  email  varchar(
50) DEFAULT '' NOT NULL,       #email
  PRIMARY KEY (userid),
  KEY password (password)
);

      (2)不使用MVC模式的实现
        有过ASP设计经验的开发人员,如果看到这样一个功能,那简直是太简单了。只要设计一个表单,然后post给一个asp页面,在这个页面中实现数据检查(检查email和用户名是否存在)及数据插入和email发送的功能。如果纯用jsp实现,基本流程也是一样的。这样做有什么不好呢?我们先看使用Struts的MVC来实现这样的功能,然后我们再做一下比较。
       (3)使用Struts MVC实现
         如果使用框架,我们就必须按照框架进行编程,而不是“自由”的编程,我们必须在实现中有M,有V、有C。下面看一下Struts实现MVC的一般流程。
         i. 这是HTML中表单的定义,action指定要将表单中的数据提交给谁进行处理,看以下几种情况:1. 纯用jsp,action肯定是一个jsp文件;2.使用jsp/JavaBean方式,action也是一个jsp,但是它将form中的数据映射到javaBean中,然后在jsp文件中进行获取和处理;3. 采用MVC方式,这要转变一下思路,脑子中要时刻清醒,M是什么,V是什么,C是什么,并且要理解它们的用途,不可用错和滥用。下面我们看一下Struts中MVC的表现方式和使用方法。
       ii 首先我们看M、V和C的表现。在Struts中,
          首先看viewer,这是表现层,主要有jsp、servelt和javabean组成。也就是说我们将表单的数据放到javabean中,这个过程都是viewer的工作;
          Controller,控制器主要是实现数据的验证,并且实现跳转,就是要将控制权交给“谁”。譬如:在用户注册中,当用户将数据传到bean,然后到action时,action去判断email是否存在,如果存在将页面跳转到error.jsp或者输出错误信息,如果不存在就跳转到注册成功的页面

       
  Model,这是业务逻辑,这在Struts中没有强制定义,主要功能就是实现业务逻辑,是功能体,譬如实现数据库的插入,删除等。可以是POJO,也可以是EJB等。
        (4)用Struts实现用户注册。
          第一步、实现viewer,有以下几个部分组成,signin.jsp(显示输入form和错误显示)、SignForm.java(一个javaBean,不过在Struts中要继承自ActionForm,实现数据映射和简单的验证)。一下是关键代码:
signin.jsp
<font color=red>
<html:errors/>   ---错误处理 详细信息见本blog《Struts中的错误处理流程》
font>
  
<html:form action="/sign.do">
  --- sign.do是一个Action,在解释Struts
-conf.xml时说明

         
<bean:message key="sign.userid"/><html:text property="userid"/><br>
         
<bean:message key="sign.email"/><html:text property="email"/>
        
<html:submit ><bean:message key="login.signup"/>html:submit>  

      
html:form>

说明:
<bean:message key="sign.userid"/>从资源文件中读取数据,详细信息见本blog的《struts中资源文件的使用》
SignForm.java
 1package user;
 2
 3import javax.servlet.http.HttpServletRequest;
 4
 5import org.apache.struts.action.ActionError;
 6import org.apache.struts.action.ActionErrors;
 7import org.apache.struts.action.ActionForm;
 8import org.apache.struts.action.ActionMapping;
 9
10/**//**
11 * @author han
12 * @company soochow university
13 * 注册bean
14 */

15
public class SignForm extends ActionForm {
16   private String userid = null;
17   private String email = null;
18   private String password = null;
19   
20   
21/**//**
22 * @return Returns the password.
23 */

24
public String getPassword() {
25    return password;
26}

27
/**//**
28 * @param password The password to set.
29 */

30
public void setPassword(String password) {
31    this.password = password;
32}

33
/**//**
34 * @return Returns the email.
35 */

36
public String getEmail() {
37    return email;
38}

39
/**//**
40 * @param email The email to set.
41 */

42
public void setEmail(String email) {
43    this.email = email;
44}

45
/**//**
46 * @return Returns the userid.
47 */

48
public String getUserid() {
49    return userid;
50}

51
/**//**
52 * @param userid The userid to set.
53 */

54
public void setUserid(String userid) {
55    this.userid = userid;
56}

57
58  public void reset(ActionMapping mapping, HttpServletRequest request){
59         userid = null;
60         email = null;
61  }

62
  //验证
63
  public ActionErrors validate(ActionMapping mapping, HttpServletRequest request){
64        ActionErrors errors = new ActionErrors();
65        
66        if(this.userid == null || this.userid.length()<1){
67              errors.add("userid"new ActionError("userid.required"));
68        }

69        
70        if(this.email == null || this.email.length() < 1){
71              errors.add("email"new ActionError("email.required"));
72        }

73        
74        return errors;
75  }

76
}

      从代码我们可以看出,SignForm除了实现bean的getter和setter功能外还实现了简单的验证,即验证userid和email是否为空,若空则出错!
      关于form的action,我们在讲action和编辑struts-config.xml文件时会进行说明。

posted on 2005-05-19 10:31 soochow_hhb 以java论成败 以架构论英雄 阅读(1625) 评论(0)  编辑  收藏 所属分类: Struts


只有注册用户登录后才能发表评论。


网站导航: