《Webx及框架简介》PPT课件.ppt_第1页
《Webx及框架简介》PPT课件.ppt_第2页
《Webx及框架简介》PPT课件.ppt_第3页
《Webx及框架简介》PPT课件.ppt_第4页
《Webx及框架简介》PPT课件.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

Webx简介,第一课,WebX框架基础,WebX Packaging,Webx应用的打包方法,传统方式,Webx方式,War 是Web Application Archive的缩写 Car 是Component Archive的缩写 多个car可以组装成一个war,Car在开发中的应用,Car的目录结构和War基本相同,除了 不需要文件:WEB-INF/web.xml 不需要目录:WEB-INF/lib 开发时,可以把car当作war来开发、调试 部署时,可以把多个car组合成一个war WebX框架保证,无论下面哪种情况,对程序代码而言都是透明的: 将car以war的形式单独运行 或将多个car组合成一个war运行,Petstore.war的组成,home.car css images templates control layout screen WEB-INF webx.xml classes,user.car css images templates control layout screen WEB-INF webx.xml classes,Petstore.war home css images templates control layout screen user css images templates control layout screen store admin WEB-INF home webx.xml user webx.xml store admin lib classes,WebX框架基础,URL的解析与生成,URL的解析,WebX的URL是怎样的呢?以下面的URL为例: http:/localhost:7001/petstore/user/account/edit.htm URL scheme(协议):http: Server name:localhost Server port:7001 Context path:/petstore Component path:/user Servlet path:/account/edit.htm Target:/account/edit.vm 分析URL是由AnalyzeURLValve完成的(后面会讲到),因此以上URL分析的规则是完全可以被改变的。,URL的生成,和解析URL相反,我们还需要在页面上生成指向其它页面的URL。 URL是由URIBrokerService来动态生成的。 使用URIBrokerService有什么好处呢? 集中管理 全网站的URL均可在同一个配置文件中管理 可靠 动态生成,不容易出错 规范 例如在生成query string时,会自动URL encoding 透明 应用程序、模板不需要知道最终生成的URL的样子,修改URL就变得很简单,URL配置文件举例, / /user login.vm ,在模板中使用URIBroker的方法,$toolkitSite 生成结果:/ $petstoreServer 由于expose=false,所以不能直接使用 $userModule.setTarget(“account/edit.vm“) 生成结果:http:/localhost:7001/petstore/user/account/edit.htm $userContent.setContentPath(“images/my.gif“) 生成结果:http:/localhost:7001/petstore/user/images/my.gif $petstoreLoginLink 生成结果:http:/localhost:7001/petstore/user/login.htm,在程序中使用URIBroker的方法,取得URIBrokerService: URIBrokerService uriBrokerService = (URIBrokerService) getWebxComponent() .getService(URIBrokerService.SERVICE_NAME); 取得指定名称的URIBroker: URIBroker uriBroker = uriBrokerService.getURIBroker( “petstoreLoginLink“, rundata); 渲染URL: String url = uriBroker.render();,WebX框架基础,RunData,RunData的功能,封装了Request和Response对象 保存request scope的状态 透明地处理常规表单和multipart/form-data格式的表单数据 简化cookie的存取 提供透明的buffering支持,RunData常用方法,取得HTTP request、response和session rundata.getRequest() rundata.getResponse() rundata.getSession() 取得输出流(自动buffering) rundata.getResponse().getWriter() rundata.getResponse().getOutputStream() 取得query参数(无论是一般form还是multipart form) rundata.getParameters().getString(“id“) rundata.getParameters().getInt(“quantity“) 内部重定向 rundata.setRedirectTarget(“homepage.vm“) 外部重定向 rundata.setRedirectLocation(“/“) 设置content type和character encoding rundata.setContentType(“text/html“) rundata.setCharacterEncoding(“UTF-8“) 存取request scope的参数 rundata.getAttribute(key) rundata.setAttribute(key, object),WebX框架基础,页面布局,Turbine风格的页面布局,Layout,Control,Control,Control,Screen,Petstore Sample,Copyright Notice,Navigation Menu,Main Content,Turbine风格的目录结构,模板目录结构 src/webroot templates control bottom.vm tabs.vm top.vm topNoLogo.vm layout default.vm screen homepage.vm,Java模块package结构 src/java com alibaba sample petstore web home module screen Homepage.java control action,开发turbine应用程序的基本单元是Module 实际应用中,大部分的module都是TemplateModule。TemplateModule由两部分构成:模板和Java模块:,实际例子:Petstore登录页面,这个页面是怎么显示出来的呢?,实际例子:Petstore登录页面(过程),用户输入URL: http:/localhost:7001/petstore/user/login.htm 分析URL取得target: /login.vm 根据target查找screen模板: /screen/login.vm 根据target查找screen模块的类: com.alibaba.sample.petstore.web.user.module.screen.Login(找不到该类) com.alibaba.sample.petstore.web.user.module.screen.Default(找不到该类) com.alibaba.turbine.module.screen.TemplateScreen(默认screen类) 执行screen类,并渲染screen模板 根据target查找layout模板: /layout/login.vm(找不到) /layout/default.vm(找到) 渲染layout模板 渲染在layout模板中引用的两个control: home:top.vm 在home.car中查找/control/top.vm home:bottom.vm 在home.car中查找/control/bottom.vm,访问无模板的screen,假设有下面的URL(注意后缀): http:/localhost:7001/petstore/user/login.do 那么WebX将不会查找login.vm这个模板,而是直接执行screen: com.alibaba.sample.petstore.web.user.module.screen.Login 什么时候要使用这种URL呢? 不使用模板的情形 模板只是一种文本生成技术,除此之外,还有其它技术。在某些情形下,使用模板不一定是最好的方法。 不需要返回可见的页面的情形 例如一个被机器回调的URL。 重定向到另一个页面的情形 有时一个页面自身不显示内容,而是重定向(内部/外部)到另一个页面。例如:支付宝的商家工具。,WebX框架基础,页面驱动,页面驱动,什么是页面驱动? 以页面(view)为主导 先写页面,再写和页面配套的程序模块 通过规则,查找页面所对应的程序模块 页面驱动的好处? 符合WEB项目开发的流程: 在产品设计阶段就可以做出页面 在开发阶段对页面进行细化。 页面驱动的动力 Pull Tools,Pull Tools,看看petstore中的一个页面模板: 想想看:以上这些“红色”的变量是哪来的?, #set ($group = $form.login.defaultInstance) ,WebX框架基础,Turbine Modules,Turbine Modules,Modules是基本编程模块: Screen 用来处理页面显示逻辑的module Control 和screen类似,但可以被别的screen或layout引用,甚至可以跨越car应用 Action 处理用户提交表单的module 所有module都实现Module接口: public interface Module void execute(RunData rundata) throws WebxException; ,Screen Module的写法,Screen的功能就是显示一个页面,最简单的screen可以这样写: public class SimpleScreen extends AbstractModule public void execute(RunData rundata) throws WebxException PrintWriter out = rundata.getResponse().getWriter(); out.println(“hello, world“); 但这种写法并不常用,99%的screen使用了模板技术: public class MyTemplateScreen extends TemplateScreen protected void execute(RunData rundata, TemplateContext context) throws WebxException context.put(“hello“, “world“); 模板文件myTemplateScreen.vm可以这样写: Hello, $hello 显示结果:hello, world,Control Module的写法,Control和screen的写法完全类似: public class SimpleControl extends AbstractModule public void execute(RunData rundata) throws WebxException PrintWriter out = rundata.getResponse().getWriter(); out.println(“hello, world“); 支持模板技术的control从TemplateControl类派生 public class MyTemplateControl extends TemplateControl protected void execute(RunData rundata, TemplateContext context) throws WebxException context.put(“hello“, “world“); 模板文件myTemplateControl.vm可以这样写: Hello, $hello 显示结果:hello, world,Action Module的写法,Action是用来处理用户提交的表单的(以petstore用户登录为例) 程序这样写: public class LoginAction extends TemplateAction public

温馨提示

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

评论

0/150

提交评论