kettas笔记struts.docx

上传人:b****7 文档编号:11328865 上传时间:2023-02-27 格式:DOCX 页数:21 大小:24.37KB
下载 相关 举报
kettas笔记struts.docx_第1页
第1页 / 共21页
kettas笔记struts.docx_第2页
第2页 / 共21页
kettas笔记struts.docx_第3页
第3页 / 共21页
kettas笔记struts.docx_第4页
第4页 / 共21页
kettas笔记struts.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

kettas笔记struts.docx

《kettas笔记struts.docx》由会员分享,可在线阅读,更多相关《kettas笔记struts.docx(21页珍藏版)》请在冰豆网上搜索。

kettas笔记struts.docx

kettas笔记struts

第一天

SSH

|-Struts->MVC

|-Hibernate->DataAccess

|-Spring->容器.

框架:

framework是应用的半成品。

应用(应用特有,通用代码)

这些通用代码的实现称作框架提高程序开发的速度,增强程序的稳定性.

STRUTS:

用于实现MVC设计模式.

MVC:

把应用程序在逻辑上划分成三个层次,

1)M:

model用于实现业务逻辑的代码

(biz,dao,entity)

2)V:

view视图层,model与用户之间的桥梁,

用户通过视图层发送指令,查看结果

(JSP,html)

3)C:

控制层,实现程序的流程控制.

1,接受用户请求.

2,根据请求的不同,调用Model中的javabean处理请求.

3,根据处理结果,转向不同的View

MVC设计模式的变化构成:

1)一个Servlet,完成所有操作

QueryServlet{

//1,JDBC查询.

//2,out.println("");

}

2)QueryServlet(查询,业务代码)

DispServlet(显示)

QS--forward-->DS

*业务,显示分离,

显示逻辑灵活

业务逻辑,可重用(M,V)

3)Servlet(业务)+JSP(显示)

业务代码写在service(req,res)

M重用不理想,划分不彻底.

4)Servlet(jsp)+JavaBean(M)+JSP(V)

JavaBean对运行环境没有依赖。

具有良好的可重用性.

实现了M,V的彻底分离.

体现出了控制层的作用.

1,接受用户请求

2,调用javabean处理用户请求

3,根据处理结果,返回不同页面(view)

QueryServlet{

service(....){

BankBizbiz=newxx();

try{

Accounta=biz.query(.);

req.setAttribute("a",a);

forward("ok.jsp");

}catch(Excepitone){

forward("error.jsp");

}

}

}

*每个Servlet接受一种请求,控制层Servlet过多.

5)将控制层工作,集中在一个Servlet身上.

a,Servlet接收所有请求(url-pattern->*)

b,根据请求的不同调用不同的javabean

1.1如何区分请求之间的区别:

请求->url->ServletPath不同.request.getServletPath()

1.2如何对应请求和javabean之间的关系.

提供一个配置文件.

/login.do-->com.kettas.LoginAction

/query.do-->com.kettas.QueryAction

1.3Servlet如何调用JavaBean的方法

第一个接口,所有Javabean都按照接口的规则进行开发。

Servlet也按照接口的要求进行调用.

Servlet+JavaBean+JSP

controllerMV

ShoppingCart

PAM

Servlet-->config

cart:

/buy.do-->BuyAction

/order.do->OrderAction

PAM:

/query.do->QueryAction

/deposit.do->DepositAction

=>Struts

|->ActionServlet:

控制器

|->struts-config.xml:

配置文件,指定请求与javaBean的对应关系.

|->Action:

类,所有JavaBean要继承这个类,覆盖其中的execute,

这样可以保证所有的子类都有统一的使用方式.

|->ActionForm:

用于保存客户端提交的数据.

1,搭建struts的开发环境

1.1struts.apache.org下载struts开发包

|->1.2.x

|->2.x

struts_root/

|-lib/

||-*.jarstruts提供的类

|struts.jar:

编译时依赖,我们的源代码中会直接使用这个jar包中的类,要配置到classpath中.

|*.jar:

运行时依赖,程序在运行时会用到他们.要保存在/WEB-INF/lib中.

|-webapps/

|-struts-blank:

struts的空白应用,我们可以从中拷贝配置文件的模板

1.2从struts-blank/WEB-INF拷贝struts-config.xml到自己的WEB-INF中

1.3在web.xml中对struts提供的Servlet进行配置.

servlet

|->三个初始化参数

|->config:

指定配置文件的位置及名称.

|->debug,detail:

与控制台输出相关的.

|->load-on-startup:

使Servlet由懒汉式加载变为饿汉式加载.数字代表加载的优先级,越小越靠前.

2,利用struts开发web应用

jakarta-struts-1.2.4.zip

Struts开发基本流程:

1)编写jsp,提供表单或超链接

2)编写处理请求的javabean(Action)

3)编辑Struts-config.xml,指定请求和Action的对应关系.

4)编写返回页面.显示处理结果.

