




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、=Day04=1.回顾1)视图(jsp)到业务控制器(action)数据的传递,为action注入属性eg:在action中有一个user属性,<input type="text" name="user.username"/>2)在struts.xml中配置静态的参数,为action注入属性值eg:<action><param name="pageSize">4</param>/action.setPageSize(4)<param name="pageinfo.page
2、Size">4</param>/action.getPageinfo().setPageSize(4);</action>3)ognl valueStack struts2标签a、struts2运转流程:客户端浏览器提交请求,请求业务控制器,struts2控制器接收到请求,创建valueStack对象,并且把valueStack对象放入request作用域中,接着创建业务控制器action的对象,同时把action对象放入valueStack,控制器调用action的业务方法,默认调用execute,然后由业务控制器action调用模型,模型返回结果给业
3、务控制器action,action接收到模型返回的结果,再把result的name返回给控制器,控制器按照result的配置定位视图(jsp),最后jsp响应给浏览器.在视图(jsp)中使用struts2标签和ognl表达式进行数据的输出.2.valueStack1)valueStack是值栈,是一个栈的结构,是xwork对ognl的封装.2)valueStack在request作用域中,request.setAttribute("struts.valueStack",valueStack)3)在视图(jsp)使用<s:debug/>查看valueStackeg
4、1:<s:property value="user"/>a.首先从request作用域中找到valueStackb.传递ognl表达式user到valueStack中的ognl引擎,ognl引擎进行解析,ognl引擎到root对象中获取user属性值,并且把值返回.eg2:<s:property value="#user"/>a.首先从request作用域中找到valueStackb.传递ognl表达式#user到valueStack中的ognl引擎,ognl引擎进行解析,ognl引擎到context对象中获取user键所对应的值
5、,并且把值返回.4)struts2如何去支持el,如何去支持request.getAttribute("attr1")a.把request对象类型输出<%=request%><%=request.getClass().getName()%>b.附加源代码,查看实现结论:struts2封装了一个request的类StrutsRequestWrapper,这个类继承了HttpServletRequestWrapper implements HttpServletRequest,struts2在StrutsRequestWrapper中重写了getAttr
6、ibute(String s),如何重写的:从request的作用域中拿到valueStack,再从valueStack中查找属性名所对应的属性值,再把值返回.在struts2框架整个运转过程中,request对象类型是:StrutsRequestWrapper3.业务控制器action如何访问reqeust,session以及application4.result的常用类型=Day05=1.回顾1)什么是MVC:模型、视图、控制器2)什么是struts2:struts2基于mvc设计模式,实现了复杂的mvc控制流程,方便使用者。3)struts2工作流程:应用运行过程中,struts2控制器
7、完成的工作,对应图struts2.jpg:第一步:其中a,b是javaweb容器处理流程a.浏览器发送请求地址url"http:/localhost:8080/app/sys/user?user.userid=12"到web容器tomcat;b.tomcat按照web.xml的配置,把请求交给struts2控制器;c.struts2控制器加载struts_default.xml,struts_plugin.xml,struts.xml;d.struts2控制器分析请求地址url,找到namespace=“/sys”的package,并在此pagckage下找到action的
8、name=“user”的action;e.创建业务控制器action的实例f.struts2控制器查看请求request中是否带参数,如果带有参数,则获取到参数值填充到action的属性中,调用action的getUser()方法;查看user对象是否为空,为空则创建user对象,调用setUser(User)方法;接下来调用user的setUserid(Integer id)方法;完成action的User属性值的注入。g.struts2控制器查看action是否实现了获取web元素的接口,如果实现了,则把action转为相应的接口类型,然后调用对应的set方法,为action注入所需的we
9、b元素。 第二步:struts2控制器按照struts.xml中的配置调用业务控制器action的业务方法,默认调用execute()方法。 第三步:业务控制器action调用模型(dao) 第四步:模型(dao)访问数据库 第五步:数据库返回结果给模型(dao) 第六步:模型(dao)返回结果给业务控制器action 第七步:业务控制器action返回result的name给struts2控制器 第八步:struts2控制器按照struts.xml的配置,找到result的name对应的视图(jsp).jsp中使用struts2标签、ognl表达式访问ValueStack。 第九步:视图(j
10、sp)响应到浏览器。2.pageInfo3.response字符集的问题4.登录1)模型,userdao增加方法User selectUser(String username,String userpass);2)业务控制器Action,增加方法String login();a.调用模型userdaoselect userid,username,userage,userregtime from userswhere username=? and userpass=?b.往session中保存user对象c.返回result的named.写login.jspe.写loginSuccess.jsp
11、f.在struts.xml中配置了全局的result<result name="login" type="redirect">/login.jsp</result>注意:采用重定向到页面的类型e.在struts.xml中为action配置了result,name是loginSuccess<result name="loginSuccess" type="redirect">/loginSuccess.jsp</result>注意:登录成功后也采用重定向的方式进行跳转.
12、5.练习,使用application记录用户访问系统的次数.1)写CountAction,获取到application,Map类型,接口注入2)在CountAction写一个业务方法,execute3)在execute中判断是否是第一次访问if(application.get("count")=null)/第一次访问application.put("count",1);else/不是第一次访问Integer count=(Integer)application.get("count")+1;application.put("
13、count",count);return "success"4)在success.jsp中<s:property value="#application.count"/>6.result的常用类型dispatcher:转发到页面redirect:重定向到页面redirectAction:重定向到action第一个action重定向到第二个action,第二个action需要第一个action传递参数过去,怎么办?解决:a.struts.xml中使用ognl表达式获取第一个action中的属性值;b.通过url传参的方式把属性值传递给
14、第二个action<result type="redirectAction"><param name="actionName">redirect2</param><param name="id">$id</param></result>chain:转发到actionjson:json字符串a.导入struts2-json-plugin-.jarb.查看此jar中struts_plugin.xml,该文件中配置了json的typec.创建JsonAct
15、ion,增加一个name属性,execute返回successd.配置struts.xml在jsonAction配<package name="test" extends="json-default"><action name="json" class="JsonAction"><result type="json"></result></action></package>eg1:使用javascript输出json字符串中
16、的内容a.创建testJson.jsp页面b.<a href="javascript:m1()">click</a>c.m1():创建ajax引擎对象,使用该对象请求test/json,获取响应值reponseText,把responseText转成javascript对象d.使用javascript输出eg2:延续eg1a.在JsonAction中增加属性List<String> strList;并放入元素.b.在testJson.jsp中,使用javascript,alert(xhr.responseText)stream:流,验证码
17、,下载eg1:验证码,在页面有验证码输出a.创建Action,StreamAction,在action中增加属性java.io.InputStream input,增加input的set和get方法b.把验证码.txt中的代码拷贝到StreamAction类体中c.在StreamAction中增加业务方法execute,在方法中写三行代码byte image=randomImage();this.input=new ByteArrayInputStream(image);return Action.SUCCESS;d.在struts.xml中配置<package name="t
18、est" namespace="/test" extends="json-default"><action name="stream" class="StreamAction"><result type="stream"><param name="inputName">input</param><param name="contentType">image/jpeg</par
19、am></result></action></package>=Day06=1.回顾1)登录2)统计用户访问次数3)result的常用类型a.dispatcherb.redirectc.redirectActiond.chaine.json导jar包<result type="json"></result>f.stream<result type="stream"><param name="inputName">input</param&g
20、t;<param name="contentType">image/jpeg</param></result>2.标签1)UI标签(ui:user interface)常用的UI标签注意:>>UI标签中通用属性name,cssClass(对应html中的class),cssStyle(对应html中的style)>>在struts.xml中配置常量<constant name="struts.ui.theme" value="simple"/>a.form:the
21、me(simple),namespace,action,methodb.textfield:maxLength,size,readonlyc.passwordd.submite.textarea:cols,rowsf.checkbox:name,fieldValueg.checkboxlist:list,valueh.radioi.select:list,listValue,listKey,headerValue,headerKey第一种:form表单中控件的数据固定1.UiInput.jsp2.UiAction3.UiSuccess.jsp第二种:form表单中控件的数据来自于业务控制器action2)非UI标签perty:value,escape,defaultb.action:name,executeResult,varc.iterator:value,var,count,index,first,modulus(n),statusd.date:name,formate.url:action,varf.set:var,value,scopeg.if:test3. 拦截器=Day07=1.回顾1)标签2)拦截器2.拦截器eg1:完成一个拦截器,功能:检查是否登录a.新建拦截器类a1.继承AbstractInterceptora2.实现Interceptor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江西吉安市文化旅游投资发展集团有限公司及下属子公司招聘10人(第一批)模拟试卷及答案详解(有一套)
- 2025江西瑞昌市部分市直事业单位考选工作人员17人考前自测高频考点模拟试题及完整答案详解
- 2025年4月四川成都市金牛区中医医院招聘17人模拟试卷及一套参考答案详解
- 2025年甘肃省武威市事业单位招聘628人【医疗岗57人】考前自测高频考点模拟试题附答案详解(模拟题)
- 2025江苏中国矿业大学徐海学院招聘专任教师1人模拟试卷及一套参考答案详解
- 2025广东广州市中山大学孙逸仙纪念医院消化内科医教研岗位招聘3人模拟试卷及答案详解(考点梳理)
- 2025广西物流职业技术学院公开招聘教职人员控制数205人考前自测高频考点模拟试题附答案详解(完整版)
- 2025北京昌平区第二批乡村助理员招5人考前自测高频考点模拟试题及答案详解(各地真题)
- 初一周记范文六篇
- 2025年日光温室外保温被项目发展计划
- 企业内部控制培训课件完整版
- 气瓶检验员考试题库
- 五年级上册生命与健康教案
- 学位申请书单位评语
- 新能源汽车火灾事故处置程序及方法
- 九年级语文上册-谈骨气-吴晗-课件
- 教育专业的大学生职业规划书
- GB/T 6283-2008化工产品中水分含量的测定卡尔·费休法(通用方法)
- 中海油劳动合同范本(标准版)
- 施工机械设备情况及进场计划
- 红十字会救护员培训理论试题附答案
评论
0/150
提交评论