Struts2 概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Struts2技术解析——企业级JAVA项目实训一、Struts2框架原理„课程目标:…介绍…下载…基本开发配置…开发简单应用Struts2由来„Struts作为MVC的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点:…MVC模型的使用…功能齐全的标志库(TagLibrary)…开放源代码„缺点:…需要编写的代码过多,严重的继承依靠,容易引起“类爆炸”…单元测试困难„Struts2=Struts+WebWork…较新的WebMVC框架…Struts1.X与Struts2Struts2与XWork„Struts2=StrutsCore+XWork…以XWork为基础。通过使用XWork的命令模式框架和拦截器框架,提供了一个支持Web功能、能快速构建Web应用的命令模式框架。„Struts2将Web功能提托付给XWorkCommand模式解析„典型的Command模式需要有一个接口.接口中有一个统一的方法,这就是将命令/请求封装为对象:publicinterfaceCommand{publicabstractvoidexecute();}„具体不同命令/请求代码是实现接口Command,下面有三个具体命令publicclassEngineerimplementsCommand{//command1publicvoidexecute(){//doEngineer'scommand}}publicclassProgrammerimplementsCommand{//command2publicvoidexecute(){//doprogrammer'scommand}}publicclassPoliticianimplementsCommand{//command3publicvoidexecute(){//doPolitician'scommand}}Command模式解析„按照通常做法,可以直接调用这三个Command,但是使用Command模式,要将他们封装起来,扔到黑盒子List里去:„publicclassproducer{publicstaticListproduceRequests(){Listqueue=newArrayList();queue.add(newEngineer());queue.add(newPolitician());queue.add(newProgrammer());returnqueue;}}Command模式解析„这三个命令进入List中后,已经失去了其外表特征,以后再取出,也可能无法分辨出谁是Engineer谁是Programmer了,看下面客户端如何调用Command模式:„publicclassTestCommand{publicstaticvoidmain(String[]args){Listqueue=Producer.produceRequests();for(Iteratorit=queue.iterator();it.hasNext();)//客户端直接调用execute方法//无需知道被调用者的其它更多类的方法名。((Command)it.next()).execute();}}Command模式解析„由此可见,调用者基本只和接口打交道,不合具体实现交互,这也体现了一个原则,面向接口编程,这样,以后增加第四个具体命令时,就不必修改调用者TestCommand中的代码了„理解了上面的代码的核心原理,在使用中,就应该各人有自己方法了,特别是在如何分离调用者和具体命令上,有很多实现方法,上面的代码是使用从List过一遍的做法.这种做法只是为了演示XWork提供了什么?„XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL–theObjectGraphNavigationLanguage),IoC(InversionofControl倒置控制)容器等。„基于一个简单的接口就可以进行灵活且可自定义的配置;„定制和扩展拦截器来适应任何请求/响应环境;„包括多个Action之间的链接,表示层的转向„OGNL的应用与自动类型转换;„IOC与验证框架。StrutsCore提供了什么?„封装HTTP请求与响应对象„处理Session与Application容器„ServletDispatcher转换与Action执行„提供了Web层拦截器„Result的转换Struts2系统架构„接受请求„FilterDispatcher定位Action„拦截器调用„Action核心方法调用„Result输出Struts1.XvsStruts2.X„Action——Action&POJO„ActionForward——Result„struts-config.xml——struts.xml„ActionServlet——FilterDispatcherAction设计原则„Action是命令对象„Action应当尽量简单„Action和任何Web对象无关„Action接口只有一个方法:…publicinterfaceAction{publicStringexecute()throwsException;}下载Struts2Struts2基本开发配置„启动MyEclipse„创建WebProject„添加必需的Struts2的相应jar文件„向web.xml加入Struts2过滤器„创建Action类„创建JSP表示层页面„配置struts.xml文件„执行测试用例添加必需的Struts2的相应jar文件向web.xml加入Struts2过滤器创建Action类创建JSP表示层页面配置struts.xml文件运行测试程序流程分析„执行流程:„Request-FilterDispatcher-XXXAction-Result-JSPPage„封装的过程:…设置表单参数…设置请求属性疑问?„Request与Response在哪里?„表单参数从哪里来?„Action属性是如何传递到前台的?单元小结„都是MVC架构„提供了控制器与流程跳转功能„监听特定的URL地址,调用Action„提供了表示层标签库„提供了国际化支持问答与回顾:„POJO是什么?„PlainandoldJavaObject,普通JAVA类,不继承自特定模板,包含但不限于JavaBean„SUCCESS和”success”在哪里定义的?„Action是如何找到的?(struts.xml)补充:Struts2.0-Struts2.1调整„问题:web.xml的变化struts2.1中的写法为:filterfilter-namestruts2/filter-namefilter-classorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter/filter-class/filterfilter-mappingfilter-namestruts2/filter-nameurl-pattern/*/url-pattern/filter-mapping补充:Struts2.0-Struts2.1调整„问题:tabbedPanel标签一直在使用struts2.0中的s:tabbedPanel标签,这个标签使用的是dojo脚本框架,在struts2.0中是自带的,struts2开发小组在struts2.1中把dojo做为插件的形式存在,对应的写法也发生了变化,下面是struts2.1中的写法:%@taglibprefix=sxuri=/struts-dojo-tags%……sx:head/sx:tabbedpanelid=tabbedpanel1cssStyle=width:100%;height:100%doLayout=truesx:divid=column1label=栏目一loadingText=加载中……href=url1.actioncssStyle=display:none/sx:divsx:divid=column2label=栏目二loadingText=加载中……href=url2.actioncssStyle=display:none/sx:div/sx:tabbedpanel补充:Struts2.0-Struts2.1调整„问题:乱码问题原来在struts2.0里面正常的内容,在struts2.1.6中会乱码,解决办法:修改strut2.1.6源文件org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,把doFilter方法中由:„prepare.createActionContext(request,response);prepare.assignDispatcherToThread();prepare.setEncodingAndLocale(request,response);„改为:„prepare.setEncodingAndLocale(request,response);prepare.createActionContext(request,response);prepare.assignDispatcherToThread();„不想修改源文件的话,把StrutsPrepareAndExecuteFilter类的代码copy一份,然后web.xml配置成你copy的这份也可以

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功