第二章编写与设置Servlet
目录
1、关于HttpServlet
注意到HelloServlet.Java中import的语句区段:
如果要编译HelloServlet.java,则类路径(Classpath)中必须包括Servlet API的相关类,如果使用的Tomcat,则这些类通常是封装在Tomcat目录的lib子目录中的servlet-api.jar。假设HelloServlet.java位于Src目录下,并放置于对应包的目录中,则可以像以下这样进行编译:
注意下划线部分必须修改为实际的目录位置,编译出的.class文件会出现classes目录中,并有对应的包层级(因为使用javac时加了-d自变量)。
2、使用@WebServlet
编写号Servlet之后,接下来要告诉Web容器有关于这个Servlet的一些信息。在Servlet3.0中,可以使用标注(Annotation)来告知容器有哪些Servlet会提供服务以及额外信息。
使用web.xml
3、文件组织与部署
- WEB-INF:这个目录名称是固定的,而且一定是位于应用程序根目录下。放置在WEB-INF中的文件或目录,对外界来说是封闭的,也就是客户端无法用HTTP的任何方式直接访问到WEB-INF中的文件或目录。若有这类需要,则必须通过Servlet/JSP的请求转发。不想让外界存取的资源,可以放置在这个目录下。
- web.xml:这是Web应用程序部署描述文件,一定是放在WEB-INF根目录下,名称一定是web.xml
- lib:放置JAR文件的目录,一定是放在WEB-INF根目录下,名称一定是lib。
- classes:放置编译过后.class文件的目录,一定是放在WEB-INF目录下,名称一定是classes。编译过后的类文件,必须有与包名称相符的目录结构。
4、进阶部署设置
1、URL模式设置
一个请求URI实际上是由三个部分组成的:
requestURI = contextPath + servletPath + pathInfo
(1)环境路径
可以使用HttpServletRequest的getRequestURI()来取得这项信息,其中contextPath是环境路径(Context path)。是容器用来决定该挑选哪个Web应用程序的依据(一个容器可能部署多个Web应用程序),环境路径的设置方式标准中并没有规范。
一旦决定是哪个Web应用程序来处理请求,接下来就进行Servlet的挑选,Servlet必须设置为URL模式,可以设置的格式分别说明如下。
- 路径映射(Path mapping):以“/”开头但以“/*”结尾的URL模式
- 扩展映射(extension mapping):以“*.”开头的URL模式。
- 环境根目录(Context root)映射:空字符串""是个特殊的URL模式,对应至环境根目录,也就是“/”请求,但不用于设置<url-pattern>或urlpattern属性。
- 预设Servlet:仅包括“/”的URL模式,当找不到适合的URL模式对应时,就会使用预设Servlet。
- 完全匹配(Exact match):不符合以上设置的其他字符串,都要作路径的严格对应。
5、Web目录结构
一个Web应用程序基本上会由以下项目组成:
- 静态资源(HTML、图片、声音等)
- Servlet
- JSP
- 自定义类
- 工具类
- 部署描述文件(Web.xml等)、设置信息(Annotation等)