EasyJWeb入门手册范本_第1页
EasyJWeb入门手册范本_第2页
EasyJWeb入门手册范本_第3页
免费预览已结束,剩余18页可下载查看

下载本文档

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

文档简介

1、?EasyJWeb入门手册作者: 本站会员来源:easyjf发布时间:2007-10-12 16:04:00?-、简介EasyJWeb是基于java技术,应用于 WEB用程序快速开发的 MVC!架,框架设计 构思来源于国内众多项目实践,充分借签了当前主流的开源Web框架(Struts、JSF、Tapestry 、Webwork),吸取了其优点及精华,利用Velocity 作为模板页面引擎,是一个实现了页面及代码完全分离的MVC开发框架,是一个旨在为中小型Web应用系统提供快速开发实践的简易Web框架。(为了能让用户快速地掌握并使用EasyJweb框架,在开发 EasyJWeb的同时开发了 Ea

2、syJWeb Tools。)通过 EasyJWeb Tools提供的配套开发工具,可以实现基 于EasyJWeb框架的Web应用项目快速开发,包括常用应用软件的代码自动生成、数据库添删改查(CRUD代码生成、自动页面模版生成、配置文件管理等。框架特点:1、 零配置文件支持。以前我们每接触一个框架,开始总是被他的配置文件折腾 一番。EasyJWeb实现零配置支持,可以不写一句配置文件就在框架基础上构建你的 应用。(适合小型网站系统)。2、 简易的模板页面设计支持。放弃使用jsp,使用简单 Velocity 脚本语言作 为页面模板。3、 页面程序完全分离。实现显示页面与程序逻辑的完全分离,克服了传

3、统jsp 页面难于维护的问题。4、 基于页面组件的框架。灵活的页面组件配置,可以直接通过配置文件设置字 段及表属性的事件等。5、 快速开发支持。通过EasyJWeb Tools,可以自动生成应用软件模板代码,定制并管理自己的 J2EE代码模板,代码生成模板扩展支持最流行的实用Java开发框架(如hibernate、Spring等),实现快速开发。EasyJWeb的MVC框架简单流程图二、环境需求三、安装配置 EasyJWeb获取 EasyJWeb SDKEasyJWeb是一个开源项目,你可以从EasyJF官方网站下载。下载地址:。其中,EasyJWebX_src.zip 为源代码,EasyJW

4、ebX_lib.zip 为编译后的jar包及运行EasyJWeb所需要的基本包。安装EasyJWeb只是一个 Web应用程序MVC框架,其主要作为一般应用程序的基础框 架,是以一个jar文件的形式伴随在用户的Java Web程序中执行,不需要进行专门的安装操作。只需要把easyjweb.jar 文件及附属文件(lib中的所有jar文件)拷到 java web应用程序类路径中即可。我们一般是放到Web应用程序目录的 Web-inflib 目录下,也可以拷到 TomcatCommo nlib目录下,这样使得所有 Tomcat Web应用程 序都可以使用EasyJWeb我们推荐放到 web-infl

5、ib目录下,这样可以使得你不用理会具体的Web应用服务器.当开发EasyJWeb应用的时候,只要把EasyJWeb.jar包导入到工程中即可执行应用程序 的调试及测试等工作。配置web.xml文件EasyJWeb是一个Web应用程序的核心骨架,为了能在浏览器中访问EasyJWeb应用程序,需要配置应用程序中的web.xml文件,使得用户的 Web应用程序知道何时使用EasyJWeb应用程序处理用户请求。只有通过配置 Web应用程序中的 web.xml文件,才能使得EasyJWeb能正常的使 用。EasyJWeb应用程序默认以.ejf为扩展名,在用户地址栏中输入与.ejf结尾URL 路径的时候,

6、为了使得EasyJWeb能处理用户的请求,需要在web.xml文件中加如下的配置信息:<servlet ><servlet-name >easyjf servlet-name >><load-on-startup >1load-on-startup >servlet ><servlet-mapping ><servlet-name >easyjf servlet-name ><url-pattern >*.ejf url-pattern >servlet-mapping >由于 J

7、ava 是外国人发明的,其以 unicode 为默认编码,并且很多 Java Web 应 用服务器也是泊来之品。因此我们在进行Java Web应用开发的时候经常会遇到中文 字符处理的问题。比如显示在页码上的中文信息成乱码、或者保存到数据库的变成 乱码等。因此,为了让 Java Web应用能更好的处理中文,EasyJWeb默认情况下使用 utf-8 作为标准编码。这样需要通过在 web.xml 文件加入下面的设置,使得转码 程序能正确运行,显示正确的文字字符。<filter ><filter-name >CharsetFilter filter-name >>

8、<init-param ><param-name>encoding param-name><param-value >UTF-8param-value >init-param ><init-param ><param-name>ignore param-name><param-value >true param-value >init-param >filter ><filter-mapping ><filter-name>CharsetFilterfilt

9、er-name><url-pattern>/* url-pattern>filter-mapping >这样,一个基于EasyJWeb的Java Web应用程序的 web.xml文件全部内容如下:xml version ="1.0" encoding ="UTF-8" ?><web-app version ="2.4" xmlns=""xmlns:xsi =""xsi:schemaLocation =""><servlet

10、 ><servlet-name >easyjf servlet-name >><load-on-startup >1load-on-startup >servlet ><servlet-mapping ><servlet-name >easyjf servlet-name ><url-pattern >*.ejf url-pattern >servlet-mapping ><servlet-mapping ><servlet-name >easyjf servle

11、t-name ><url-pattern >/ejf/* url-pattern >servlet-mapping ><filter ><filter-name >CharsetFilter filter-name >><init-param ><param-name>encoding param-name><param-value >UTF-8param-value >init-param ><init-param ><param-name>igno

12、re param-name><param-value >true param-value >init-param >filter ><filter-mapping ><filter-name>CharsetFilterfilter-name ><url-pattern >/* url-pattern >filter-mapping >web-app>若 web.xml 文件配置成功,并把EasyJWeb.jar 文件及相关 jar文件拷到了web-inflib目 录 下 , 启 动 Web 用 户

13、服 务 器 。 在 地 址 栏 中 随 便 输 入http:/localhost:8080/hello.ejf类似以.ejf 为扩展名的地址。则会得到一个如下的EasyJWeb错误反馈提示信息:友情提示!frameworkExceptio n:没 有 找 到 处 理 模 板 的类:详细请查询 如下图所示:虽然提示框架错误,但既然有了EasyJWeb字眼,这即表示您的 EasyJWeb应用程序已经配置成功,下一步就是开始激动人心的EasyJWeb应用开发了。若没能正确的配置 Web.xml,当用户在地址栏中输入EasyJWeb应用程序扩展名的*.ejf 时候,将会产生404的错误提示。如下图所示

14、:编辑 d, at(v)收廉工HQ 制肋®U 口 -1-;收n:義护 * 二.Hi 址 0 pj hup如 11ahttp Status 404-/hello.ejf7*5惜po吒C5CT1ptioTh©熄口11冒北总曲畑站urtE "ReIo.曲门ts not詁Oita创包Rpac辰 Ij>rrKa1/&-0.10四、快速入门与示例4.1、EasyJWeb版的 Hello World !下面,我们以一个老掉牙的示例 "Hello World!" 来开始EasyJWeb的应用程序, 我们这里把"Hello World!&

15、quot;改成”喂,您好,EasyJWebl.0发布了,请支持国产开源 项目!",另外还将显示一个系统当前的时间。第一步,建立java代码程序目录:在您的源代码目录下,建一个如下的目录comeasyjwebaction 。第二步,写 EasyJWeb Action helloAction .java :在comeasyjwebaction 目录下建一个名为 helloAction.java的文件。内容如下:public class HelloAction implements IWebAction public Page execute(WebForm form, Module mo

16、dule) throws Exception form.addResult( "msg" , " 喂,您好, EasyJWeb1.0 发布了,请支持国产开源 项目! ”); /设置V0对象msg的值。form.addResult( "time" , new Date(); / 设置 VO对象 time 的值为当前时间return new Page( "hello" , "/hello.html" );写完后通过使用命令行的 javac 或者编译工具编译 helloAction.java 。若对 java的

17、编译不熟悉,请先跳到后面的EasyJWeb应用开发指南章有关工具使用的 介绍,或者直接执行 EasyJWeb 的示例程序中的 helloAction.class 拷到您的 web-infclassescomeasyjwebaction目录下即可。第三步,建立EasyJWeb显示页面模板文件用记事本在 /web-inf/easyjweb/ 建一个名为 hello.html 的文件, 注意保存的时 候请选择 utf-8 编码 ,helllo.html 文件的全部内容如下:<html ><head><title >我的第一个EasyJWeb程序界面title &g

18、t;<meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" > head> <body>$!msg <br>当前时间 :$!timebodyhtml >把文件保存为utf-8编码的操作如下所示:最后一步:启动 Tomcat并运行Hello EasyJWeb应用程序重新启动Tomcat,然后在地址栏中输入http:/localhost:8080/hello.ejf即可看到如下图所示的运行结果:接下来我们来简单介绍一下这个简单的

19、EasyJWeb应用。在上面这个应用中,我们可以看到,EasyJWeb应用主要包括两个部分:用Java实现的Action以及业务逻辑和一个Html模板(这里并不是使用的单纯的Html,还有Velocity 脚本)。这里我们简单介绍一下 Action部分,Velocity 部分请参考EasyJWeb-Velocity 脚本简 明教程,你可以通过这个地址下载该教程: 。在这个 Action 实现 IWebAction 接口,IWebAction 接口只有一个方法 execute 。 这个方法有两个参数: WebForm和Module,返回一个Page对象。WebForm负责圭寸装 用于用户端显示的

20、数据,程序对WebForm进行处理,并根据Module封装的该模块的配置信息返回一个Page对象(本例中使用的是手动创建一个Page对象,也可以通过使用module.findPage(”)方法来获取一个配置好的Page对象),告诉框架返回哪个页面。在程序中用到了WebForm的addResult方法,这个方法主要是用来添加要在客户端显示的数据。以这个程序为例,在执行了form.addResult( "time" , newDate(); 这一句之后,就可以在模板中使用 $!time 来调用这个 Date 对象。一个简单的例子,相信大家对EasyJWeb有了大概了解。好的,我

21、们再稍微深入 一点,将这个例子改造一下,实现稍微复杂一些的功能。我们在客户端增加一个文 本框,输入用户名,提交到后台处理。我们先看看模板页:<html ><head><title >我的第一个EasyJWeb程序界面title ><meta http-equiv ="Content-Type" content ="text/html; charset=utf-8">head><body><form action ="/hello.ejf" ><i

22、nput name="userName" type ="text" value ="$!userName" /><br><input type ="submit" value =" 提交 " />form >$!msg <br>当前时间 :$!timebody>html >现在我们看看修改后的 Actionpublicclass HelloAction implements IWebAction if (userName!= null

23、&&!("" .equals(userName)publicPage execute(WebForm form, Module module)throws Exception form.addResult( "msg", "" +userName+",您好,EasyJWebl.O 发布了,请支持国产 开源项目! ”); else form.addResult( "msg","喂,您好,EasyJWeb1.0发布了,请支持国产开源项目!");form.addResult(

24、 "time"new Date(););return new Page( "hello" , "/hello.html"这里多了一句"String userName = (String)form.get("userName"); ”,这里的form.get("userName")用来获取客户端表单域里的userName文本框的值。现在我们来运行一下这个例子。在客户端输入http:/localhost:8080/hello.ejf,界面如下:我们输入"friend "

25、,然后提交,会出现下面的界面:到这里,相信大家应该了解了在 EasyJWeb应用中如何获取客户端数据和向客户 端传递数据。接下来我们再深入一点,将这个例子改为用户登录并显示用户的用户 名和密码的例子,进一步的了解在 EasyJWeb中是如何将对象数据传递给客户端并显 示出来的。在这个例子中我们首先创建一个domainUser.java,代码如下:public class User private Stringn ameprivate Stringpassword;public String getName() return"tia nyi"public void setNa

26、me(String name) this . name= name;public String getPassword() return "123"public void setPassword(String password) this . password = password;然后我们看看修改后的 Action ,代码如下:public class HelloAction implements IWebAction public Page execute(WebForm form, Module module) throws Exception String user

27、Name = (String)form.get("userName" );String password = (String)form.get("passsword" );null &&uUser user =new User();if (userName!= null &&!(user.getName().equals(userName)&&password!= ser.getPassword().equals(password)form.addPo(user);form.addResult("

28、msg" , "登录成功! "); else form.addResult( "msg" , " 登录失败! ");form.addResult( "time"new Date();return new Page( "hello" , "/hello.html" );这里有一条语句 form.addPo(user) ,这天语句用来将对象 user 的每一个属性 值都传递到客户端。 执行了这条语句之后在模板中可以直接使用$!name 来显示 user的 name 属性

29、值。这里还可以这样写 form.addResult("user", user) ,然后在模板 中这样调用: $! ,$!user.password 。具体的 Velocity 用法请参考 EasyJF 官方网站上的教程。<html ><head><title>我的第一个EasyJWeb程序界面title ><meta http-equiv ="Content-Type" content ="text/html; charset=utf-8">head><

30、;body><form action ="/hello.ejf" ><inputname="userName"type ="text"/>< br><inputname="password"type ="text"/>< br><inputtype ="submit" value =" 提交 "/>form >您的用户名为: $!name<br > 您的密码为

31、:$!password <br>$!msg <br>当前时间 :$!timebody>html >在输入框中分别输入tia nyi和123,提交,返回界面如下:到这里相信大家对 EasyJWeb的基本使用方法已经了解了,下面我们将介绍EasyJWeb Tools 的用法。4.2、EasyJWeb Tools前面我们创建了一个最简单的应用Hello World ,现在我们来创建一个完整的EasyJWeb应用。在这里我们将要用到EasyJWeb Tools这个包。EasyJWeb Tools是EasyJWeb的一个重要部分。通常在Action层我们需要对客户端提

32、交的数据做判断, 进行流程控制,因此会有大量的if else语句。通过EasyJWeb Tools的业务引擎基 本模型,只要编程者按照我们的模型规范进行编程,即可去除烦琐的 if else 语句。 下面我们用一个例子来做简要说明。AbstractCmdAction 、 AbstractPageCmdAction 、 AbstractCrudAction这三个类是 EasyJWeb Tools 中 最 重 要 的 三 个 抽 象 Action 类 , 这 三 个 类 又 以 AbstractCmdAction 为基础类。AbstractCmdAction 类对 Action 命令进行封装,用于为

33、提供命令式 WebAction 的 写 法 , 用 户 直 接 调 用 , 可 以 减 少 书 写 繁 锁 的 if 语 句 。 如 果 不 使 用 AbstractCmdAction ,那么就像 struts 一样每一个操作都要写一个 Action ,开发效 率比较低。如果使用 AbstractCmdAction ,就可以在一个 Action 中执行多个操作, 只需要在客户端传递一个名为easyJWebComma n啲参数即可,AbstractCmdActio n会根据这个参数来选择执行哪个方法。假设现在客户端传递来的参数值是save,那么将会执行 doSave() 方法,其它的以此类推。A

34、bstractPageCmdAction 类 继 承 自 AbstractCmdAction 类 。 AbstractPageCmdAction 对返回的 Page 对象进行了处理, 用来支持更加灵活的参数 调用。使用这个类可以实现零配置,并且不用显示的返回Page对象,它会根据类名、命令参数值和配置好的 view 路径来自动创建一个 Page 对象。AbstractCrudAction 继承自 AbstractPageCmdAction 类, AbstractCrudAction 类中对一些常用的、通用性比较强的业务逻辑方法如简单的添删改查操作进行了封 装。如 doEdit() 方法,这个方

35、法通常用来指向一个编辑页面,通用性很高,因此做 了封装,类似的还有很多,这里不一一列举。下面我们将分别举例对这三个类的用 法进行简要讲解。这是一个数据字典的添删改查应用,这里我们对只对字典目录进行添删改查操 作。我们将分别使用这三个类来实现这个应用,比较这几个类的不同作用。现在我 们来看看使用 AbstractCmdAction 类时的 Action ,以下是 Action 的全部代码:public class SystemDictionaryAction extends AbstractCmdAction private ISystemDictionaryService service ;p

36、ublic void setService(ISystemDictionaryService service) this .service = service;public Page doList(WebForm form, Module module)QueryObject query =new QueryObject();form.toPo(query);IPageList pageList = service .getSystemDictionaryBy(query);CommUtil. saveIPageList2WebForm(pageList, form);return new P

37、age( "list" , "/news/dictionaryList.html" );public Page doAdd(WebForm form, Module module)return new Page( "edit" , "/news/dictionaryEdit.html" );public Page doEdit(WebForm form, Module module)Long id = Long.parseLong(CommUtil. null2String (form.get( "id&

38、quot; );form.addPo( this . service .getSystemDictionary(id);return new Page( "edit" , "/news/dictionaryEdit.html" );public Page doSave(WebForm form, Module module)SystemDictionary dic = form.toPo(SystemDictionary.class );this . service .addSystemDictionary(dic);return this .doLis

39、t(form, module);public Page doDel(WebForm form, Module module)Long id = Long.parseLong(CommUtil. null2String (form.get( "id" );this . service .delSystemDictionary(id); return this .doList(form, module);public Page doUpdate(WebForm form, Module module)Long id = Long.parseLong(CommUtil. null

40、2String (form.get( "id" );SystemDictionary dic =this . service .getSystemDictionary(id);form.toPo(dic);this . service .updateSystemDictionary(id, dic);return this .doList(form, module);AbstractCmdAction实现了 IWebAction ,在它的 execute 方法里边根据easyJWebComman的值来判断应该执行哪个方法。因此继承自这个类的Action就不需要再实现exec

41、ute方法,只需要编写与操作相对应的doXxxx()方法。以doSave()方法为例,当easyJWebComman参数值为save时就会执行 doSave()方法。在这个 Action中,代码已经比较简洁了,也没有了 if else语句,并且在一个Action里实现了关于 SystemDicti onary这个对象的添删改查操作。但是我们的目标是要越来越简单,越来越快捷,我们并不满足于此,接下来我们看看 AbstractPageCmdActio n 类的使用。下面同样是数据字典的添删改查操作,不同的是这个Action 继承自AbstractPageCmdAction 类,我们先看看这个 Ac

42、tion 的代码:public class SystemDictionaryActionextends AbstractPageCmdAction privateISystemDictio naryServiceservicepublic void setService(ISystemDictionaryService service) this . service = service;public void doList(WebForm form, Module module)QueryObject query =new QueryObject();form.toPo(query);IPag

43、eList pageList = service .getSystemDictionaryBy(query);CommUtil. saveIPageList2WebForm(pageList, form);public void doEdit(WebForm form, Module module)Long id = Long.parseLong(CommUtil. null2String (form.get( "id" );form.addPo( this . service .getSystemDictionary(id);public void doSave(WebF

44、orm form, Module module)SystemDictionary dic = form.toPo(SystemDictionary.class );this . service .addSystemDictionary(dic);public void doDel(WebForm form, Module module)Long id = Long.parseLong(CommUtil. null2String (form.get("id" );this . service .delSystemDictionary(id); public void doUp

45、date(WebForm form, Module module)Long id = Long.parseLong(CommUtil. null2String (form.get( "id" );SystemDictionary dic = this . service .getSystemDictionary(id);form.toPo(dic);this . service .updateSystemDictionary(id, dic);AbstractPageCmdAction 类继承自 AbstractCmdAction ,这个类里边重写了 execute 方法,

46、它先调用父类的 execute 方法,然后对父类的 execute 方法返回的 值进行判断,如果为空并且easyJWebComman参数值不为空,就会根据调用的 Action 类的名字和easyJWebComman参数的值来创建一个 Page对象返回给框架。这个 Action 与前一个 Action 相比,可以看出来, 所有的 doXxxx() 方法都是 void 的了,不再 return 一个 Page 对象了。这就是 AbstractPageCmdAction 的作用,它 会根据你调用的 Action 类的名字和客户端提交进来的命令参数的值自动创建一个 Page对象,从而实现零配置,开发人员可以专注于业务逻辑,不用再关心流程控制。这样一来开发是不是又变得简单了一些、快捷了一些?但是我们的目标是不断前进 的,我们不会满足现状,我们要越来越快。好的,激动人心的时刻到来了,前面我们讲解的两个类虽然使开发已经很方便 了,但是我们可以看到, Action 中还充斥着大量的 form.get() 、form.add

温馨提示

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

评论

0/150

提交评论