来阿里实习一个多月了,被拉着直接上新项目。由于新项目要使用webx,webx框架是淘宝的框架,比较厚重又复杂,但是性能毋庸置疑(毕竟每年双十一都挺过来了)。由于webx文档较少,基本都是阿里内部使用。在网上看了一个14年实习的师兄(现在在B2B基础架构)写的文章,觉得很有用,就收藏一下:

1、快速搭建webx应用:在命令行中输入如下命令:(前提是安装了maven)详细参考webx官方文档:http://webx.github.io/

mvn archetype:generate -DgroupId=com.alibaba.webx
-DartifactId=tutorial1 -Dversion=1.0-SNAPSHOT
-Dpackage=com.alibaba.webx.tutorial1
-DarchetypeArtifactId=archetype-webx-quickstart
-DarchetypeGroupId=com.alibaba.citrus.sample
-DarchetypeVersion=1.8-DinteractiveMode=false

然后进入项目目录,输入mvn clean install命令,再输入mvn jetty:run命令即可运行。以上代码是使用jetty运行该项目。因为在pom文件中已经默认配置好了jetty,所以可以直接启动。jetty默认端口号是8081,启动好之后,可以在浏览器输入 localhost:8081 回车进入项目页面

2、接下来开始写代码,首先我们来写一个登录页面:src/main/webapp/app1/templates/screen/login.vm


<form action="$app1Link.setTarget("login")"method="post">
$csrfToken.hiddenField<input type="hidden"name="action" value="login_action"/>#set ($group = $form.login.defaultInstance)<p>登录</p><p>#if($errorMsg) $errorMsg #end</p><p><input type="text"name="$group.name.key"value="$!group.name.value"/>#if(!$group.name.valid)$group.name.message#end<input type="password"name="$group.passwd.key"value="$!group.passwd.value"/>#if(!$group.passwd.valid)$group.passwd.message#end<input type="submit"name="event_submit_do_check"/></p></form>

login.vm代码解析

首先,webx页面使用velocity模板文件编写,所以,文件名以.vm为扩展名 然后就是一个from表单,form的action填写的内容为
$app1Link.setTarget("login")
其中app1Link是webx3的url broker服务,他会根据特定配置动态渲染url,他是代表项目的根目录,调用setTarget方法,将target设置为login,这段代码的意思是,如果表单验证没通过,该页面还会跳转到本页面,本页面的地址就是用login这个target跳转过来的。因为该页面的名字是login(这就是webx框架的约定大于配置原则) 接下来我们看隐藏域: 这个隐藏域的作用是,当页面通过表单验证之后,我们会跳转到隐藏域的value所指明的target。 这里配置的是一个action,那么pipeline会把执行转交到LoginAction类手中(原因也是遵循webx框架的约定大于配置原则)。具体执行哪个方法我们接下来会讲到,LoginAction做了哪些工作接下来也有写。#set($group=$form.login.defaultInstance)
这里相当于定义了一个变量。该变量是个表单验证实例, 接下来的if语句是控制是否输入错误信息的,仅当field验证通过时(即$group.field.valid=true),才显示错误信息。对于空白表单和通过验证的字段而言,$group.field.valid为true

3、接着我们再创建两个类
第一个类是个实体类:com.alibaba.webx.tutorial1.app1.Visitor.java


public class Visitor {privateString name;privateString passwd;publicString getPasswd() {returnpasswd;}publicvoid setPasswd(String passwd) {this.passwd = passwd;}publicString getName() {returnname;}publicvoid setName(String name) {this.name = name;}
}

这个类没什么好说的,就是一个javabean的实体类,主要用于表单元素的注入。

接着,我们开始写action类。
com.alibaba.webx.tutorial1.app1.module.action.LoginAction.java


import com.alibaba.citrus.turbine.Navigator;
import com.alibaba.citrus.turbine.dataresolver.FormGroup;
import com.alibaba.webx.tutorial1.app1.Visitor;
public class LoginAction {publicvoid doCheck(@FormGroup("login")Visitor visitor,Navigator nav){String name = visitor.getName();String passwd = visitor.getPasswd();if("admin".equals(name)&&"admin".equals(passwd)){nav.redirectTo("app1Link").withTarget("form/welcome").withParameter("name",name);}else{}}
}

LoginAction.java代码解析

该类只有一个方法,doCheck。首先当login.vm表单提交后,会执行本类的doCheck方法。
@FormGroup(“login”)Visitor visitor 这个注解是个牛逼的注解,他同时做了几件事,第一是表单验证,如果表单验证通过,则执行doCheck方法,如果不通过,不执行方法,然后,取得form和login group对象,并将group中的数据注入到Visitor对象中。 根据设置好的名字,name注入到name中,passwd注入到passwd中。
nav.redirectTo(“app1Link”).withTarget(“form/welcome”).withParameter(“name”,name); 这就是做页面跳转啦。。

