《Head First Servlets & JSP》-11-Web应用部署

Web目录

《Head First Servlets & JSP》-11-Web应用部署

WAR文件

WAR文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式。
建立WAR文件时,就是把整个Web应用结构(去掉Web应用上下文目录,就是把WEB-INF之上的一级目录去掉)压缩起来,给定一个.war扩展名。
容器如何知道Web应用的名字/上下文呢?Tomcat中,WAR文件名就是了!
在一个WAR文件中,可以在META-INF/MANIFEST.MF文件中声明库依赖性(和直接放在WEB-INF/lib下有何区别?后文见分晓)。

部署后的WAR文件的样子

《Head First Servlets & JSP》-11-Web应用部署

使静态内容和JSP可以直接访问

META-INF或WEB-INF中的内容不可直接访问,否则产生404错误。
《Head First Servlets & JSP》-11-Web应用部署

META-INF什么用

如果类是使用WEB-INF/classes目录或WEB-INF/lib中的一个jar文件部署在Web应用中,那么这些类就能自动得到;
但是,若应用依赖某个特定版本的库,如果容器无法提供这些库,就不能成功地部署应用,那么就可以在MANIFEST.MF文件中告诉容器必须访问哪些可选的库。(不能部署应用比请求时发现错误要好得多!)
记住,容器查看WEB-INF/lib中的jar文件之前,会先查找WEB-INF/classes目录中的类。

DD中的servlet映射

《Head First Servlets & JSP》-11-Web应用部署

  • 三种url-pattern元素
    完全匹配、目录匹配和扩展名匹配:
    《Head First Servlets & JSP》-11-Web应用部署

  • 有个servlet映射的重要规则

  1. 容器会按下一页显示的顺序查找匹配。换句话说,首先查找完全匹配。如果找不到完全匹配。再查找目录匹配。如果目录匹配也找不到,就查找扩展名匹配。
  2. 如果一个请求与多个目录url-pattern匹配,容器会选择最长的远配。

在DD中配置欢迎文件

配置welcome-file-list元素,容器会从该列表的第一个欢迎文件开始:
《Head First Servlets & JSP》-11-Web应用部署

在DD中配置错误页面

  • 声明一个普通型错误页面
    这应用于Web应用中的所有资源,而不只是JSP
    《Head First Servlets & JSP》-11-Web应用部署
  • 更为明确的异常错误声明
    《Head First Servlets & JSP》-11-Web应用部署
  • 根据HTTP状态码声明错误页面
    《Head First Servlets & JSP》-11-Web应用部署

在DD中配置servlet初始化

servlet默认会在第一个请求到来时初始化,若希望在部署或服务器重启时加载servlet,可以设置load-on-startup元素。
《Head First Servlets & JSP》-11-Web应用部署
若配置多个该元素,则按照值的从小到大先后加载。

JSP文档:XML兼容的JSP页面

《Head First Servlets & JSP》-11-Web应用部署

最后看看几个最近还没用到的标记

  • 与EJB相关的DD标记
    《Head First Servlets & JSP》-11-Web应用部署

《Head First Servlets & JSP》-11-Web应用部署

  • JNDI env-entry DD标记
    《Head First Servlets & JSP》-11-Web应用部署

  • mime-mapping DD标记
    《Head First Servlets & JSP》-11-Web应用部署