第一个Struts应用helloapp应用.docx

上传人:b****6 文档编号:16379137 上传时间:2023-07-13 格式:DOCX 页数:34 大小:198.35KB
下载 相关 举报
第一个Struts应用helloapp应用.docx_第1页
第1页 / 共34页
第一个Struts应用helloapp应用.docx_第2页
第2页 / 共34页
第一个Struts应用helloapp应用.docx_第3页
第3页 / 共34页
第一个Struts应用helloapp应用.docx_第4页
第4页 / 共34页
第一个Struts应用helloapp应用.docx_第5页
第5页 / 共34页
第一个Struts应用helloapp应用.docx_第6页
第6页 / 共34页
第一个Struts应用helloapp应用.docx_第7页
第7页 / 共34页
第一个Struts应用helloapp应用.docx_第8页
第8页 / 共34页
第一个Struts应用helloapp应用.docx_第9页
第9页 / 共34页
第一个Struts应用helloapp应用.docx_第10页
第10页 / 共34页
第一个Struts应用helloapp应用.docx_第11页
第11页 / 共34页
第一个Struts应用helloapp应用.docx_第12页
第12页 / 共34页
第一个Struts应用helloapp应用.docx_第13页
第13页 / 共34页
第一个Struts应用helloapp应用.docx_第14页
第14页 / 共34页
第一个Struts应用helloapp应用.docx_第15页
第15页 / 共34页
第一个Struts应用helloapp应用.docx_第16页
第16页 / 共34页
第一个Struts应用helloapp应用.docx_第17页
第17页 / 共34页
第一个Struts应用helloapp应用.docx_第18页
第18页 / 共34页
第一个Struts应用helloapp应用.docx_第19页
第19页 / 共34页
第一个Struts应用helloapp应用.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第一个Struts应用helloapp应用.docx

《第一个Struts应用helloapp应用.docx》由会员分享,可在线阅读,更多相关《第一个Struts应用helloapp应用.docx(34页珍藏版)》请在冰点文库上搜索。

第一个Struts应用helloapp应用.docx

第一个Struts应用helloapp应用

第2章第一个Struts应用helloapp应用2

2.1分析helloapp应用的需求2

2.2运用Struts框架2

2.3创建视图组件3

2.3.1创建JSP文件3

2.3.2创建消息资源文件5

2.3.3创建ActionFormBean6

2.3.4数据验证7

2.4创建控制器组件8

2.4.1Action类的工作机制9

2.4.2访问封装在MessageResources中的本地化文本10

2.4.3业务逻辑验证10

2.4.4访问模型组件10

2.4.5向视图组件传递数据11

2.4.6把HTTP请求转发给合适的视图组件11

2.5创建模型组件11

2.6创建存放常量的Java文件12

2.7创建配置文件13

2.7.1创建Web应用的配置文件13

2.7.2创建Struts框架的配置文件

14

2.8发布和运行helloapp应用

16

2.8.1服务器端装载hello.jsp的流程17

2.8.2表单验证的流程17

2.8.3逻辑验证失败的流程19

2.8.4逻辑验证成功的流程20

2.9小节21

第2章第一个Struts应用helloapp应用

本章讲解了一个简单的Struts应用例子helloapp应用,这个例子可以帮助读者迅速入门,获得开发Struts应用的基本经验。

该应用的功能非常简单,接受用户输入的姓名,然后输出“Hello”。

开发helloapp应用涉及以下内容:

●分析应用需求

●把基于MVC设计模式的Struts框架运用到应用中

●创建视图组件,包括HTML表单(hello.jsp)和ActionFormBean(HelloForm.java)

●创建application.properties资源文件

●数据验证,包括表单验证和业务逻辑验证

●创建控制器组件:

HelloAction.java

●创建模型组件:

PersonBean.java

●创建包含被各个模块共享的常量数据的Java文件:

Constants.java

●创建配置文件:

web.xml和struts-config.xml

●编译、发布和运行helloapp应用

