文档章节

源码编译EWeb4J整合Jetty热加载搭建教程

自风
 自风
发布于 2012/12/24 20:50
字数 1305
阅读 3618
收藏 62

        本文介绍了使用 eclipse+maven+jetty+eweb4j来打造一个非常高效率的Java Web开发环境。一旦搭建起来,无需重复的mvn install命令,无需重复的重启服务器,你所需要做的仅仅是编辑源码,刷新浏览器就可以看到最新的代码变化。有了Maven,你的jar依赖再也不是问题,但是单纯maven,如果修改源码,总是需要进行install,实在是有够让人讨厌,加了jetty插件让你远离这个烦恼,单纯的 servlet开发,需要你继承一个类,配置xml 路由,单元测试麻烦,访问数据库更加麻烦,加了 eweb4j,对这一切 你将感到非常轻松,无需继承父类,无需实现接口就可以享受SSH的MVC、ORM、IOC,朋友,来试试吧?


=================== 2013-03-12 11:08 修改====================
解决windows 下 jetty的静态资源锁定问题:

  • 先找到 .m2/maven/repository/org/eclipse/jetty/jetty-webapp/{版本号}/ 里面的jar包
  • 打开jar包之后找到那个 org/jetty/webapp/webdefault.xml 文件
  • 拷贝到maven项目的src/main/resources目录
  • 编辑该文件修改useFileMappedBuffer的配置,修改true为false,保存
  • 编辑pom的jetty plugin的配置:
    <!-- jetty plugin configuration -->
    <plugin>
     <groupId>org.mortbay.jetty</groupId>
     <artifactId>jetty-maven-plugin</artifactId>
     <configuration>
       <webAppConfig>
          <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
        </webAppConfig>	          
      </configuration>
    </plugin>
    保存
  • 关掉jetty,重新 mvn jetty:run 即可

=======================================================================

1、要求


    a) 装好 maven 插件的 Eclipse

    b) Cmd命令行可以执行mvn命令(可选)

    c) 网络通畅

2、搭建步骤

    a) 从 Github里面下载最新的EWeb4J项目并本地构建

        i. 打开 https://github.com/laiweiwei/eweb4j-framework 

        ii. 点击 ZIP 下载

        iii. 下载之后解压到某个目录下


        iv. 打开cmd命令行,到该目录执行mvn install -Dmaven.test.skip=true

        v. 等待构建成功

    b) 打开eclipse,新建一个Maven jee5 项目



   c) 编辑pom.xml,添加eweb4j依赖

    d) 编辑pom.xml,添加jetty插件

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.8.v20121106</version>
    <configuration>
        <stopKey>stop</stopKey>
        <stopPort>5599</stopPort>
        <webAppConfig>
            <contextPath>/</contextPath>
        </webAppConfig>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <connectors>
            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <port>8090</port>
                <maxIdleTime>60000</maxIdleTime>
            </connector>
        </connectors>
    </configuration>
</plugin>

    e) 运行jetty server

        这里可以用eclipse来运行,也可以在cmd下运行,笔者比较喜欢在cmd下运行

        mvn jetty:run

    f) 打开浏览器测试访问index.jsp

        这说明服务器启动成功了,也可以访问index.jsp了,接下来开始集成eweb4j框架

        注意,以下过程无需重启服务器!也无需执行maven的任何命令,你所要做的,就是编辑源码 :)

    g) 编辑web.xml,添加EWeb4J框架Filter

<!-- eweb4j -->
<filter>
    <filter-name>EWebFilter</filter-name>
    <filter-class>org.eweb4j.mvc.EWebFilter</filter-class>
    <init-param>
        <param-name>StartFileName</param-name>
        <param-value>start.xml</param-value>
    </init-param>
    <init-param>
        <param-name>CheckStartFileExist</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>ConfigBasePath</param-name>
        <param-value>${RootPath}/WEB-INF/classes/</param-value>
    </init-param>
    <init-param>
        <param-name>BaseURLKey</param-name>
        <param-value>BaseURL</param-value>
    </init-param>
    <init-param>
        <param-name>ReqParamMapKey</param-name>
        <param-value>ReqParamMap</param-value>
    </init-param>
    <init-param>  
        <param-name>ForwardBasePath</param-name>
        <param-value>/</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>EWebFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- eweb4j -->

        注意新增了CheckStartFileExist参数,参数值设置为false表示不检查框架启动配置文件是否存在,这样的话如果不存在start.xml,框架也可以启动并且使用默认的配置。

        保存之后查看控制台信息,会发现这个:

        表示服务器扫描到了新的变化,并且已经加载了EWeb4JFilter类了。接下来我们来编写一个HTTP控制器类。

    h) 创建一个UserControl控制器类

    i) 打开浏览器测试访问该控制器类 /user?name=eweb4j

        可以看到,整个过程不需要重启服务器,也不需要执行maveninstall命令,就能访问最新的代码了,还是比较方便的 

        你可以继续修改源码,然后直接访问浏览器就能看到变化,如果不能马上看到变化,稍等一会儿(根据插件参数配置 ,现在是 10秒钟间隔时间,可以调整)就能看到变化。

