`
lifeiniao526
  • 浏览: 37741 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

stucts流程-4

阅读更多

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

SignAction.java

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

6publicclassSignActionextendsAction{
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*/

6publicclassSignModel{
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程序入门了,一旦跨进了这个门槛,你会觉得学习起来是那么的轻松,一些来得是那么自然。

分享到:
评论

相关推荐

    Stucts资料-----------------------哈哈哈哈哈

    总的来说,这份压缩包可能是一个宝贵的资源,即便资料年代稍久,但对于初学者来说,理解Struts的基础概念、实践开发流程以及MVC架构仍然是非常有价值的。通过这些资料,你可以逐步掌握Struts的使用,并为深入学习...

    J2EE-Spring-Stucts-Hibernate架构-经典-435页.pdf

    4. 精通Struts框架:Struts是Java Web开发中的MVC框架,它简化了Web应用的开发流程,使得业务逻辑和表现层分离,增强了代码的组织性和可维护性。 5. 熟练使用Hibernate ORM工具:Hibernate作为一种流行的Java对象...

    基于Stucts2+Hibernate的学生信息管理系统

    在这个学生信息管理系统中,Struts2主要负责接收用户请求,控制应用程序流程,并将处理结果返回给用户。 **Hibernate框架** Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,...

    基于stucts+SQLServer的机票预定系统

    此外,订单管理是系统的核心部分,包括订单创建、查询、支付处理和状态跟踪,确保了从购票到出票的完整流程。 在实际运行过程中,系统还需要考虑并发控制、事务管理以及错误处理等问题,以应对多用户同时操作的场景...

    stucts2描述

    4. **拦截器组件**:拦截器组件是Struts2中一个非常重要的概念,用于拦截Action中的业务方法。它通常被用来封装那些具有较强通用性的功能,如事务管理、日志记录、权限控制等。拦截器可以显著提升代码的复用率,降低...

    cas client增加stucts框架 服务端返回用户其它信息

    这种方式简化了用户登录流程,同时增强了安全性。 接下来,我们关注Structs框架。Structs是一个轻量级的MVC(Model-View-Controller)Web开发框架,它简化了Java Web应用的构建。集成Structs到CAS客户端意味着我们...

    论坛管理系统java+STUCTs 用上UML建模

    在论坛管理系统项目中,UML可能包括用例图(描述用户与系统交互)、类图(表示系统中的类及其关系)、序列图(展示对象间的交互顺序)、状态图(描述对象生命周期中的状态变化)等,帮助设计者理解系统结构和流程。...

    Struts实现MVC机制的Web应用.pdf

    - **控制器(Controller)**:作为模型和视图之间的桥梁,处理用户的输入,并控制应用程序的流程。它接收来自用户的请求,调用模型进行必要的数据操作,然后确定调用哪个视图来渲染响应。 **1.2 JSP设计模式** Sun...

    web开发实例(DWR+Struts2)

    4. **Action层**:实现Struts2的Action,接收前端请求,调用Service层的方法,处理业务逻辑后返回结果。 5. **DWR配置**:在DWR配置文件中声明需要暴露给前端的服务器端方法,使得前端可以通过JavaScript直接调用。 ...

    struts2jar包和源码

    总的来说,Struts2-2.5.16的jar包和源码提供了一个全面的学习资源,涵盖了MVC设计模式、请求处理流程、拦截器机制、结果类型和配置等多个方面。通过深入研究,开发者不仅能掌握Struts2框架的使用,还能提高对Java ...

    Struts2+Hibernate实现的一个留言程序

    这个示例程序虽然没有关注界面设计,但对于初学者来说,理解其背后的业务流程和框架集成机制是非常有价值的。 通过分析和学习这个留言程序,你可以了解如何在Struts2中配置Action,如何编写Service和DAO以利用...

    struts2 简单登录实例

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,为开发者提供了构建可维护、可扩展的Web应用程序的...通过这个例子,你可以了解Struts2的基本工作流程,为后续的Web开发打下基础。

    JavaEE商店系统

    4. 订单模块:处理订单的创建、支付、状态跟踪等流程。 5. 支付模块:与第三方支付平台接口对接,实现在线支付。 6. 客服模块:提供咨询、投诉、售后服务等。 7. 管理员模块:后台管理系统,包括商品管理、订单管理...

    基于ejb的网上商城系统

    4. 购物车:购物车功能可能通过Session Bean实现,保存用户选择的商品,同时处理添加、删除、修改商品数量的操作。 5. 安全支付:与第三方支付平台集成,如支付宝、微信支付等,这需要处理支付请求和响应,确保交易...

Global site tag (gtag.js) - Google Analytics