2.1分析helloapp应用的需求

在开发应用时,首先从分析需求入手,列举该应用的各种功能,以及限制条件。

helloapp应用的需求非常简单,包括如下需求:

●接受用户输入的姓名,然后返回字符串“Hello!

●如果用户没有输入姓名就提交表单,将返回出错信息,提示用户首先输入姓名。

●如果用户输入姓名为“Monster”,将返回出错信息,拒绝向“Monster”打招呼。

●为了演示模型组件的功能,本应用使用模型组件来保存用户输入的姓名。

2.2运用Struts框架

下面把Struts框架运用到helloapp应用中。

Struts框架可以方便迅速的把一个复杂的应用划分成模型、视图和控制器组件,而Struts的配置文件struts-config.xml则可以灵活的组装这些组件,简化开发过程。

以下是helloapp应用的各个模块的构成:

●模型包括一个JavaBean组件PersonBean,它有一个userName属性,代表用户输入的名字。

它提供了get/set方法,分别用于读取和设置userName属性,它还提供一个save()方法,负责把userName属性保存到持久化存储系统中,如数据库或文件系统。

对于更为复杂的Web应用,JavaBean组件可以作为EJB或Web服务的前端组件。

●视图包括一个JSP文件hello.jsp,它提供用户界面,接受用户输入的姓名。

视图还包括一个ActionFormBean,它用来存放表单数据,并进行表单验证,如果用户没有输入姓名就提交表单,将返回出错信息。

●控制器包括一个Action类HelloAction,它完成三项任务:

1.进行业务逻辑验证,如果用户输入的姓名为“Monster”,将返回错误消息;2.调用模型组件PersonBean的save()方法,保存用户输入的名字;3.决定将合适的视图组件返回给用户。

除了创建模型、视图和控制器组件,还需要创建Struts的配置文件struts-config.xml,它可以把这些组件组装起来,使它们协调工作。

此外,还需要创建整个Web应用的配置文件web.xml。

2.3创建视图组件

本例中,视图包括两个组件:

●一个JSP文件:

hello.jsp

●一个ActionFormBean:

HelloFormBean

下面分别讲述如何创建这两个组件。

2.3.1创建JSP文件

hello.jsp提供用户界面,能够接受用户输入的姓名。

此外,本Web应用的所有输出结果也都由hello.jsp显示给用户。

图2-1显示了hello.jsp提供的网页。

图2-1hello.jsp的网页

在图2-1中,用户输入姓名“Weiqin”后,按提交表单,本应用将返回“HelloWeiqin!

”,参见图2-2。

图2-2hello.jsp接受用户输入后正常返回的网页

例程2-1为hello.jsp文件的源代码。

例程2-1hello.jsp

<%@pagecontentType="text/html;charset=UTF-8"language="java"%>

<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>

<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>

<%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%>

htmllocale="true">

<bean:</p><p>messagekey="hello.jsp.title"/>

base/>

messagekey="hello.jsp.page.heading"/>

errors/>

presentname="personbean"scope="request">

messagekey="hello.jsp.page.hello"/>

writename="personbean"property="userName"/>!

present>

formaction="/HelloWorld.do"focus="userName">

messagekey="hello.jsp.prompt.person"/>

textproperty="userName"size="16"maxlength="16"/>

submitproperty="submit"value="Submit"/>

reset/>

form>

imgpage="/struts-power.gif"alt="PoweredbyStruts"/>

html>

以上基于Struts框架的JSP文件有以下特点:

●没有任何Java程序代码

●使用了许多Struts的客户化标签,例如

form>和

present>标签

●没有直接提供文本内容,取而代之的是

message>标签,输出到网页上的文本内容都是由

message>标签来生成的。

例如:

messagekey="hello.jsp.prompt.person"/>

Struts客户化标签是联系视图组件和Struts框架中其它组件的纽带。

这些标签可以访问或显示来自于控制器和模型组件的数据。

在本书第12章至16章讲专门介绍Struts标签的用法,本节先简单介绍几种重要的Struts标签。

