第14章struts2基础0612.docx

上传人:b****7 文档编号:8808686 上传时间:2023-02-01 格式:DOCX 页数:23 大小:413.16KB
下载 相关 举报
第14章struts2基础0612.docx_第1页
第1页 / 共23页
第14章struts2基础0612.docx_第2页
第2页 / 共23页
第14章struts2基础0612.docx_第3页
第3页 / 共23页
第14章struts2基础0612.docx_第4页
第4页 / 共23页
第14章struts2基础0612.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

第14章struts2基础0612.docx

《第14章struts2基础0612.docx》由会员分享,可在线阅读,更多相关《第14章struts2基础0612.docx(23页珍藏版)》请在冰豆网上搜索。

第14章struts2基础0612.docx

第14章struts2基础0612

【Struts介绍】

●最早作为ApacheJakarta项目的组成部分

●Jakarta:

雅加达,印度尼西亚的首都,爪哇(Java)岛上的第一大城市

●Jakarta是Apache组织下的一套Java解决方案的开源软件的名称,它包括了很多子项目

●Tomcat、Ant、Struts等現在是Apache下的开源项目,也曾是Jakarta的关联项目

●Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架

●当建立一个物理建筑时,建筑工程师使用支柱为建筑的每一层提供支持。

同样,软件工程师使用Struts为业务应用的每一层提供支持

●它的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间

●ApacheStruts是为创建JavaWeb应用程序而提供的一个开源的框架。

 

14.1.1MVC原理

●视图View:

视图是用户看到并与之交互的界面。

●模型Model:

模型表示企业数据和业务规则。

在MVC的三个部件中,模型拥有最多的处理任务。

●控制器Controller:

控制器接受用户的输入并调用模型和视图去完成用户的需求。

●MVC的处理过程:

首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

(1)早期Java开发Web应用

 

(2)Model1—JSP充当了V和C

(3)Model2

模型M——JavaBean

视图V——JSP页面

控制器C——Servlet

●视图层采用JSP实现

●控制层采用Servlet实现,整个框架采用同一个Servlet,以实现请求的中转

●模型层采用Java实现,主要决定用来做什么

●整个Web框架大致的流程是:

首先客户端发送请求,提交JSP页面给Servlet,Servlet根据客户的请求,选择相应的模型层,进行相应的逻辑处理;如果需要使用数据库,则通过DAO进行相应的数据库操作

 

(4)Struts1的组件结构图

(5)Struts2的架构/MVC

 

Struts2相关介绍

Struts2官网:

http:

//struts.apache.org/

Struts2使用:

 

 

Struts2是Struts的下一代产品,是在struts和WebWork的技术基础上进行了合并的全新的Struts2框架。

其全新的Struts2的体系结构与Struts1的体系结构的差别巨大。

Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。

虽然从Struts1到Struts2有着太大的变化,但是相对于WebWork,Struts2只有很小的变化。

Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。

Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与ServletAPI分离。

 

【14.2.2第一个Struts2程序】

1.搭建Struts2环境的步骤:

(1)找到开发Struts2应用需要的jar文件

(2)编写Struts2的配置文件

(3)修改web.xml,加入Struts2MVC框架启动配置

2.下载struts-2.3.28-all.zip,下载地址:

http:

//struts.apache.org/

下载后解压

3.开发Struts2最少需要的jar

【例1】

开发一个Struts2应用

1.在MyEclipse下新建一个webproject

2.将上述jar文件考到lib目录下

3.从例子中找一个struts.xml,考到src下

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd">

/WEB-INF/page/hello.jsp

4.修改web.xml

xmlversion="1.0"encoding="UTF-8"?

>

xmlns="

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

index.jsp

注意:

(1)Struts框架是通过Filter启动的。

(2)

struts2

org.apache.struts2.dispatcher.FilterDispatcher

自struts-2.1.3之后已经过时

5.编写Action,观察Action的特点。

packagemy.example;

publicclassHelloWorldAction{

privateStringmessage;

publicStringgetMessage(){

returnmessage;

}

publicStringexecute(){

message="myfirstpage";

return"success";

}

}

6.在WEB-INF下新建page文件夹,然后新建hello.jsp文件

内容如下:

${message}

运行时在地址栏输入

http:

//localhost:

8080/工程名/test/helloworld

观察运行结果

 

Package介绍:

在struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action.在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。

配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,如果其他包要继承该包,必须通过该属性进行引用。

包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下Action路径的一部分。

Namespace属性可以不配置,如果不指定该属性,默认的命名空间为“”

通常每个包都应该继承struts-default包,因为struts2很多核心的功能都是拦截器来实现。

当包继承了struts-default才能使用struts2提供的核心功能。

Struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义。

【例2】——请求参数的注入

1.web.xml不变

2.修改Action

packagemy.example;

 

publicclassUserAction{

 

privateStringusername;

privateStringpassword;

 

publicStringgetUsername(){

returnusername;

}

 

publicvoidsetUsername(Stringusername){

this.username=username;

}

 

publicStringgetPassword(){

returnpassword;

}

 

publicvoidsetPassword(Stringpassword){

this.password=password;

}

 

publicStringexecute()throwsException{

//只有用户名为xxx,密码为123456方可成功登陆

if(username.equals("xxx")&&password.equals("123456")){

return"success";

}else{

return"error";

}

}

}

3.配置struts.xml

