web项目结构
WEB-INF
:位于应用程序根目录下,内部对外界封闭,客户端无法使用HTTP直接访问到内部的文件或目录,只能通过Servlet/JSP的请求转发(Forward)web.xml
:web项目部署描述文件,位于web-inf根目录下lib
:存放jar文件的目录,位于web-inf根目录下classes
:编译后的.class文件,位于web-inf根目录下
项目打包命令——项目目录FirstServlet
jar cvf ../FirstServlet.war *
URI的实际组成
requestURI = contextPath + servletPath + pathInfo
1,requestURI可以通过httpServletRequest的getRequestURI( )
来获取
2,contextPath 环境路径(Context path)
这个可以通过httpServletRequest的getContextPath( )
来获取
3,servletPath指Servlet路径不包括路径信息(Path info)与请求参数(Request parameter)
这个可以通过httpServletRequest的getServletPath( )
来获取
- /hello.do——>servletPath=/hello.do
- /servlet/*——>servletPath=/servlet
- /*或者""——>servletPath=空字符串
4,pathInfo路径信息(Path info),不包括请求参数,指的是不包括环境路径与Servlet路径部分的额外路径信息
这个可以通过httpServletRequest的getPathInfo( )
来获取,没有额外路径信息则为null
(扩展映射,预设Servlet,完全匹配的情况下,getPathInfo会取到null),如果存在,则是一个以/
开头的字符串。
访问Jar包中的页面
在jar文件的/META-INF/resources 目录中放置静态资源或jsp等,访问时项目找不到对应文件则会从jar中的resources中寻找
当项目中找不到某类文件时会从项目的依赖jar中寻找,如果依然找不到则会在容器存放类和jar的目录中寻找(如:tomcat的lib)
通过程序控制取得/WEB-INF
中的资源,可以使用ServletContext的getResource( ) 和getResourceAsStream( ),或是通过RequestDispatcher请求调派
如果web应用程序的URL最后以/
结尾,而且确实存在该目录,则Web容器必须传回该目录下的欢迎页面,web.xml中的配置
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
web-fragment.xml
这个感觉挺黑科技的!回头看