hello.jsp开头几行用于声明和加载Struts标签库:

<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>

<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>

<%@tagliburi="/WEB-INF/struts-logic.tld"prefix="logic"%>

以上代码表明该JSP文件使用了StrutsBean、Html和Logic标签库,这是加载客户化标签库的标准JSP语法。

hello.jsp中使用了来自StrutsHTML标签库中的标签,包括

errors>,

form>和

text>:

errors>:

用于显示Struts框架中其他组件产生的错误消息。

form>:

用于创建HTML表单,它能够把HTML表单的字段和ActionFormBean的属性关联起来。

text>:

该标签是

form>的子标签,用于创建HTML表单的文本框。

它和ActionFormBean的属性相关联。

hello.jsp中使用了来自StrutsBean标签库的两个标签

message>和

write>:

message>:

用于输出本地化的文本内容,它的key属性指定消息key,和消息key匹配的文本内容来自于专门的ResourceBundle,关于ResourceBundle的概念参见本书第9章(Struts应用的国际化)。

write>:

用于输出JavaBean的属性值。

本例中,它用于输出personbean对象的userName属性值:

writename="personbean"property="userName"/>

hello.jsp使用了来自StrutsLogic标签库的

present>标签。

present>标签用来判断JavaBean在特定的范围内是否存在,只有当JavaBean存在,才会执行标签主体中的内容:

presentname="personbean"scope="request">

Hello

writename="personbean"property="userName"/>!

present>

本例中,

present>标签用来判断在request范围内是否存在personbean对象,如果存在,就输出personbean的userName属性值。

present>标签相对的是

notPresent>标签,它表示只有当JavaBean在特定的范围内不存在,才会执行标签主体中的内容。

2.3.2创建消息资源文件

hello.jsp使用

message>标签来输出文本内容。

这些文本来自于ResourceBundle,每个ResourceBundle都对应一个或多个本地化的消息资源文件,本例中的资源文件为application.properties,例程2-2是该消息资源文件的内容。

例程2-2application.properties文件

#ApplicationResourcesforthe"Hello"sampleapplication

hello.jsp.title=Hello-AfirstStrutsprogram

hello.jsp.page.heading=HelloWorld!

AfirstStrutsapplication

hello.jsp.prompt.person=PleaseenteraUserNametosayhelloto:

hello.jsp.page.hello=Hello

#ValidationanderrormessagesforHelloForm.javaandHelloAction.java

hello.dont.talk.to.monster=Wedon'twanttosayhellotoMonster!

!

!

hello.no.username.error=PleaseenteraUserNametosayhelloto!

以上文件以“消息key/消息文本”的格式存放数据,文件中“#”后面为注释行。

对于以下JSP代码:

messagekey="hello.jsp.title"/>

message>标签的key属性为“hello.jsp.tilte”,在ResourceBundle中与之匹配的内容为:

hello.jsp.title=Hello-AfirstStrutsprogram

因此,以上

message>标签将把“Hello-AfirstStrutsprogram”输出到网页上。

2.3.3创建ActionFormBean

当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionFormBean中。

ActionFormBean中的属性和HTML表单中的字段一一对应。

ActionFormBean还提供数据验证方法,以及把属性重新设置为默认值的方法。

Struts框架中定义的ActionForm类是抽象的,必须在应用中创建它的子类,来存放具体的HTML表单数据。

例程2-3为HelloForm.java的源程序,它用于处理hello.jsp中的表单数据。

例程2-3HelloForm.java

packagehello;

importjavax.servlet.http.HttpServletRequest;

importorg.apache.struts.action.ActionMessage;

importorg.apache.struts.action.ActionErrors;

importorg.apache.struts.action.ActionForm;

importorg.apache.struts.action.ActionMapping;

publicfinalclassHelloFormextendsActionForm{

privateStringuserName=null;

publicStringgetUserName(){

return(this.userName);

}

publicvoidsetUserName(StringuserName){

this.userName=userName;

}

/**

*Resetallpropertiestotheirdefaultvalues.

*/

publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){

this.userName=null;

}

