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

该博客分享了Struts学习心得之流程篇的示例内容,还给出了转载来源。主要围绕Struts流程示例展开,与信息技术中后端开发框架相关。

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

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

      (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
None.gif < font color = red >
None.gif
< html:errors />    ---错误处理 详细信息见本blog《Struts中的错误处理流程》
None.gif
< SPAN>font>
None.gif  
<html:form action="/sign.do">
None.gif  --- sign.do是一个Action,在解释Struts
-conf.xml时说明
None.gif
None.gif         
<bean:message key="sign.userid"/><html:text property="userid"/><br>
None.gif         
<bean:message key="sign.email"/><html:text property="email"/>
None.gif        
<html:submit ><bean:message key="login.signup"/>< SPAN>html:submit>  
None.gif
None.gif      
< SPAN>html:form>
None.gif
None.gif说明:
<bean:message key="sign.userid"/>从资源文件中读取数据,详细信息见本blog的《struts中资源文件的使用》
SignForm.java
 1 None.gif package user;
 2None.gif
 3None.gifimport javax.servlet.http.HttpServletRequest;
 4None.gif
 5None.gifimport org.apache.struts.action.ActionError;
 6None.gifimport org.apache.struts.action.ActionErrors;
 7None.gifimport org.apache.struts.action.ActionForm;
 8None.gifimport org.apache.struts.action.ActionMapping;
 9None.gif
10 ExpandedBlockStart.gifContractedBlock.gif /**//**
11InBlock.gif * @author han
12InBlock.gif * @company soochow university
13InBlock.gif * 注册bean
14ExpandedBlockEnd.gif */
15 ExpandedBlockStart.gifContractedBlock.gif public   class  SignForm extends ActionForm  dot.gif{
16InBlock.gif   private String userid = null;
17InBlock.gif   private String email = null;
18InBlock.gif   private String password = null;
19InBlock.gif   
20InBlock.gif   
21ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**
22InBlock.gif * @return Returns the password.
23ExpandedSubBlockEnd.gif */
24ExpandedSubBlockStart.gifContractedSubBlock.gifpublic String getPassword() dot.gif{
25InBlock.gif    return password;
26ExpandedSubBlockEnd.gif}
27ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**
28InBlock.gif * @param password The password to set.
29ExpandedSubBlockEnd.gif */
30ExpandedSubBlockStart.gifContractedSubBlock.gifpublic void setPassword(String password) dot.gif{
31InBlock.gif    this.password = password;
32ExpandedSubBlockEnd.gif}
33ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**
34InBlock.gif * @return Returns the email.
35ExpandedSubBlockEnd.gif */
36ExpandedSubBlockStart.gifContractedSubBlock.gifpublic String getEmail() dot.gif{
37InBlock.gif    return email;
38ExpandedSubBlockEnd.gif}
39ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**
40InBlock.gif * @param email The email to set.
41ExpandedSubBlockEnd.gif */
42ExpandedSubBlockStart.gifContractedSubBlock.gifpublic void setEmail(String email) dot.gif{
43InBlock.gif    this.email = email;
44ExpandedSubBlockEnd.gif}
45ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**
46InBlock.gif * @return Returns the userid.
47ExpandedSubBlockEnd.gif */
48ExpandedSubBlockStart.gifContractedSubBlock.gifpublic String getUserid() dot.gif{
49InBlock.gif    return userid;
50ExpandedSubBlockEnd.gif}
51ExpandedSubBlockStart.gifContractedSubBlock.gif/**//**
52InBlock.gif * @param userid The userid to set.
53ExpandedSubBlockEnd.gif */
54ExpandedSubBlockStart.gifContractedSubBlock.gifpublic void setUserid(String userid) dot.gif{
55InBlock.gif    this.userid = userid;
56ExpandedSubBlockEnd.gif}
57InBlock.gif
58ExpandedSubBlockStart.gifContractedSubBlock.gif  public void reset(ActionMapping mapping, HttpServletRequest request)dot.gif{
59InBlock.gif         userid = null;
60InBlock.gif         email = null;
61ExpandedSubBlockEnd.gif  }
62InBlock.gif  //验证
63ExpandedSubBlockStart.gifContractedSubBlock.gif  public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)dot.gif{
64InBlock.gif        ActionErrors errors = new ActionErrors();
65InBlock.gif        
66ExpandedSubBlockStart.gifContractedSubBlock.gif        if(this.userid == null || this.userid.length()<1)dot.gif{
67InBlock.gif              errors.add("userid"new ActionError("userid.required"));
68ExpandedSubBlockEnd.gif        }
69InBlock.gif        
70ExpandedSubBlockStart.gifContractedSubBlock.gif        if(this.email == null || this.email.length() < 1)dot.gif{
71InBlock.gif              errors.add("email"new ActionError("email.required"));
72ExpandedSubBlockEnd.gif        }
73InBlock.gif        
74InBlock.gif        return errors;
75ExpandedSubBlockEnd.gif  }
76ExpandedBlockEnd.gif}

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

转载于:https://www.cnblogs.com/lvxuehui/archive/2005/12/20/300958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值