博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
部署Servlet/JSP应用
阅读量:4090 次
发布时间:2019-05-25

本文共 2082 字,大约阅读时间需要 6 分钟。

部署 由发表在

Web应用部署结构

Web应用在Servlet容器中以WAR(Web Application Archive)文件格式作为部署单元。它将JSP、Servlet class、Java class、XML配置文件、静态Web资源(HTML、CSS、JavaScript、Images等等)作为整体打包为一个独立的Web应用。

我们使用Eclipse IDE开发Java Web应用,它的源代码目录结构包含srcWebContent等目录——这属于应用的代码结构,它与最终的WAR文件格式仍然存在一定的区别,例如源代码文件需要被编译为字节码文件,在WAR文件结构中,src,WebContent等用于区分源码、Web内容的目录页不复存在。

一个WAR文件实际上和传统的JAR文件是非常类似的,但它特有之处在于存在一个WEB-INF目录,该目录中包含一个web.xml文件用来描述整个Web应用结构(例如定义Servlet和URL之间的映射关系,当然如果在Servlet 3.0后使用注解可以不在web.xml里描述这部分内容)。所有符合Java EE标准的应用服务器(或Servlet容器)都支持通过WAR文件格式部署应用。

一个WAR文件结构示例:

app.war |--WEB-INF/     |--lib/     |--classes/ |--images/ |--css/ |--js/ |--templates

可以看到Servlet容器会将根目录下除WEB-INF/目录以为的内容发布,例如可以直接通过访问URL/images/访问images目录下的内容,这一部分内容包括JSP文件以及Web静态资源,所以在开发过程中我们通常会将这些内容与Java源文件区分开来(放在WebContent目录下)。

WEB-INF目录则相对特殊,除了包含Web应用描述符web.xml,还包含Java源代码编译后得到的字节码文件(.class,放在classes目录中)以及依赖的第三方库(.jar,放在lib目录中)。

只要符合标准的WAR文件都可以被应用服务器接受并部署运行,那么即时不通过IDE,我们只需要将源代码目录中的Java源代码编译为字节码文件,同时将第三方依赖以及Web静态资源放置在合适的位置,就可以组合为一个WAR文件。

IDE中的部署方式

在使用IDE的开发的过程中,可能部署到应用服务器的方式非常简单,以Eclipse IDE为例,修改源代码并保存文件后,通过Eclipse内置的WTP插件进行几次简单的鼠标点击就可以将一个项目(Dynamic Project)部署到Tomcat应用服务器并运行。实际上插件做的事情就是在上一小节中描述的Web应用部署过程。只不过我们修改完源代码后,这一切都自动构建完成,同时还添加了热部署功能更加方便我们开发调试:

  • 编辑静态文件后,插件将Tomcat下Web应用目录的相应内容直接更新,此时无需重启应用服务器
  • 编辑Java源代码后,插件重新编译Java源文件,并通知Tomcat应用服务器重新加载Web应用上下文(Context),这个操作也远比重启Tomcat节约时间。

Eclipse插件并不会将编译后的文件目录直接复制到Tomcat安装目录,而是使用当前工作空间中的目录,具体位置是${WORKSPACE_PATH}/metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/。该目录下的每一个文件夹,都是一个Web应用的部署结构,大家可以通过查看该目录下的文件内容变化来印证本节课中的知识点。

既然有了IDE能够如此方便的操作Tomcat,为什么还要去深入了解Web应用内部的部署细节机制呢?首先作为图形界面的IDE,在真正的生产环境中是不存在的,必须了解WAR文件的打包方式才能够真正将应用发布在Internet上;其次在开发过程中,仍然可能出现很多和部署相关的问题,深入了解底层机制后有利于更快速的发现问题、解决问题。

从Eclipse IDE中导出WAR文件

自己动手来得到一个WAR文件是一件繁琐且重复的事情,既然它是可重复的那我们就要想办法借助工具对打包过程进行自动化。既然Eclipse本身能够很好地完成部署工作,它自己内部一定已经实现了这套自动化的机制——没错,Eclipse对于Dynamic Web工程的打包方式默认采用的是Ant构建工具,只不过相关的自动化构建脚本被隐藏在了图形界面之下。

在Eclipse中导出当前Web应用的WAR文件进行部署也非常简单:

  1. 在左侧Project Explorer(或Package Explorer)视图中右键点击Web工程,选中弹出菜单中的Export...
  2. 在弹出新窗口的目录树种找到Web/WAR file,选中它并选择Next
  3. Destination中选择导出WAR文件的位置,点击Finish按钮后,WAR文件就会被导出至相应位置

更多文章请访问

你可能感兴趣的文章
听说玩这些游戏能提升编程能力?
查看>>
7 年工作经验,面试官竟然还让我写算法题???
查看>>
被 Zoom 逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
查看>>
上古语言从入门到精通:COBOL 教程登上 GitHub 热榜
查看>>
哈哈哈哈,「00 后黑话破解器」火爆 GitHub,这波操作我给满分!
查看>>
再见,Eclipse...
查看>>
超全汇总!B 站上有哪些值得学习的 AI 课程...
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
神器面世:让你快速在 iOS 设备上安装 Windows、Linux 等操作系统!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
GitHub 开源神器:堪称作业终结者!
查看>>
太赞了!GitHub 标星 2.4k+,《可解释机器学习》中文版正式开放!
查看>>
程序员用 AI 修复百年前的老北京视频后,火了!
查看>>
漫话:为什么你下载小电影的时候进度总是卡在 99% 就不动了?
查看>>
我去!原来大神都是这样玩转「多线程与高并发」的...
查看>>
当你无聊时,可以玩玩 GitHub 上这个开源项目...
查看>>
B 站爆红的数学视频,竟是用这个 Python 开源项目做的!
查看>>
安利 10 个让你爽到爆的 IDEA 必备插件!
查看>>
自学编程的八大误区!克服它!
查看>>
GitHub 上的一个开源项目,可快速生成一款属于自己的手写字体!
查看>>