java课堂笔记总结struts1Struts是基于MVC轻量级框架主要用于处理求分发_第1页
java课堂笔记总结struts1Struts是基于MVC轻量级框架主要用于处理求分发_第2页
java课堂笔记总结struts1Struts是基于MVC轻量级框架主要用于处理求分发_第3页
java课堂笔记总结struts1Struts是基于MVC轻量级框架主要用于处理求分发_第4页
java课堂笔记总结struts1Struts是基于MVC轻量级框架主要用于处理求分发_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什么是

Struts是基于MVC的轻量级框架,主要是用于处理请求分发到问题,重心在控--基于MVC:是对MVC的一个实现,我们使用Struts自然也就是使用了MVC模式--轻量:低侵入性,即Struts对调用方要求比较低,基本上不需要importStruts包--框架:基础的代码结构,可以减少我们开发的工作量,并且带来很高的稳定为什么用对比--Servlet优缺优点:执行效率高 缺点:可性差--Struts优缺 提供API来帮助我们提高开发效率;缺点 执行效率较低Struts的优扩展性(5*):针对未来的发展而侵入性(4*):与耦合度成正比,实际上就是代码对框架的依赖程度,越低越好Struts发展--Struts1:由Apache推出,结构简单,小巧--WebWork:技术先进,是--由于Struts1JSP/Servlet耦合紧密,发展遇到瓶颈.WebWork联合,共同推出了Struts2,使用的是XWork.面试题:说明Struts1与Struts2的区别和联系Struts2Struts1差别很大,不能理解为Struts1的升级版;Struts2以XWork为,可以理解为WebWork的升级版*4.Struts2使用步骤 oWorld示画图说明Struts2与MVC的关使用步创建web项导设置前端控制--在web.xml中设置一个--<filter- </filter-map创建--该配置文件是用来设置请求URLAction的关系,以及Action与JSP的关系--该文件必须放于src--该文件名称必须为<packagename="day01" extends="struts-<actionname="class="com.tarena.action. method="<resultname="ok">/<result创建--Action中需要提供public的方--该方法需要返回f.创建JSP*g.配置*5.扩 oWorld,参数传1)Action如何接收JSP传入的参a、基本属性注是JSP通过调用Action的set方法,以基本属性给Action设置参数值b、域模型注为域模型注入对象里面的属性必须要有getset方法c、模型驱动注入(了解,不要求掌握*6.开发NETCTOSS项目中资费管理的查询功1、分1)为什么要分页a、假分页(一般都不用--优 不用每次都刷新页面,用户体验--缺 由于第一次要查询出所有的数据,效率上比较低b、真分--优每次都查询,并且查询的数据有限,因此效率上可以保证比较稳--缺 每次都需要刷新页面,用户体验差一3)分页的计算规已知当前页每页显示条目数可以计算当前页最大行数上页最大行数lastMax=(1)*pageSizeselect*fromselectc.*,rownumrfrom)wherer<5andr>22、OGNL表达我们在做资费查询功能时,页面上使用解决方案,其原理基本上是一致的。Struts2+OGNL表达式。Struts2<s:property<h1>演示Struts2+OGNL表达式<h1>*1.基本类型<h1>ID:<s:property<h1>Name:<s:property<h1>*2.实体对象<h1>用户名:<s:property<h1>:<s:property<h1>3.数组、集合<h1>数组:<s:property<h1>集合:<s:property<h1>4.<h1>Map:<s:property<h1>5.时可以进行运算<h1>ID+10:<s:property<h1>MyName:<s:propertyvalue="'Mynameis<h1>6.时能调用对象的方法<h1>NAME:<s:property<h1>7.创建集合<h1>集合:<s:property<h1>类型:<s:property<h1>8.创建<h1>Map:<s:property<h1>演示

观察ValueStack结多个debug彼此互斥,我们保持页面上只写一个即这个是给我们程序员来用的,因此调试完要将这个删<h1><%--<s:debug/>--<h1>2.直接输出栈顶<h1>栈顶<h1>*3.context对象<h1>Request:<s:property<h1>*4.循环输出集合<!

