stucts流程-3

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

CREATETABLEpasswd(
useridvarchar(
20 )DEFAULT '' NOTNULL,#用户id
passwordvarchar(
16 )DEFAULT '' NOTNULL,#密码使用PASSWORD()加密后的
emailvarchar(
50 )DEFAULT '' NOTNULL,#email
PRIMARYKEY(userid),
KEYpassword(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

< fontcolor = red >
< html:errors /> ---错误处理详细信息见本blog《Struts中的错误处理流程》
font>
<html:formaction="/sign.do">
---sign.do是一个Action,在解释Struts
-conf.xml时说明

<bean:messagekey="sign.userid"/><html:textproperty="userid"/><br>
<bean:messagekey="sign.email"/><html:textproperty="email"/>
<html:submit><bean:messagekey="login.signup"/>html:submit>

html:form>

说明:
<bean:messagekey="sign.userid"/>从资源文件中读取数据,详细信息见本blog的《struts中资源文件的使用》
SignForm.java
1 packageuser;
2
3importjavax.servlet.http.HttpServletRequest;
4
5importorg.apache.struts.action.ActionError;
6importorg.apache.struts.action.ActionErrors;
7importorg.apache.struts.action.ActionForm;
8importorg.apache.struts.action.ActionMapping;
9
10 /**//**
11*@authorhan
12*@companysoochowuniversity
13*注册bean
14*/

15
public class SignFormextendsActionForm {
16privateStringuserid=null;
17privateStringemail=null;
18privateStringpassword=null;
19
20
21/**//**
22*@returnReturnsthepassword.
23*/

24
publicStringgetPassword(){
25returnpassword;
26}

27
/**//**
28*@parampasswordThepasswordtoset.
29*/

30
publicvoidsetPassword(Stringpassword){
31this.password=password;
32}

33
/**//**
34*@returnReturnstheemail.
35*/

36
publicStringgetEmail(){
37returnemail;
38}

39
/**//**
40*@paramemailTheemailtoset.
41*/

42
publicvoidsetEmail(Stringemail){
43this.email=email;
44}

45
/**//**
46*@returnReturnstheuserid.
47*/

48
publicStringgetUserid(){
49returnuserid;
50}

51
/**//**
52*@paramuseridTheuseridtoset.
53*/

54
publicvoidsetUserid(Stringuserid){
55this.userid=userid;
56}

57
58publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){
59userid=null;
60email=null;
61}

62
//验证
63
publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest){
64ActionErrorserrors=newActionErrors();
65
66if(this.userid==null||this.userid.length()<1){
67errors.add("userid",newActionError("userid.required"));
68}

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

73
74returnerrors;
75}

76
}

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

你可能感兴趣的:(编程,jsp,bean,mvc,struts)