理解ActionMapping:

任何xml,都可以用一个javabean表示出来.

zhangsan

20

wudaokou

10000

xiaoyuehe

10001

Student

|->Stringname

|->intage

|->Collection

ActionMapping

|->Stringpath

|->Stringtype

|->List

|->name,path

第二天

1)struts中的资源文件

xxx.propreties

a=密码

用来配置struts页面上的静态内容

1.1资源文件的基本使用步骤.

1,编写资源文件

a,因该何类文件存放在一起,保存在classes目录下的某个包中.

b,资源文件的格式:

.propertieskey=valuekey会最为jsp使用静态文字的依据.

a=Userlogin

b=Password

2,在struts-config.xml中配置资源文件的路径及名称.

*目录及文件名按照类的形式进行配置....

3,在jsp中使用资源文件的内容。

<%@tagliburi="http:

//struts.apache.org/tags-bean"prefix="bean"/>

messagekey="a"/>

messagekey="b"/>

messagekey="c"/>

1.2利用资源文件实现国际化.

每个用户的浏览器都有一种指定语言.

浏览器发送请求时,会把选择语言作为请求头的一部分,发送给服务器.

服务器可以获得这个请求头,根据他的值选择不同的资源文件.

以上功能由struts实现,

程序员的任务是提供多种资源文件供struts使用.

1)默认资源文件.

在struts-config.xml中配置的那份资源文件.

如果没有专用资源文件,则向用户显示默认资源文件的内容.

2)专用资源文件

专门针对某个国家编写的资源文件.

2.1专用资源文件不需要配置.

2.2必须和默认资源文件放在一个目录中.

2.3文件命名有要求默认资源文件名_国家缩写.properties

AppResource.properties

AppResource_zh.properties中国

AppResource_en.properties

AppResource_fr.properties法国

AppResource_jp.properties日本

2.4所有资源文件,都要采用Unicode编码进行编写.如:

"中"=>\u2020\u1212

使用jdk提供的工具将中文文件转化为unicode文件.

native2ascii

native2ascii-encodingGBKtemp_zh.propertiesnewname

-encoding:

指明原文件的编码方式,原文件编码由编辑器决定.

2)ActionForm对象的使用

ActionServlet

struts-config.xml

Action

ActionForm

用于封装客户端提交的参数.

client(form)-->ActionServlet

-->Action(execute)

|->request.getParameter("name")

1)数据类型是单一的.

2)取出来的数据较多,而且零散.程序员希望数据能封装在对象中.

ActionForm:

1)程序员把用于封装数据的对象(javabean)写好.

2)struts接受到请求之后,会将请求中的参数封装到程序员指定的对象中

并把这个对象传递给execute方法.

3)在execute方法中就可以通过参数实用对象中的数据了.

execute(ActionMappingm,ActionFormform,request,response);

第三天

ActionForm数据校验

client(form)--------->Tomcat

客户端校验(JavaScript)

xxxxxx

functionfn(){

varn=document.getElementById("username").value;

if(xxxx){returnfalse;}}

服务器端校验

Stringname=request.getParameter("");

if(name!

=null&&name.length.....){}

在struts环境下对客户端参数的校验就是对ActionForm对象的校验.因为客户端参数都保存在ActionForm对象中.

client--->ActionServlet--->2ActioForm--->3Action(execute)

1)程序员负责在ActionForm中按照自己的业务需要编写验证函数,对ActionForm的各个成员变量进行检查,返回成功或失败

2)Struts接受用户请求,会将客户端参数填写到ActionForm对象中,之后调用程序员编写的验证函数,并根据返回结果决定下一步操作

成功-执行业务逻辑(execute方法)

失败-返回错误页面

具体步骤:

1)在struts-config.xml中对需要验证的请求做特殊的配置,不是所有的请求都需要数据验证。

//当validate为true时,向struts说明该请求中的参数需要验证,struts会调用ActionForm中的验证函数.,

//input:

指定错误页面,当验证出错时,struts会把请求转向这个页面.通常会指向输入页面.

2)在ActionForm中编写验证函数

3)在错误页面上显示错误信息。

errors/>

message/>

ActionErrors错误集合

ActionMessage:

错误信息

错误提示信息必须要来自资源文件,构造函数的参数是资源文件中的key

附加:

在ActionForm中对日期格式进行验证.(yyyy-MM-dd)既能够将字符串类型的生日保存在ActionForm中又能够将java.util.Date类型的生日从ActionForm中取出来.

ActionForm对象的生命周期:

Struts会将ActionForm对象根据用户需要自动存储在request或session中,默认保存在session中。

但是可以通过scope=”request”来修改。

命名属性的名字就是配置文件中FormBean中声明的name。

如:

放在Session中:

优点:

减少创建ActionForm对象的次数。

缺点:

占用资源。

会产生垃圾数据。

通过覆盖ActionForm中的reset方法,这个方法会在每次使用ActionForm之前自动调用