for(Useruser: tor<s:property <h1>*5.按照索引循环<!

for(int torbegin="1"end="3"<s:property DBperties文件的方法默认路径在原路径下staticPropertiesp=newuser=p.getProperty("user");}3、请求到Action类是ValueStack就会被创建出来并加载Action信息置于栈1、什么是是Struts2用于封装前后端交互数据的对象,包装了OGNL引擎及对象/context对象Struts2对OGNL进行了改--主要改造的是root对--将root对象放于栈中,时从栈顶向下,依次栈的每一root,在这个过程中,如果找到了结果,则返回,否则返回空Struts2对OGNL进行了包--使用ValueStack包装了OGNL引擎、栈(每一级都是root对象),以及context对--我们通过Struts2+OGNLAction时,实际上就是通过OGNL引擎,从栈顶取的值(栈顶为Action,Action基本原理时会说明如何将Action放入栈顶)循环输出集合数 tor<s:property torvalue="users">时,栈顶是Action,我们要Action中的集合属性,直接写属性名即可--执行代码<s:propertyvalue="userName"/>时,由于已经开始了循环,栈顶变为循环变量(User类型),我们可以写OGNL来栈顶的User变量,写User的属性即可总结:--不循环时,栈顶是--每次循环,栈顶是本次循环的变--结束循环时,栈顶变回Action torbegin="1"end="3"<s:property --这种方式的循环,栈顶变化和循环集合完全一--循环过程中,栈顶是循环的变量(整数),此时我们不能以整数变量为root来写--可以通过<s:property/>直接输出栈顶的--如果要循环变量,需要通过var属性定义变量名,然后使用#变量名来它,这里实际上是从context对象中该变量的。6)Struts2对EL表达式的支2、使用Struts2+OGNL来重构资费列*3、Action基本原画1.请求提交控制器 2.根据配置找Action3.创建VS栈容器 4.实例Action放栈顶5.调用Action算输出 6.历经层层器7.根据方法的返回值,调用Result做输出Struts2+OGNL表达的条件判断语4、登获取返回的是Map<String,Object>类型.返回的是HttpSession类型c.Action实现接口SessionAware,并实现接口定义的setSession(Objectsession)方法。--实现接口之后,当Struts2实例化Action之后,会判断它是否是SessionAware接口,如果是的话,就会调用它的setSession方法把session注入给Action,需要Action中定义变量来接受这个注入的参数。--只有给Action实现这个接口,才能给它注入一个Session,其他组件实现这个接口没用。(常使用一个单独的超类来继承SessionAware接口)分析请需要发送2次请求,第一次请求找到登陆页面,点登陆按钮时发第二次请求,在请求的Action中验证账号是否正确。找登陆页-->filter-->Action--登-->filter-->Action-->DAO-->DBUtil,Entity-->JSP(--Entity--DAO--Action—1、Result原Result组件是Struts2中用于输出的组件,实际上就是Java代码Struts2中预制了10种类型的这些ResultResult,在struts-default.xml中,这些类实际上都实现了统一的接口Result。重点讲以下类型的--dispatcher(默认的方式)--stream--redirectAction--使用方2、Stream类型的主要是用于向页面直接输出二进制数据,比如登陆页面的,可以在服务端生成,然后由这种类型的Result输出使<resultname="success"<paramname="inputName">输出属性名--在struts.xml中,我们可以使用param来给组件的属性注入默认--<paramname="inputName">,这里对应的是StreamResult的inputName属性这样配置相当于会调用StreamResult的setInputName方法给它注入属性值--注入的属性值,是Action中某个属性的名称。并且Action中作二进制输出的属性要求其类型为InputStream--Result会创建一个输出流,接到Action中的输入流,向页面输出案例:登陆生3、redirectAction类型的Result将请求重定向给一个用<resultname="success"<param<param<param如果重定向的Action,与当前请求的Action处于同一个namespace下,则可以简写<resultname="success"type="redirectAction">案例:资费删-->filter-->DeleteAction-->DAO-->DBUtil-->FindAction--4、json类型的Result向页面输出json格式的字符串使用步导将要使用json类型Result的package继承于json-在struts.xml中配置--最常用,只是输出单个属<resultname="success"<param指定Action的一个属性注意name="root"是固定的写法;如指定的属性是boolean类型,那么Result会把这个属性做成字符串"true";如指定的属性是JavaBean,那么Result会把这个属性--输出多个属<resultname="success"<param属性名1,属性名Result会将这一组属性做成一个json输出,如Action中有属可以将这2个属性做成一个--输出Action中所有的属性<resultname="success"type="json"></result>Result会将Action中所有的属性做成一个json输出{"":"","":""}案例:资费新增页面,名称的唯一性校新增(新增和修改是应该先生成页面请求1,跳转到新增页-->filter-->ActionSupportstruts.xml--请求2,保存表-->filter-->AddAction-->DAO-->DBUtil-->FindActionDAO--AddAction--struts.xml--名称唯一性校$.post-->filter-->Action-->DAO,Entity-->回调函数--DAO--Action--struts.xml--测试在浏览器中直接该Action,观察输出的json字符串,判断是否正--JSP(异步请求方式的写法1、Struts2的UI1)用--生成框体(文本框,选择框--自动回显数据(文本框显示值,选择框做默认勾选简单的a.表单 b.文本框*c.*d.单个值的复选框e.提交按钮复杂的*f.单选框*g.复选框*h.下拉<h1>演示Struts2的UI示例<!--1.生成表单--<s:formaction="#"文本框生成文本通过name中的OGNL表达式来源Action,并根据返回结果给该文本框赋-<s:textfieldname=""label="框可以理解为特殊的文本框,用法同<s:passwordname="customer.password"label="" 单个值的复选生成一个根据name中的OGNL表达式,向来源Action取值,并根据取值的结果设置是否勾选此checkboxOGNL表达式的属性,应该是布尔类<s:checkboxname="customer.marry"label="是否已婚"单选通过list生成一组radio及对应的label,list可以指定一个Map,那么Map的用于生成radio的value属性值,Map的value用于生成label显示通过name的OGNL表达式,来源Action,将返回的值与radio的value匹配,哪个radio的value与返回值一致,则该radio会设置为选中的。<s:radio "list="#{'M':'男','F':'女'}"label="复选用法等同于由于可以多选,那么name中OGNL表达式的属性应该是集<s:checkboxlistname="Cities"list="#{'beijing':'','shanghai':'复选框-动态初始化范通过list的OGNL表达式,Action中的集合属性,返回的集合用于生成多个选项。listKey要指定集合对象中用于生成value值的属性名。listValue要指定集合对象中用于生成label显示值的属性名。通过name来默认勾选,用法同<s:checkboxlistname="Citieslist="citieslistKey="code"listValue="name"label="去过的城市2"/>下拉通过list生成选项option,其中Map的key用于生成option的value,Mapvalue用于生成option的显示通过name中的OGNL表达式,来源Action,并将取到的是结果与option匹配,哪个option的value值与返回值一致,则将此option选中<s:selectname="customer.home"list="#{'beijing':'','shanghai':'','guangzhou':'广州','dongguan':'东莞','shenzhen':'','diaoyudao':''}"label="家乡"headerKey="-1"headerValue="请选择"/>下拉选-动态初始化选项同<s:selectname="customer.home"list="citieslistKey="code"listValue="name"label="家乡2"headerKey="-1"headerValue="请选择"/><!--5.提交按钮--<s:submitvalue="保存需要2次请--打开修改页面,要根据ID查询资费数据,并且将这条数据写到修改页面--修改保存,这个过程完全跟新增一样,只不过DAO中调用的是update打开修改页修改保1 Struts2中使用器来扩展Action的功能,往往是用来处理Action之间通很高,这种方式大大的提升了Struts2框架的扩展性。Struts2中预置了大量的器,我们可以直接使用,这些器定义在struts-default.xml中,每一个器都对应一个类,这些类都实现了统一的接口器的使用步创建器组件(类),要实现Interceptor接在struts.xml中,package册该器,实际上是对器类在struts.xml中,action的配置下,增加对器的,实际上是器的配<packagename="customer"namespace="/customer"extends="struts-<!--器--<interceptorname="first"<interceptor跳转到修改页面的Action<action<!--器--<interceptor-ref<interceptor-ref<interceptor-ref<result器Action的编publicclassFirstInterceptor implemen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论