kettas笔记struts.docx
- 文档编号:11328865
- 上传时间:2023-02-27
- 格式:DOCX
- 页数:21
- 大小:24.37KB
kettas笔记struts.docx
《kettas笔记struts.docx》由会员分享,可在线阅读,更多相关《kettas笔记struts.docx(21页珍藏版)》请在冰豆网上搜索。
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表示出来.
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)在 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- kettas 笔记 struts