3、进阶

    通过上面的介绍我们看到使用eclipse+jetty+maven+eweb4j开发javaweb程序的效率还是比较高的。但是由于jetty的特殊性,导致eweb4j的启动配置文件读取路径跟正常情况稍微有些不同。

    一般情况下,${RootPath}是运行期的根目录,例如 target/xxxx,但是在这里,没有进行maveninstall,因此target目录下也就没有生成项目目录,这时候,这个${RootPath}其实指向的是源码项目根目录


    因此呢,我们要创建的start.xml文件需要在源码也有一份,以后发布项目之后同步到真正的WEB-INF\classes目录下。

    为了方便框架在找不到start.xml文件的情况下能自动创建一份样本,我们需要修改web.xml的启动参数

    然后,在源码项目里面创建WEB-INF/classes目录


     接下来访问浏览器,记住,第一次的时候框架会报一个异常,再刷新下即可正常访问。然后会发现WEB-INF/classes目录下会生成一个start.xml文件

    有了这个start.xml,就可以开启ORM模块进行数据库访问,以及配置其他功能特性了。

    记住!以后开发完成后,要记得把配置文件同步到相应的目录里面哦 :) 

© 著作权归作者所有

自风

自风

粉丝 251
博文 5
码字总数 6065
作品 2
深圳
架构师
私信 提问
加载中

评论(40)

自风
自风 博主

引用来自“彭博”的评论

弄了俩小时,完成你博客上所说的所有东东,忧桑~~

- - 忧桑
彭博
彭博
弄了俩小时,完成你博客上所说的所有东东,忧桑~~
LarryKoo
LarryKoo
个人认为还是spring jpa架构比较合适现在的国情
ran
ran
嘛认可
薛衣人
薛衣人
<img src="/js/ke/plugins/emoticons/21.gif" alt="21"> xxx
自风
自风 博主

引用来自“clchun”的评论

[ERROR] \JAVA\eweb4j-framework-master\src\main\java\org\eweb4j\orm\jdbc\DataSour
ceWrap.java:[24,13] 错误: DataSourceWrap不是抽象的, 并且未覆盖CommonDataSource中
的抽象方法getParentLogger()

您应该使用了JDK7,该版本的DataSource接口增加了一个抽象方法,所以不兼容,建议暂时用回JDK6,等下个eweb4j正式版本出之后会解决这个bug :)
clchun
clchun
[ERROR] \JAVA\eweb4j-framework-master\src\main\java\org\eweb4j\orm\jdbc\DataSour
ceWrap.java:[24,13] 错误: DataSourceWrap不是抽象的, 并且未覆盖CommonDataSource中
的抽象方法getParentLogger()
自风
自风 博主

引用来自“loulley”的评论

太复杂了,个人建议还是发布到svn上面的,我们试用的话直接检出来就行,至于选择什么web服务器那就随便了

:) git比svn要方便很多哦。而且现在就托管在github上啦。
james_you
james_you
公司的网络环境实在不适合用Maven,搭私服也没有机器。看看弄下来,去掉Maven部分。
loulley
loulley
太复杂了,个人建议还是发布到svn上面的,我们试用的话直接检出来就行,至于选择什么web服务器那就随便了
持续集成和docker

现在的持续集成,因为docker技术的成熟,有了长足的进步。 记得我在以前的公司的时候,测试环境还有生产环境的发布都需要组长来发布。有时候,他忙的话,发布就会延后,特别是测试环节,直接...

miaojiangmin
2016/11/07
24
0
最近在做的一件事件编写JFinal教程《Jfinal极速开发实战》

从8月1号开始,整整一个月,初稿完成,朋友帮我第一次文字校对完成,现在正在根据波总的意见修改一些jfinal的设计原则说明 Jfinal、JfinalUIB学习交流QQ群:309647612 已经完成,前四章免费阅...

littleant
2015/08/20
0
12
Kelly/KSFramework

KEngine + SLua|XLua|ILRuntime+ Framework = KSFramework KSFramework是一个整合KEngine、SLua(或XLua、ILRuntime)的Unity 5 Asset Bundle开发框架,并为程序、美术、策划、运营提供辅助工具...

Kelly
2016/06/29
0
0
JFinal书籍《JFinal极速开发实战》正式发布

----------------------------------------------------------------------- 百度阅读地址 :http://yuedu.baidu.com/ebook/3fc54b55d5bbfd0a7956739f 前四章免费阅读,内容会持续定期更新,......

littleant
2015/09/18
4.7K
12
IDEA使用Jrebel热部署vm如何配置

maven项目,jetty做容器,使用jrebel来热部署。配置后感觉没有什么效果,每次更改java类后需要手动触发编译,然后整个项目都会重启,我理解的热部署应该是单个class完成编译后自动加载到容器...

Lucare
2016/03/06
761
2

没有更多内容

加载失败,请刷新页面

加载更多

用Python帮你上马,哪里无码打哪里

目录 0 引言 1 环境 2 需求分析 3 代码实现 4 代码全景展示 5 后记 0 引言 所谓的像素图,就是对图像做一个颗粒化的效果,使其产生一种妙不可言的朦胧感。费话不多说,先来看一张效果图。 <c...

上海小胖
12分钟前
1
0
python from import与import as 的含义

from os import makedirs, unlink, sep #从os包中引入 makedirs.unlink,sep类 from os.path import dirname, exists, isdir, splitext 从 os包中的path类中引入 dirmame exists 等方法 impo......

dillonxiao
12分钟前
1
0
【转】URL最大长度问题

今天在测试Email Ticket的时候发现在进行Mark as Read/Unread操作时,请求是通过GET方式进行的。URL中列出了所有参与该操作的Ticket Id。于是,我想起GET请求是有最大长度限制的。遂输入超长...

ZhangLG
15分钟前
0
0
Segment段

CurrentHashMap和HashMap相比支持并发操作,整个CurrentHashMap是由一个个的Segment组成的,也是就是常说的分段锁 Segment继承了重入锁ReentrantLock来进行加锁, 可以简单的把CurrentHashMa...

周慕云
16分钟前
0
0
JS Date 自定义格式化方法

JS Date 自定义格式化方法 Date 时间对象 快速 自定义格式化 定义方法 // 自定义格式化方法Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth()+1, ......

DrChenXX
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部