Struts2框架的核心配置文件就是struts.xml,该文件主要负责Struts2应用中各Action的具体实现逻辑。

struts.xml会根据不同请求找到具体的Action,然后根据Action返回的逻辑视图名找到具体的物理视图。

/jsp/success.jsp

/jsp/error.jsp

解释:

(1)该文件发布的时候必须放置在WEB-INF/classes路径下,当程序运行的时候会自动在该目录下搜索struts.xml。

(2)在action标签中定义了name和class。

name属性对应的是用户URL请求中的action名,比如在本应用中,用户请求为http:

//localhost:

8080/Struts2/loginUser.action,那么name属性就应该为loginUser。

class属性是处理请求的实现类(注意:

要包含完整路径),本应用的实现类是my.example.UserAction。

(3)result标签定义逻辑视图和物理视图之间的映射,在我们的Action中,如果返回的字符串是"success”则由对应的success.jsp页面进行处理;如果返回的字符串是"error”则由error.jsp页面进行处理。

4.编写视图

【编写login.jsp】

<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>

<%@taglibprefix="s"uri="/struts-tags"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'login.jsp'startingpage

formaction="loginUser">

textfieldname="username"label="用户名">

textfield>

passwordname="password"label="密码">

password>

submitvalue="确定"/>

resetvalue="重置"/>

form>

【编写success.jsp】

<%@pagelanguage="java"import="java.util.*"pageEncoding="Gb2312"%>

<%@taglibprefix="s"uri="/struts-tags"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'success.jsp'startingpage

登陆成功!

您的用户名是

propertyvalue="username">

property>

说明:

property>访问action中的属性

 

【编写error.jsp】

<%@pagelanguage="java"import="java.util.*"pageEncoding="ISO-8859-1"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'error.jsp'startingpage

error!

!

!


在地址栏输入:

http:

//localhost:

8080/struts2_example2/jsp/login.jsp

验证结果。

注意:

Action类中get和set方法都要生成。

分析这个例子:

在地址栏里输入

http:

//localhost:

8080/ch2_example1/jsp/login.jsp

填写了用户名和密码之后,地址栏变为

http:

//localhost:

8080/ch2_example1/jsp/loginUser.action

过滤器对URL进行解析以便将请求进行正确的映射,

http是网络传输协议的名称,

localhost为主机名称,

8080为web应用端口,

ch2_example1为工程名,

jsp为目录名,

/loginUser.action为要映射模型组件的URL,除去扩展名action,则剩余的URL地址为/loginUser,

分别对应模型组件的package对应的命名空间“/”和模型组件的名称loginUser。

接下来过滤器StrutsPrepareAndExecuteFilter将在Struts2的配置文件struts.xml中查找命名空间为“/”的package,然后在此包中寻找名为loginUser的Action模型组件,最后将请求转到Action对应的实现类my.example.UserAction

现在接力棒传给模型组件UserAction,负责处理客户请求的是它的execute()方法。

execute()方法最终会返回一个代表处理结果的字符串,然后Struts2框架将根据字符串在配置文件struts.xml中此模型组件包含的result选项中寻找匹配的选项,并将此选项对应的视图组件返回到客户端。

【14.3.1认识Action对象】

在Struts2框架中,Action组件不需要继承任何类,实现任何接口,它可以只是一个简单的Java对象,只需要提供一个没有参数的且返回字符串信息的公共方法,作为默认的对请求信息进行处理并返回结果视图的接口。

框架还提供了一个Action组件的基类ActionSupport,它在实现了Action接口的同时实现了execute()方法。

ActionSupport的定义:

http:

//struts.apache.org/2.0.6/struts2-core/apidocs/com/opensymphony/xwork2/ActionSupport.html

该类的作用:

Providesadefaultimplementationforthemostcommonactions.Seethedocumentationforalltheinterfacesthisclassimplementsformoredetailedinformation.

publicclassActionSupport

extendsObject

implementsAction,Validateable,ValidationAware,TextProvider,LocaleProvider,Serializable

 

【修改例2】

1.login.jsp:

内容不变

页面展示形式为:

<%@pagelanguage="java"import="java.util.*"pageEncoding="GB2312"%>

<%@taglibprefix="s"uri="/struts-tags"%>

MyJSP'login.jsp'startingpage

formaction="loginUser">

textfieldname="username"label="用户名">

textfield>

passwordname="password"label="密码">

password>

submitvalue="确定"/>

form>

2.修改UserAction:

packagemy.example;

importcom.opensymphony.xwork2.*;

publicclassUserActionextendsActionSupport{

privateStringusername;

privateStringpassword;

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicStringexecute(){

if(!

username.equals(password))

returnINPUT;

elsereturnSUCCESS;

}

}

该execute()方法的作用:

如果用户名和密码一致,则返回一个表示登录成功的SUCCESS,否则返回结果字符串INPUT。

另外,Action组件还提供了两个字符串属性username和password以及对应的getter/setter方法,这两个属性提供给Struts2框架用来装载用户提交的参数。

Web请求中的参数信息将由框架自动填充到这两个属性变量中。

Execute()方法中也引用此信息进行业务处理。

3.结果界面success.jsp不变:

<%@pagelanguage="java"import="java.util.*"pageEncoding="Gb2312"%>

<%@taglibprefix="s"uri="/struts-tags"%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

MyJSP'success.jsp'startingpage

登陆成功!

您的用户名是

propertyvalue="username">

property>

4.配置文件struts.xml:

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

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1