4、然后我们还要修改WEB-INF/app1/form.xml,增加一下内容


<group name="login"><field name="name"displayName="你的名字"><fm-validators:required-validator><message>必须填写 $\{displayName\}</message></fm-validators:required-validator></field><field name="passwd"displayName="你的名字"><fm-validators:required-validator><message>必须填写 $\{displayName\}</message></fm-validators:required-validator></field></group>
这个表单验证就不仔细说了,应该可以看得懂,看不懂的看官方文档吧

至此,项目所需要的代码就全都写完了。可以尝试在浏览器输入http://localhost:8081/login.htm
首先,用户名和密码都不填写,点击提交
填写用户名密码都填写成admin点击提交。这个时候你应该会看到你想看到的结果的。

webx 框架入门一相关推荐

  1. 『Scrapy』爬虫框架入门

    框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...

  2. c++框架有哪些_Java Mybatis框架入门教程_v20200726

    MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...

  3. Python Django框架入门第一课

    Python Django框架入门 1.Django简介 Django使用python开发的一个免费的Web框架,几乎囊括了Web应用的方方面面,用于快速搭建高性能.优雅的网站. 2.配Django运 ...

  4. Webx框架:Spring Schema 和 Spring Ext

    webx诞生的原因是当时市面上没有好用的web框架.如今的Web框架有非常多.然后它们背后的思想都是相似的,并且越来越趋同. Spring Schema 在传统的spring中,配置bean时须要手动 ...

  5. [Python] Django框架入门

    说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...

  6. python web 框架例子_最快的 Python Web 框架入门

    原标题:最快的 Python Web 框架入门 来源:Python开发 ID:PythonPush 速度比较 框架 实现基础 每秒请求数 平均时间 Sanic Python 3.5 + uvloop ...

  7. SpringBatch批处理框架入门(二)

    这篇文章接上一篇SpringBatch批处理框架入门(一),继续讲解SpringBatch基础知识. 目录 SpringBatch 核心类介绍 SpringBatch 核心类Job SpringBat ...

  8. Newbe.Claptrap 框架入门,第二步 —— 创建项目

    接上一篇 <Newbe.Claptrap 框架入门,第一步 -- 开发环境准备>,我们继续了解如何创建一个 Newbe.Claptrap 项目. 安装项目模板 打开控制台运行以下命令来安装 ...

  9. spring框架mvc框架_Spring的MVC测试框架入门–第1部分

    spring框架mvc框架 最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spri ...

最新文章

  1. iOS 开发 高级:使用 宏定义macros (#,##,...,__VA_ARGS_)
  2. Wdatepicker日期控件的使用指南
  3. python 报错 bs4 FeatureNotFound: Couldn‘t find a tree builder with the features you requested: lxml
  4. python少儿编程 在线课程-宁波Python程序开发课程
  5. ArrayList构造方法详解-给默认长度的方式
  6. 使用命令行建立Zend Framework项目
  7. linux中用户忘记root的密码--ubuntu版本
  8. C++_new创建的数组作为参数传递
  9. python带cookie发包demo
  10. [转]OpenMP 入门指南
  11. 在Cisco ASA 5510 上配置ssh登录
  12. 《NS与网络模拟》第五章node示例
  13. Linux设备驱动开发详解
  14. IE10首个修复补丁出现 解决ASP.NET兼容性
  15. 【408预推免复习】计算机网络(谢希仁第七版)第三章——数据链路层
  16. likeshop搭建商城系统,一步到位
  17. MT【252】椭圆内接三角形内切圆半径
  18. 【报告分享】代餐行业营销洞察报告-丁香医生(附下载)
  19. Unity 横向滚动ScrollView
  20. 【超好懂的比赛题解】2020ICPC澳门站 个人题解

热门文章

  1. 计算机专业选修课怎么选比较好,大一选修课选什么好 大学选修课推荐
  2. 2018主流台式计算机跑分,CPU天梯图2018年1月最新版 台式电脑处理器天梯排行 (全文)...
  3. java jpanel 位置_JPanel及其组件自动更改位置
  4. Dell开机时报错smartaudio无法运行
  5. 心电图 python_【铎悦干货】解析心电图基础(二),看完绝不后悔
  6. 拿到互联网大厂几十万offer,我仍然在备考公务员
  7. 5.5. SURF (Speeded-Up Robust Features)简介
  8. 扩频解扩通信系统的误码率matlab仿真
  9. SCL语言的数据类型和常量与变量声明方式
  10. 教你用Pyecharts画出好看桑葚图