/**

*Validatethepropertiespostedinthisrequest.Ifvalidationerrorsare

*found,returnanActionErrorsobjectcontainingtheerrors.

*Ifnovalidationerrorsoccur,returnnulloranempty

*ActionErrorsobject.

*/

publicActionErrorsvalidate(ActionMappingmapping,

HttpServletRequestrequest){

ActionErrorserrors=newActionErrors();

if((userName==null)||(userName.length()<1))

errors.add("username",newActionMessage("hello.no.username.error"));

returnerrors;

}

}

从以上代码可以看出,ActionFormBean实质上是一种JavaBean,不过它除了具有JavaBean的常规方法,还有两个特殊方法:

●validate():

用于表单验证。

●reset():

把属性重新设置为默认值。

2.3.4数据验证

几乎所有和用户交互的应用都需要数据验证,而从头设计并开发完善的数据验证机制往往很费时。

幸运的是,Struts框架提供了现成的、易于使用的数据验证功能。

Struts框架的数据验证可分为两种类型:

表单验证和业务逻辑验证,在本例中,它们分别运用于以下场合:

●表单验证:

如果用户没有在表单中输入姓名,就提交表单,将生成表单验证错误

●业务逻辑验证:

如果用户在表单中输入的姓名为“Monster”,按照本应用的业务规则,不允许向“Monster”打招呼,因此将生成业务逻辑错误。

第一种类型的验证,即表单验证由ActionFormBean来负责处理。

在本例中,HelloForm.java的validate()方法负责完成这一任务:

publicActionErrorsvalidate(ActionMappingmapping,

HttpServletRequestrequest){

ActionErrorserrors=newActionErrors();

if((userName==null)||(userName.length()<1))

errors.add("username",newActionMessage("hello.no.username.error"));

returnerrors;

}

}

当用户提交了HTML表单,Struts框架自动把表单数据组装到ActionFormBean中。

接下来Struts框架会自动调用ActionFormBean的validate()方法进行表单验证。

如果validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。

如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到恰当的视图组件,视图组件通过

errors>标签把request范围内的ActionErrors对象中包含的错误消息显示出来,提示用户修改错误。

在Struts早期的版本中,使用ActionError类来表示错误消息,ActionError类是ActionMessage的子类。

Struts1.2将废弃ActionError,统一采用ActionMessage类来表示正常或错误消息。

第二种类型的验证,即业务逻辑验证,由Action来负责处理,参见本章2.4.3节。

2.4创建控制器组件

控制器组件包括ActionServlet类和Action类。

ActionServlet类是Struts框架自带的,它是整个Struts框架的控制枢纽,通常不需要扩展。

Struts框架提供了可供扩展的Action类,它用来处理特定的HTTP请求,例程2-4为HelloAction类的源程序。

例程2-4HelloAction.java

packagehello;

importjavax.servlet.RequestDispatcher;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpSession;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.struts.action.Action;

importorg.apache.struts.action.ActionMessage;

importorg.apache.struts.action.ActionMessages;

importorg.apache.struts.action.ActionForm;

importorg.apache.struts.action.ActionForward;

importorg.apache.struts.action.ActionMapping;

importorg.apache.struts.util.MessageResources;

publicfinalclassHelloActionextendsAction{

/**

*ProcessthespecifiedHTTPrequest,andcreatethecorrespondingHTTP

*response(orforwardtoanotherwebcomponentthatwillcreateit).

*ReturnanActionForwardinstancedescribingwhereandhow

*controlshouldbeforwarded,ornulliftheresponsehas

*alreadybeencompleted.

*/

publicActionForwardexecute(ActionMappingmapping,

ActionFormform,

HttpServletRequestrequest,

HttpServletResponseresponse)

throwsException{

//These"messages"comefromtheApplicationResources.propertiesfile

MessageResourcesmessages=getResources(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2