回顾一下简单JSP程序的目录结构
对于客户端来讲,JSP程序目录包括:公开目录和不可见目录(WEB-INF)两个部分。
基本的WEB APP目录
一个好的目录结构就跟一个组织良好的Classes Package一样,会让人看着很舒服。重要的是,它让你维护起来很方便,而且让其他人能看懂你的应用。
我们可以来看看下面的目录结构
root
/index.html
/travel/products.jsp
/travel/tickets/query.jsp
/help/howto.jsp
/help/faq.html
/images/*.gif
是否比都放在根目录下的方式要好呢?
WEB-INF
在每一个JSP应用目录下,我们都可以看到一个WEB-INF目录,它对于客户端是不可见的。
我们可以在其中保存不想公开的信息。
一般地:
/WEB-INF/web.xml中保存应用程序的配置信息;
/WEB-INF/classes/中保存了一些servlet和utility类;
/WEB-INF/lib/中可以放一些JAR文件。
在我们的程序中,我们可以通过ServletContext.getResource和ServletContext.getResourceAsStream
来访问这些保存在WEB-INF下的文件。
补充一点:在ServerSpecification2.4中,Web Container (tomcat,weblogic,etc.)必须先从
classes目录下装载应用的类,然后再从lib在装载jar文件。任何访问/WEB-INF/下资源的企图,
Web Container都必须返回一个404的ERROR。
更进一步
好的目录结构会还在哪些方面影响我们的web应用呢?
我们都知道是可以配置servlet mappings,既通过web.xml中<servlet-mapping>元素来决定
用户请求的URL由哪个servlet class来处理。
在mapping的配置中,<url-pattern>的指定实际上与我们的目录结构息息相关的。
我们来看看下面的例子。
在配置文件中,我们写了:
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/travel/tickets/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>/travel/*</url-pattern>
</servlet-mapping>
当用户输入了:/travel/a时,那个servlet会处理呢?Web Container会按照完全匹配-
->url path匹配-->扩展名匹配的方式来查找。因此,servlet2会被调用。
因此,大家在考虑应用时,也应该花些时间来考虑一下应用的目录结构。