stucts流程-4

第二步:实现controller。在Struts中继承自Action。调用Model,实现数据的深层次检验(email是否存在)和数据的插入,程序的跳转等。代码如下:

SignAction.java

1 /**/ /**
2*@authorhan
3*soochowuniversity
4*实现Action,controller
5*/

6 public class SignActionextendsAction {
7
8publicActionForwardexecute(ActionMappingmapping,ActionFormform,
9HttpServletRequestrequest,HttpServletResponseresponse
10)throwsException{
11
12/**//*参数说明:
13*ActionMapping实现跳转,控制页面
14*ActionForm在viewer中实现的bean,继承自ActionForm,获得form中的数据
15*HttpServletRequestrequest
16*HttpServeletRsponseresponse
17*/

18
19ActionErrorserrors=newActionErrors();//错误处理,详细信息见本blog的《Struts错误处理》
20
21/**//*
22*得到form中的数据,因为form中的数据在SignForm中,做一类型转换即可;
23*这个要在struts-config.xml中进行说明
24*/

25SignFormsf=(SignForm)form;
26
27/**//*
28*调用Model业务逻辑。
29*/

30SignModelsign=newSignModel();
31
32sign.setEmail(sf.getEmail());
33sign.setUserid(sf.getUserid());
34
35/**//*
36*调用Model的findUserByEmail和findUserByUserid判断
37*email和userid是否存在。
38*如果存在,则添加出错信息,页面跳转到mapping.getInputforward(),需要在
39*struts-config.xml中定义。
40*关于错误的详细信息请参看本blog的《struts错误处理》文章。
41*/

42//emailexisted
43if(sign.findUserByEmail()){
44errors.add("email.existed",newActionError("email.existed",sign.getEmail()));
45this.saveErrors(request,errors);
46returnmapping.getInputForward();
47}

48
49//useridexisted
50if(sign.findUserByUserid()){
51errors.add("userid.existed",newActionError("userid.existed",sf.getUserid()));
52this.saveErrors(request,errors);
53returnmapping.getInputForward();
54}

55
56/**//*
57*调用Model的sendPassword将系统生成的密码发送到用户信箱。
58*如果发生错误转到mapping.getInputForward(),这个需要在struts-config.xml中定义
59*详细信息见后面的struts-config.xml文件说明
60*/

61if(sign.sendPassword()){
62sign.saveNewUser();
63}
else{//邮件发送错误
64errors.add("email.send.error",newActionError("email.send.error",sf.getEmail()));
65this.saveErrors(request,errors);
66returnmapping.getInputForward();
67}

68
69/**//*
70*如果注册成功,页面跳转到mapping.findForward("home")
71*这个需要在struts-config.xml中定义
72*详细信息见后面的struts-config.xml文件说明
73*/

74returnmapping.findForward("home");
75
76
77}

78}


说明:
1、SignAction实现MVC中的controller,通过mapping参数来实现跳转,在controller中调用了Model中的一些操作,根据操作结果来实现跳转。
2、程序中包括了Struts的错误处理(请见本blog的《struts错误处理》)、资源文件的使用,并且好多处代码都和struts的配置文件struts-config.xml有联系
3、关键代码处都有详细的注释,若还有疑问,请您留言,我们共同探讨。
第三步:实现Model,业务逻辑。用户注册程序比较简单,主要实现findUserByUserid()、findUserByEmail()、sendPassword()、saveNewUser()等功能。代码如下:

SignForm.java

1 /**/ /**
2*@authorhan
3*soochowuniversity
4*用户注册的Model
5*/

