1. GlassFish替换Tomcat背景
用了很多年的Tomcat, 无论开发环境还是生产环境, 应该说, 大家对它还是基本满意的.不过, 也不是一点问题没有.
从开发人员的角度来说, Tomcat主要的缺点就是较弱的热部署(hot deploy)能力. 修改一个Java类, 保存后,
Tomcat会重新加载这个类, 但不久就要重新启动Tomcat才能继续开发. 在企业关键应用的场景下, 若发生急迫的程序缺陷更正,
让众多的用户停止手头的工作, 等待服务器重新启动, 显然十分不便.
类似RubyOnRails的技术框架, 其方便之处就是脚本语言不要编译, 保存后直接可以使用.Java社区显然看到了这个问题,
GlassFish v2 的热部署能力就是其主要的一个受大家欢迎的特性. 这也是我们要用 GlassFish v2 替换 Tomcat 5.x
的主要理由.
2. 使用环境
本文假设你使用下面所述的开发环境.
(1) JDK 1.5 或 1.6
(2) Eclipse IDE for Java EE Developers (3.3.1.1 M20071023-1652)
(3) 使用 com.sysdeo.eclipse.tomcat_3.2.1 插件
如果你没有使用 Eclipse 3.3.1.1 Java EE 版本, 而是正在使用其他版本, 也不影响本文所述的所有操作和效果, 只是不能借助Eclipse 启动和停止 GlassFish v2, 只能自己通过命令行进行操作.
有关用 Eclipse 3.3.1.1 Java EE 版本操作 GlassFish v2 的详细说明, 请参见 Eclipse 3.3 and GlassFish Java EE 5 integration.
3. 下载并安装 GlassFish v2
这方面的资料已经很容易从网上找到, 比较好的文章如下:
(1) 在Glassfish上部署web应用
(2) Glassfish初试
(3) 从tomcat到glashfish(glassfish的安装启动笔记)
4. 创建 Tomcat 项目
相信你一定也知道如何创建 Tomcat 项目. 本文假设你创建的 Tomcat 项目:
(1) 位于 D:/Sample 目录.
(2) Context name 为 Sample.
其他采用默认设置.
5. 为测试 GlassFish v2 的热部署能力, 创建首页JSP和Servlet Java类.
第1步: 在根目录中创建 index.jsp 文件
第2步: 在 WEB-INF\src 中, 创建一个简单的 servlet 类 SampleServlet.java,
第3步: 配置web.xml文件.
完整的Sample项目, 请参见附件.
6. 什么是 GlassFish v2 的目录部署?
用Tomcat开发时, JSP/HTML/JS/CSS 等文件, 都是修改后保存, 刷新浏览器就可以使用.为了使 GlassFish v2 达到同样的效果, 需要使用其目录部署(directory deployment)特性.
这个特性不太容易找, 因为使用象GlassFish这样的全功能应用服务器的开发人员,习惯了"编辑、编译、部署、运行"这样的步骤. 一开始, 我按照 Eclipse 3.3 and GlassFish Java EE 5 integration.
一文的指引, 发现修改JSP文件后,仍然要经历上面的部署过程. 虽然Eclipse会通过自动检测文件版本的变化,
触发Ant任务实现部署, 但仍然很浪费时间. 我们需要找到跳过"部署"的方法.在GlassFish官方论坛上发了几个帖子,
答复者的回帖没有起到什么作用, 但通过搜索论坛基本
知道这个问题已经得到了解决.
下面的文章引导我朝着正确的方向前进了一大步(非常感谢该文作者):GlassFish Auto Deployment and Hot Deployment
关于目录部署的详细说明,参见:
Sun Java System Application Server Platform Edition 9.0 Application Deployment Guide
Chapter 1 中 Deployment for Development 一节
7. GlassFish v2 的目录部署实战
第1步: 启动 GlassFish v2.
第2步: 部署 Sample 项目到 GlassFish v2, DOS窗口下执行命令:
GLASS_FISH_HOME/bin/asadmin deploydir D:/Sample
其中 GLASS_FISH_HOME 是 GlassFish 的安装目录, 命令执行完毕后,可以看到成功部署信息.
8. 体验 GlassFish v2 的热部署特性
第1步: 修改 index.jsp 文件内容, 保存后, 刷新浏览器, 你就能马上看到新的内容.
第2步: 修改 SampleServlet.java, 保存后, 等待片刻, Eclipse 已经自动编译这个类, 但 GlassFish v2 控制台中没有任何提示, 刷新浏览器, 看不到新的内容.
第3步: 现在, 在 Sample 项目根目录中创建文件名为".reload"的文件(内容为空).
第4步: 观察GlassFish v2 控制台, 可以看到重新加载信息,刷新浏览器,看到了新的内容.
第5步: 再次修改 SampleServlet.java 的内容, 保存后, 遇到和第2步同样的问题.
第6步: 再次打开 .reload 文件, 输入任意内容, 然后保存.
第7步: 再次出现与第4步同样的效果.
总结上述操作, GlassFish v2 对于非Java类的加载, 达到了和Tomcat同样的效果, 但Java类的加载, 需要通过
.reload 文件的时间戳来控制. 这种做法对开发有好处, 在调试改错时, 可以修改多个 Java 类文件, 然后让 GlassFish
v2 一次加载全部修过的类.
9. 自动化 .reload 文件时间戳刷新
上一节中, 手工打开 .reload 文件, 通过修改其内容刷新其时间戳, 这种做法太麻烦.
在 unix/linux 平台下, 通过命令 touch 刷新 .reload 文件的时间戳. 在 Window 平台, 也有人实现了
touch. 我在 CodeProject 网站找到一个 touch.exe: Touch for Windows - The Code
Project - Free Tools,很好用, 并且可以集成到 Eclipse 的工具条按钮中来执行 touch 命令(touch.exe
已经包括在附件中).
第1步: 拷贝下载的 touch.exe 到 Sample 项目根目录.
第2步: 在 Eclipse 下, 选择 Run > External Tools > Open External Tools Dialog.
第3步: 选中左侧 Program 节点, 右击, 选择New菜单项.
第4步: 在右侧出现的对话框中, 填入下面的内容
Name: SampleTouch
Main[页面]
Localtion: ${workspace_loc:/Sample/touch.exe}
Working Directory: ${workspace_loc:/Sample}
Arguments: .reload
Common[页面]
Display in favorites menu: 选中External Tools
保存后, 你可以在Eclipse的Run工具条按钮中看到新创建的项.
10. GlassFish替换Tomcat结语
用 GlassFish v2 可以完全替换 Tomcat 5.x, 在开发中它保留了 Tomcat 好的特性的。同时,给我们带来了强壮的热部署功能, 显著地提高了开发效率.
分享到:
相关推荐
人脸识别项目实战
内容概要:本文详细描述了一个完整的Web应用程序的开发过程。该项目主要采用了Hono作为服务器框架,Prisma作为ORM工具,JWT用于认证鉴权,以及一系列现代化的最佳实践确保系统的健壮性和安全性。项目初期构建了基础架构,并设置了必要的依赖和工具。在后端方面涵盖了公共API接口的设计、CRUD增删改查逻辑、用户认证和授权等功能。此外还特别关注到了API的安全保护,如输入输出的校验,跨站请求伪造CSRF的防范,XSS防御等措施;为确保代码的质量引入了代码检测(比如ESLint搭配Prettier),并建立了完善的测试框架以保障后续开发阶段的功能正确。对于可能出现的问题预先定义了一组规范化的异常响应,并提供OpenAPI文档以方便开发者理解和调用。数据存储层面上利用了关系型与非关系型数据库各自的特性,实现了数据的有效组织,最后提供了实用的脚本,可用于种子数据插入以及执行必要的初始化工作。 适合人群:面向具有一定JavaScript/TypeScript开发经验,尤其是Node.js后台服务搭建经验的中级程序员和技术团队。 使用场景及目标:这份材料非常适合那些需要快速建立安全高效的RES
【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip掌静脉识别算法源码(门禁).zip
手势识别项目实战
(参考GUI)MATLAB BP的交通标志系统.zip
人脸识别项目实战
内容概要:本文详细介绍了 C++ 函数的基础概念及其实战技巧。内容涵盖了函数的基本结构(定义、声明、调用)、多种参数传递方式(值传递、引用传递、指针传递),各类函数类型(无参无返、有参无返、无参有返、有参有返),以及高级特性(函数重载、函数模板、递归函数)。此外,通过实际案例展示了函数的应用,如统计数组元素频次和实现冒泡排序算法。最后,总结了C++函数的重要性及未来的拓展方向。 适合人群:有一定编程基础的程序员,特别是想要深入了解C++编程特性的开发人员。 使用场景及目标:① 学习C++中函数的定义与调用,掌握参数传递方式;② 掌握不同类型的C++函数及其应用场景;③ 深入理解函数重载、函数模板和递归函数的高级特性;④ 提升实际编程能力,通过实例强化所学知识。 其他说明:文章以循序渐进的方式讲解C++函数的相关知识点,并提供了实际编码练习帮助理解。阅读过程中应当边思考边实践,动手实验有助于更好地吸收知识点。
Comsol光学仿真模型:包括纳米球 柱 Mie散射多级分解 ,Comsol光学仿真模型; 纳米球; 柱; Mie散射; 多级分解,Comsol光学仿真模型:纳米结构Mie散射多级分解
永磁同步电机全速域控制高频方波注入法、滑模观测器法SMO、加权切矢量控制Simulink仿真模型 低速域采用高频方波注入法HF,高速域采用滑膜观测器法SMO,期间采用加权形式切 送前方法 1、零低速域,来用无数字滤波器高频方波注入法, 2.中高速域采用改进的SMO滑模观测器,来用的是sigmoid函数,PLL锁相环 3、转速过渡区域采用加权切法 该仿真各个部分清晰分明,仿真波形效果良好内附详细控制方法资料lunwen 带有参考文献和说明文档,仿真模型 ,核心关键词: 1. 永磁同步电机; 2. 全速域控制; 3. 高频方波注入法; 4. 滑模观测器法SMO; 5. 加权切换矢量控制; 6. Simulink仿真模型; 7. 零低速域控制; 8. 中高速域控制; 9. 转速过渡区域控制; 10. 仿真波形效果; 11. 详细控制方法资料; 12. 参考文献和说明文档。,永磁同步电机多域控制策略的仿真研究
基于蜣螂优化算法的无人机三维路径规划【23年新算法应用】可直接运行 Matlab语言 主要内容:读取地形数据,利用蜣螂算法DBO优化三维路径,目标函数为总路径最短,同时不能撞到障碍物,效果如图所示,包括迭代曲线图、三维路径图、二维平面图等等 ,基于蜣螂优化算法;无人机;三维路径规划;总路径最短;障碍物避免;Matlab语言;迭代曲线图;三维路径图;二维平面图,蜣螂算法优化无人机三维路径规划:实时避障、路径最短新应用
清华大学2024年研究生复试上机考试题.zip
南京理工大学研究生入学考试2011年复试上机试题
手势识别项目实战
这里是3501的内容,用于复习资料
异步电动机变压变频调速系统,包含六千多字的文档、框架图、Simulink仿真模型,电力拖动、电机控制仿真设计 仿真模型+报告 开关闭环对比仿真都有,资料如图所见如所得 ,异步电动机;变压变频调速系统;六千字文档;框架图;Simulink仿真模型;电力拖动;电机控制仿真设计;开闭环对比仿真;资料如图。,异步电机控制仿真系统:六千字详解与图解
人脸识别项目实战
手势识别项目实战
人脸识别项目实战
c语言学习
c语言学习