Webx小应用的实现整理与分析

初次在园子里与大家分享自己的所学,欢迎各种指点~                            By 仰城 2013-08-07

  学习一段时间webx、ibatis、spring以及maven的基本知识之后,应用它们实现了一个web应用的简单功能。这篇文章主要对这个应用的实现过程进行一些描述以及分析。后续将更加深入地对一些细节进行总结。

构建应用

  功能:用户注册、用户登录;

  技术框架:webx(表现层),spring(业务层),ibatis(数据层);

  前置准备:安装jdk6、eclipse、maven,并进行相关配置;

  实现过程主要包括:创建新项目、配置pom.xml文件、实现用户注册登录功能、建立数据库、创建DAO。具体如下图所示:

分析

http请求处理流程分析

  应用构建的基本流程了解之后,我们需要对应用处理请求的流程进行分析。

  这里用户通过URL:http://localhost:80/index.htm来访问webx应用。

  当http请求到达时,由WebxFrameworkFilter接手这个请求,其中WebxFrameworkFillter定义如下:

  WebxFrameworkFilter会排除或略过指定的URL。如果一个请求被排除,webx将会立即放弃控制,将请求交还给服务器,该请求无法访问webx的一切服务。

  通过的请求会经过一系列的流程并到达pipeline,然后pipeline依次执行它的valves。如下图所示:

  由于这个请求(http://localhost:80/index.htm)并没有业务逻辑,因此不需要screen类,只需要有模板就可以了。因此依次执行到<renderTemplate>渲染模板,此时,target为index.vm,webx turbine会查找templates/screen下是否有index.vm模板,

  1.如果未找到,则会报404 not found错误;

  2.如果找到screen模板,webx Turbine会查找下面的layout模板:

    1)Templates/layout/index

    2)Templates/default

  Layout模板如果找不到,就直接渲染screen模板;如果找到,则把渲染screen模板后的结果嵌入到layout模板中。

表单提交处理过程分析

  首先,index.vm中关键定义如下:

  提交表单请求之后,调用action目录下的RegisterAction类的doLogin方法,如下图所示:

  @FormGroup(“registerOrlogin”)User user将表单中的参数注入到User对象中。之后通过调用DAO提供的数据访问接口(具体原理及过程见后续文章),判断用户名和密码是否正确,并返回用户信息。返回成功则进行相应的跳转。

Webx小应用的实现整理与分析的更多相关文章

  1. jqGrid pivot获取所有行包括小计数据及原码分析

    1.结论:按正常jqGid获取,在中间加入以下代码,即将小计行当成改变为普能行,以便能让'getRowData'方法获取到,第三点会进行原码分析 //get all page grid data,in ...

  2. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

  3. 微信小游戏 demo 飞机大战 代码分析 (三)(spirit.js, animation.js)

    微信小游戏 demo 飞机大战 代码分析(三)(spirit.js, animation.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码 ...

  4. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  5. 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)

    微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  6. QQ宠物吹泡泡游戏小助手 VC++6.0代码分析

    最近玩QQ宠物,他总是心情低落,让我很不爽,让他玩耍吧,还得自己点鼠标,所以想偷个懒,试试能不能编个程序让电脑帮我做这个事情. 要干这件事就得先找一个游戏开刀,刚开始我找的是弹力球游戏,不就是点鼠标么 ...

  7. Java小例子(学习整理)-----学生管理系统-控制台版

    1.功能介绍: 首先,这个小案例没有使用数据库,用集合的形式暂时保存数据,做测试! 功能: 增加学生信息 删除学生信息 修改学生信息 查询学生信息:  按照学号(精确查询)  按照姓名(模糊查询) 打 ...

  8. python flask框架学习(三)——豆瓣微信小程序案例(二)整理封装block,模板的继承

    我们所要实现的效果: 点击电影的更多,跳转到更多的电影页面:点击电视剧的更多,跳转到更多的电视剧页面. 三个页面的风格相同,可以设置一个模板,三个页面都继承这个模板 1.在指定模板之前,把css放在一 ...

  9. 小师妹学JVM之:逃逸分析和TLAB

    目录 简介 逃逸分析和栈上分配 TLAB简介 TLAB详解 设置TLAB空间的大小 TLAB中大对象的分配 TLAB空间中的浪费 总结 简介 逃逸分析我们在JDK14中JVM的性能优化一文中已经讲过了 ...

随机推荐

  1. 搜集朋友写的几篇Android Elf相关的文档

    对android elf的资料学习,多数是在看雪找的资料,另一部分朋友的研究,当然,给他们提议过整理成一系列文章,只是大家工作都太忙,也都没顾上,这里简单整理放上一些pdf的资料,有兴趣的朋友能够看看 ...

  2. Socket 学习(三).4 UDP 穿透 客户端与客户端连接

    效果图: 使用方法:  先 修改WinClient\bin\Debug  下面的 ip.ini,写上 服务器 IP地址. 客户端 与 客户端 通讯 之前 ,点击发送打洞消息 按钮,然后过一会再发送消息 ...

  3. MonkeyRunner于Windows在下面Eclipse开发环境的搭建步骤(并解决在线Jython配置错误的问题)

    网上有一shangdong_chu网友写了一篇文章介绍了如何Eclipse构造MonkeyRunner,他做了叙述一个很好的说明.但我对我的环境试验后会见Jython解析错误的问题,和制品缺少Pyde ...

  4. zoj 3822 Domination(dp)

    题目链接:zoj 3822 Domination 题目大意:给定一个N∗M的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望. 解题思路:大白书上概率那一张有一 ...

  5. 我的MYSQL学习心得(十一)

    原文:我的MYSQL学习心得(十一) 我的MYSQL学习心得(十一) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYS ...

  6. 初创互联网公司简明创业指南 - YC新掌门Sam Altman

    本文只是一个创业指南的简明版 - 更详细的版本请查看:http://startupclass.samaltman.com 创业之前,你更应该去拥有一个好的创意,而不是一个公司.如果开始前你拥有一个好的 ...

  7. NET中异常处理的最佳实践

    NET中异常处理的最佳实践 本文翻译自CodeProject上的一篇文章,原文地址. 目录 介绍 做最坏的打算 提前检查 不要信任外部数据 可信任的设备:摄像头.鼠标以及键盘 “写操作”同样可能失效 ...

  8. SQL_修改表结构

    ***********************************************声明*************************************************** ...

  9. 使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题

    原文 使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题 最近帮客户写了一个.net商城网站的发布接口,大家都知道.net一般都使用MSSQL数据库,但鱼丸不会. ...

  10. SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

    原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...