6 public class SignModel {
7privateStringemail;
8privateStringuserid;
9privateStringMsgBox="";
10privateStringpassword;
11privatebooleansended;
12
13
14/**//**
15*@returnReturnstheemail.
16*/

17publicStringgetEmail(){
18returnemail;
19}

20/**//**
21*@paramemailTheemailtoset.
22*/

23publicvoidsetEmail(Stringemail){
24this.email=email;
25}

26/**//**
27*@returnReturnstheuserid.
28*/

29publicStringgetUserid(){
30returnuserid;
31}

32/**//**
33*@paramuseridTheuseridtoset.
34*/

35publicvoidsetUserid(Stringuserid){
36this.userid=userid;
37}

38
39//用户名和email是否存在
40publicbooleanfindUserByUserid()throwsException{
41Stringselectsql="selectuseridfrompasswordwhereuserid=?";
42Mysqlmysql=newMysql(selectsql);
43try{
44mysql.setString(1,this.userid);
45ResultSetrs=mysql.executeQuery();
46if(!rs.next())returnfalse;
47}
catch(Exceptione){
48thrownewException("user.select"+e.getMessage());
49}
finally{
50mysql.close();
51}

52returntrue;
53
54}

55publicbooleanfindUserByEmail()throwsException{
56Stringselectsql="select*frompasswordwhereemail=?";
57Mysqlmysql=newMysql(selectsql);
58try{
59mysql.setString(1,this.email);
60ResultSetrs=mysql.executeQuery();
61if(!rs.next())returnfalse;
62}
catch(Exceptione){
63thrownewException("user.select"+e.getMessage());
64}
finally{
65mysql.close();
66}

67returntrue;
68}

69
70publicvoidsaveNewUser()throwsHibernateException{
71Sessionsession=HibernateUtil.currentSession();
72
73Transactiontransaction;
74try{
75transaction=session.beginTransaction();
76SignFormnewUser=newSignForm();
77newUser.setEmail(this.email);
78newUser.setUserid(this.userid);
79
80newUser.setPassword(password);
81session.save(newUser);
82transaction.commit();
83}
catch(Exceptione){
84//thrownewException(e);
85e.printStackTrace();
86}
finally{
87HibernateUtil.closeSession();
88}

89}

90
91//发送email给用户初始密码
92publicbooleansendPassword()throwsException{
93
94SendMailsendMail=newSendMail();
95
96sendMail.setFrom(Constants.FROM);
97sendMail.setTo(this.email);
98sendMail.setSubject(Constants.SUBJECT);
99sendMail.setSmtpHost(Constants.smtpHost);
100
101//生成密码
102password=newRandStringGenerator(8).generatorString();
103MsgBox=Constants.WELCOME_MESSAGE_HEAD+"\r用户名:"+this.userid+"\r密码:"+this.password+"\r"+Constants.WELCOME_MESSAGE_FOOT;
104sendMail.setMsgText(MsgBox);
105
106
107
108try{
109sendMail.sendnow();
110sended=true;
111}
catch(Exceptione){
112System.err.println("sendmailerror:"+e.getMessage());
113//thrownewException("sendmailerror"+e.getMessage());
114sended=false;
115}

116returnsended;
117}

118}


说明:
1、saveNewUser()使用了Hibernate作为持久化工具,关于Hibernate请参阅相关资料,也可以留言我们共同讨论。
2、sendPassword()使用JavaMail发送Email,本文件通过SendMail工具类实现。
3、密码生成由RandStringGenerator()工具类生成。
4、工具类可以点击这里下载。

第四步:配置struts-config.xml。

<! DOCTYPEstruts - configPUBLIC " -//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN " " http://struts.apache.org/dtds/struts-config_1_2.dtd " >
< struts - config >
< global - forwards >全局转发
<!-- 对应SignAction.java 中的return mapping.findForward("home"); -->
< forwardname = " home " path = " /index.jsp " />
< forwardname = " userhome " path = " /user/userhome.jsp " />
</ global - forwards >

< form - beans >
<!--bean的声明,这个在下面的Action设置中要用到 -->
< form - beanname = " signForm " type = " user.SignForm " />
</ form - beans >

<!-- 设置Aciton -->
< action - mappings >
< actionpath = " /sign " 对应<form action>中action的值,在signin.jsp中的action=/login.do
name
= " signForm "设置的formBean,名称对应<from-bean>中的声明,在SignAction.java中对应输入参数ActionForm
type = " user.SignAction " Action的类
validate
= " true " 是否验证
scope
= " request " 作用域这些应该不用解释了
input
= " /user/signin.jsp " > 当发生错误时定向的页面,对应SignAction.java中的mapping.getInputForward()

</ action >
</ action - mappings >

<!-- ========== 资源文件定义,详细信息在《Struts中资源文件使用》中说明 =========== -->

< message - resourcesparameter = " Application " />

</ struts - config >


第五步:调试程序。经过上面的说明和代码示例是不是对Struts中的MVC架构有了比较清晰的了解,我们知道在java特别是j2ee的软件中,需要设置很多的配置文件,刚开始的时候非常烦,特别是频频出错的时候,那种感觉学java的人应该都尝过哦!但是当你彻底了解了配置文件的确切含义,并且能和代码中的内容进行联系时,就会豁然开朗了,就不会觉得象走进死胡同似的。

有了上面struts-config.xml中的说明,相信你已经和代码联系起来了,如果将这个程序调试成功,那么你就可以说我已经对struts设计MVC Web程序入门了,一旦跨进了这个门槛,你会觉得学习起来是那么的轻松,一些来得是那么自然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值