webx--借用petstore快速入门

前言

本博客记录来阿里实习的第一个任务–webx框架学习,会不断更新学习心得。

配置对应环境,运行petstore

通过官网给的命令行方法,来运行petstore

  • petstore是java ee的经典学习案例,下载链接
  • 如何运行呢? 参见官网给的指导:webx官网
git clone https://github.com/webx/citrus-sample.git
cd citrus-sample/petstore
mvn clean install
cd web
mvn jetty:run-war

maven是一个巨大项目的管理工具,类似于C++的makefile,回头会具体细看maven的用法。下面是执行上面遇到的问题总结:

下载配置maven:下载maven链接 ,注意maven运行需要jdk,而不仅仅是jre,否则会提示对应的错误;
mvn jetty:run-war,执行报错,参见帖子:mvn jetty:run-war 报错 的解决方法
jetty跑起来之后,通过如下链接访问:http://localhost:8081/?home

使用eclipse来运行petstore

  • 下载java ee的eclipse,解压缩即可使用,这个版本的eclipse自带maven,无需配置;
  • 通过前面的命令行操作,已经得到了一个war包,在eclipse中导入war包即可。war包的路径是:D:\code\maven\citrus-sample\petstore\web\target\petstore.war.
  • 配置tomcat,来运行petstore。首先去官网下载一个tomcat:http://tomcat.apache.org/download-80.cgi 配置好环境之后,需要将tomcat嵌入到eclipse中:Windows–Preference-Server–Runtime environment中进行配置即可。可以参见帖子:tomcat嵌入到eclipse中,并运行一个jsp文件
  • 至此,就可以在eclipse中运行petstore了。
  • 补充,通过上述方式虽然可以运行petstore了,但是发现通过war导入的工程,并不能阅读*.java的源码。这里通过命令行:mvn eclipse:eclipse,将maven工程转换为eclipse可以识别的工程,再次在eclipse中导入即可,参见帖子:eclipse导入maven工程

使用eclipse建立快速建立webx工程

通过上面步骤已经可以开始分析petstore了,面对一个新框架,分析这个还是有点棘手,所以,我还是选择了从hello,world工程开始。这里,在阿里学习上,找到了一个webx学习的视频,多听几遍,才慢慢听懂,链接:阿里学习-webx分享。通过这个视频对照快速建立的webx工程,可以有效的来进行学习。

为eclipse安装Archetype

new 一个maven工程
在选择archetype界面,右下角有一个add archetype, webx-archetype信息 ,仓库地址
至此,就可以通过webx-archetype-quickstart来快速建立一个webx的工程了,并且有基本的学习例子,对照着前面给出的视频教程,反复观看和操作可以简单快速的了解概念。

在eclipse中,让vm模板语法高亮

*vm的模板文件并不能够语法高亮和自动补全,写起来比较痛苦,一个安装插件的地址:veloeclipse插件地址 ,在安装过程中会遇到错误:

An error occurred while installing the items session context was:(profile=epp.package.jee, phase=org.eclipse.equinox.internal.p2.engine.phases.Install, operand=null –>

[R]com.googlecode.veloeclipse.ui 2.0.8, action=).

Failed to prepare partial IU: [R]com.googlecode.veloeclipse.ui 2.0.8.

此时,参考帖子:安装veloeclipse遇到问题解决

仿写一个hello,world

  1. 页面驱动:在index.vm的首页上,添加一个helloworld的超链接;
  2. 在com.zy.first.app1.module.screen.simple的包下面建立一个screen去返回一个不用渲染的页面(参照SayHi.java文件)
  3. 至此, 对webx就有了一个大概的了解了。

通过petstore项目,来学习webx

通过前面的webx-quickstart产生的例子教程,可以快速的入门webx。个人认为比petstore更加适合来理解webx的概念和运行过程。但是petstore可以称作一个全面的项目,很多东西都涉及到了。所以这里,还是使用petstore来学习webx中的一些重要概念。其中很多东西都来自Webx3_Guide_Book.pdf

webx的层次

webx鼓励层次化设计,框架本身也是层次化的。层次如下图所示:

其中:

SpringExt:基于Spring,提供扩展组件的能力。它是整个框架的基础。

Webx Framework:基于Servlet API,提供基础的服务,例如:初始化Spring、初始化日志、接收请求、错误处理、开发模式等。Webx Framework只和servlet及spring相关 ——它不关心Web框架中常见的一些服务,例如Action处理、表单处理、模板渲染等。因此,事实上,你可以用Webx Framework来创建多种风格的Web框架。

Webx Turbine:基于Webx Framework,实现具体的网页功能,例如:Action处理、表单处理、模板渲染等。

SpringExt

这个部分,还有待学习,我们知道,SpringExt完全兼容Spring原来schema的概念和风格,但是却可以让schema像程序代码一样被扩展。Webx完全建立在SpringExt的基础上。这个基础决定了Webx是一个高度可扩展的框架,其配置虽然灵活,却又不失方便和直观。SpringExt提供了一个通用的扩展机制。

Webx Framework

webx Framework是第一个真正涉及web技术的层次。

webx Framework这个层次的任务:

webx--借用petstore快速入门_第1张图片

初始化spring容器

在web.xml配置文件中,Webx利用WebxContextLoaderListener来初始化Spring。Webx Framework将会自动搜索/WEB-INF目录下的XML配置文件,并创建级联的spring容器。将一个大的应用分解成若干个小应用模块,并使它们的配置文件相对独立,这是一种很不错的开发实践。

初始化日志系统

在web.xml中,Webx利用LogConfiguratorListener来初始化日志系统。

webx响应请求

如下图所示:

webx--借用petstore快速入门_第2张图片
*. 首先,它会增强request、response、session的功能,并把它们打包成更易使用的RequestContext对象。在webx.xml中可以配置request-contexts服务。
*. 其次,它会调用相应子应用的pipeline,用它来做进一步的处理。
*. 假如在上面的过程中出现异常,则会触发Webx Framework处理异常的过程。
pipline: webx Framework赋予开发者极大的自由,来定制处理请求的流程。如图所示:
webx--借用petstore快速入门_第3张图片
补充–WebxFrameworkFilter处理一个WEB请求的过程,如下图所示:

Webx Turbine

设计理念:页面驱动和约定胜于配置。约定的规则如下所示:

webx--借用petstore快速入门_第4张图片

下面来看看页面布局:

webx--借用petstore快速入门_第5张图片

Screen,代表页面的主体。
Layout,代表页面的布局。
Control,代表嵌在screen和layout中的页面片段。

接下来结合具体例子来看看页面的处理流程:

页面的处理流程是在pipeline.xml中定义的,下面以http://localhost:8080/petstore/ 这个url来说明页面的处理流程,Webx Framework的处理流程,从WebxFrameworkFilter接收请求,并且一路顺利到达pipeline。然后Pipeline开始依次执行它的valves。:
* analyzeURL - 分析URL:获取target,这里并没有path信息,AnalyzeURL valve提供了一个可选的参数“homepage”;
* 进入choose- 多重分支: 这里homepage没有后缀,“homepage”满足了第一个所附带的条件:target-extension-condition extension=”null” ;
* 进入这个条件:performAction- 执行action,action是用来执行表单请求的,本地请求,并没有action,所以跳过;
* performTemplateScreen - 查找并执行screen。有一个规则去查找screen,如果找到screen类,就去执行它,Screen类的功能,通常是读取数据库,然后把模板所需要的对象放到context中。如果找不到,也没关系 —— 这就是“页面优先”:像homepage这样的主页,通常没有业务逻辑,因此不需要screen类,只需要有模板就可以了。
* renderTemplate - 渲染模板。这里用到两个规则:target映射成screen template,以及target映射成layout template。如果没有找到screen模板,就报404错误,如果找到就按照一定的规则去寻找layout模板,如果存在,就将screen嵌入到layout模板中。
* breakUnlessTargetRedirected - 内部重定向。内部重定向实质上就是由breakUnlessTargetRedirected实施的 —— 如果没有重定向标记,就退出;否则循环到loop标签。

你可能感兴趣的:(webx,petstore)