表单验证步骤

1)编写好.jsp页面(表单,参数)

2)写个实体类,继承ActionForm,,写好get/set方法。

重写publicvoidreset(ActionMappingarg0,HttpServletRequestarg1)和publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest)方法。

在validate中,对表单元素进行验证判断。

3)编写structs-config.xml文件。

4)写配置文件,配置文件中写错误信息。

Struct编程步骤

1)写jsp(表单,参数)

2)根据表单内容编写ActionForm(validate,reset)

3)编写处理请求的Action(execute),在Action中,可以获得处理表单的数据

4)编辑struts-config.xml,配置请求,ActionForm,Action之间的对应关系.

5)编写返回页面

在传统模型中,一个请求对应一个Action对象

/login.do--LoginAction,/reg.do--regAction会造成Action数目较多的问题

希望将相关的请求合并在一个Action对象中进行处理

1)在Action对象中,不再编写execute方法,而是为每个请求单独编写一个方法。

不再继承Action,而是MappingDispatchAction。

2)在配置文件中通过parameter属性指明,与请求对应的方法名称。

具体步骤:

1)extendsMappingDisPatchAction

2)不写execute方法,为每个请求单独编写一个方法,这些方法的返回值和参数和exectue一致

3)在配置文件中用parameter特殊说明方法名称。

/login.do--->ActionServlet--->UserMgmAction(execute[父类])根据parameter调用相应方法

LookupDispatchAction:

一个表单上有多个提交按钮的时候用

/math.do---->Action(execute)

http:

//localhost:

8080/mvc/math.do?

a=10&b=1&btn=add

http:

//localhost:

8080/mvc/math.do?

a=10&b=1&btn=subtract

1)在Action中为每个提交按钮编写一个对应的方法,不写execute,不能继承Action

2)在Action中写一个函数(getKeyMethodMap),通过这个函数体现按钮的值与方法名的对应关系。

如:

adddoAdd(),subtractdoSubtract()

3)在配置文件中,制定按钮的名字,这是struts获得按钮值的依据。

/math.doAsMathAction(execute)

a)从配置文件中获得按钮的名字(name)

b)Request.getParameter(name),获得按钮的值

c)通过调用getKeyMethodMap()函数在map中根据按钮的值找到对应的方法名获得与按钮对应的方法名字

d)调用对应的方法

写Action具体步骤

1)extendsLookupDispatchAction

2)针对每个按钮写一个方法

3)写getKeyMethodMap(),指定按钮值和方法的对应关系,其中按钮的值来自资源文件,不能直接写在map中

4)配置parameter=”按钮的名字”,在JSP中,同一个表单的按钮都叫一个名字

第四天动态ActionForm---DynaActionForm

MappingDispatchAction

1)extendsMappingDispatchAction

2)为每个请求编写一个方法.(返回类型,参数列表与execute一致)

3)

path:

客户端请求的servletpath

type:

处理请求的Action的类型

name:

指定ActionForm的名字,ActionForm的名字是通过form-bean定义的

validate:

Form是否需要验证

input:

验证出错之后的返回页面

scope:

ActionForm的作用域,默认为session,命名属性的名字就是ActionForm定义的名字

parameter:

|->MappingDispatchAction:

方法的名字.

|->LookupDispatchAction:

按钮的名字.

DynaActionForm动态ActionForm

login.jsp---->LoginForm(org.apache.struts.action.DynaActionForm)

--属性名字一定和客户端参数一一对应-->

execute(mapping,form,request,response){

DynaActionFormlf=(DynaActionForm)form;

lf.get("userName");

lf.get("password");

}

步骤:

1)在struts-config.xml中配置DynaActionForm

2)在标签中象实用普通ActionForm一样使用DynaActionForm

3)在execute方法中,从DynaActionForm中获得数据.

DynaActionFormdaf=(DynaActionForm)form;

daf.get("userName");

daf.get("password");

Controller:

ActionServlet:

前端控制器,接受客户请求.

Action:

后端控制器,返回应答.

struts的缺陷:

对业务代码的侵入性较强.提高了耦合

解决:

将业务逻辑封装在javabean中,Action去调用javabean。

第五天

使用struts的编程步骤

1)编写jsp()一般客户端是以.do结尾,如果要在服务器上运行则不用.do,如果要发送到客户端上运行的话就要加.do

2)编写ActionForm,封装客户端的参数

A)根据参数个数来决定是否需要使用ActionForm

B)extendsActionForm,配置DynaActionForm

C)extendsActionForm

a)变量名和客户端参数名称一一对应

b)validate,reset

3)编写Action对请求进行处理

A)Action,MappingDispatchAction,LookupDispatchAction

B)extendsAction

C)或extendsMappingDispatchAction为每个请求单独编写一个方法

D)extendsLookupDispatchAction为每个按钮编写一个方法。

getKeyMethod

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

当前位置:首页 > 自然科学 > 数学

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

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