Head First JSP---随笔九(部署Web应用)

Web应用部署

Web应用终于到了最后的重要时刻


Web应用部署

2.1 构建Web应用的文件和目录结构,其中可能包含
1. 静态内容
2. JSP页面
3. servlet类
4. 部署描述文件
5. 标记库
6. Jar文件
7. Java类文件
8. 描述如何保护资源文件避免HTTP访问
2.2 说明以下部署描述文件元素的作用和语义
1. error-page
2. init-param
3. mime-mapping
4. servlet
5. servlet-class
6. servlet-mapping
7. servlet-name
8. welcome-file
2.3 为以下各个部署文件元素建立正确的结构
1. error-page
2. init-param
3. mime-mapping
4. servlet
5. serlvet-class
6. servlet-name
7. welcome-file
2.4 解释War文件的作用,并说明War文件的内容,以及如何构建一个War文件
6.3 编写一个语法正确的JSP文档(采用基于XML的语法)


部署的快乐

在这一章,主要考虑3个问题:

(1)你把Web应用中的东西放在那里?

静态资源放在哪里?JSP页面呢?Servlet类文件呢?JavaBean类文件呢?监听者类文件呢?标记文件呢?标记处理器类呢?TLD呢?Jar文件呢?web.xml DD呢?还有一些东西我们不希望容器对外提供,这些东西放在哪里?(还句话说,Web应用的哪些部分要得到保护,不能由客户直接访问?),另外,“欢迎”文件放在哪里?

(2)容器会在哪里找Web应用中的东西?

客户请求HTML页面时容器会到哪里查找?JSP页面呢?servlet呢?如果请求的并不是一个具体文件(比如,BeerTest.do)会怎么样?容器在哪里查找标记处理器类?容器去哪里找TLD?标记文件?Jar文件?部署描述文件?Servlet依赖的其他类?容器在哪里查找“欢迎”文件?(显然,如果这些问题你都清楚了,那么以上第一条里的问题对你来说只是小菜一碟了。)

(3)客户怎么请求Web应用里的东西?

客户要访问HTML页面的话,改在浏览器里键入什么?要访问JSP页面呢?servlet呢?如果请求的东西并不是具体文件会怎么样?哪些地方客户可以直接请求,哪些地方会限制客户直接访问资源?如果客户键入的只是一个目录的路径,而不是特定文件的路径,会怎么样?


Web应用中的东西要放在哪里?

这里写图片描述


War文件

War文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式(它实际上就是一个Jar文件)。建立War文件时,就是要把整个Web应用结构(去掉Web应用上下文目录,也就是把WEB-INF之上的一级目录去掉)压缩起来,并指定一个.war扩展名。不过,还有一个问题,如果没有包括特定的Web应用目录(例如,BeerApp),容器怎么知道这个Web应用的名/上下文呢?

这就取决于你的容器了。在Tomcat中,War文件的文件名就会成为Web应用的名字!假设你把BeerApp部署为tomcat/webapps/BeerApp之下一个正常的目录结构。要把它部署为一个War文件,需要压缩BeerApp目录中的所有内容(不过,不包括BeerApp目录本身),然后把得到的Jar文件命名为BeerApp.war。接下来将BeerApp.war文件放在tomcat/webapps目录中。Tomcat会解开War,使用War文件名创建Web应用上下文目录

在WAR文件中,可以声明库依赖性。在一个WAR文件中,可以在META-INF/MANIFEST.MF文件中声明库依赖性,这样在部署时就能检查容器能否找到应用依赖的包和类

部署后的WAR文件的样子如下:
这里写图片描述


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

部署静态HTML和JSP时,可以选择是否允许从Web应用外部直接访问。只要把文件放在WEB-INF下就能避免直接访问,或者如果应用部署为一个WAR文件,可以把不允许直接访问的文件放在META-INF下。

这里写图片描述


servlet映射

这里写图片描述
这里写图片描述


servlet映射可能是“假的”

servlet映射中的URL模式可能完全是假的(所以有的时候扫描就木得用了,因为都是同一个页面)。
这里写图片描述


有关servlet映射的重要规则

(1)容器首先查找完全匹配,再找目录匹配,再是拓展名匹配
(2)如果一个请求与多个目录<url-pattern>匹配,容器会选择最长的匹配。换句话说,如果请求/foo/bar/myStuff.do,它就会映射到 /foo/bar/ * 而不会映射到 /foo/ * 。

这里写图片描述


DD中配置欢迎文件

注意不能以斜线开头(从第一个开始,如果第一个没找到就找第二个,依此类推):
这里写图片描述

不仅仅对根目录而言!
这里写图片描述


在DD中配置错误页面

注意:必须使用完全限定名(java.lang.Exception)
这里写图片描述


在DD中配置servlet初始化

目的是:部署的时候将servlet初始化完成,可以随时调用service方法
这里写图片描述

还需要注意的(优先级):
这里写图片描述


建立一个XML兼容的JSP:JSP文档

稍作了解一下:
这里写图片描述


EJB有关的DD标记

EJB现在都不怎么用了!因为太重量级了!稍作了解!

这里写图片描述

注意点:
这里写图片描述


JNDI的DD标记

没看懂是什么意思!!
这里写图片描述


mime-mapping的DD标记

建立扩展名(extension)和一个mime类型(mime-type)之间的映射
这里写图片描述


本章完。这章只是大概的过了一遍!

猜你喜欢

转载自blog.csdn.net/qq_37340753/article/details/81451262