Java Servlet学习笔记
程序员文章站
2022-05-05 16:17:31
...
Java Servlet学习笔记
Servlet的注册与运行
1. Servlet程序必须通过Servlet引擎来启动运行,并且储存目录有特殊要求,通常需要存储在<WEB应用程序目录>\WEB-INF\classes\目录中。 2. Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。 3. 一个<servlet>元素用于注册一个Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名和Selvet的完整类名。 4. 一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径 <web-app> ... ... <servlet> <servlet-name> AnyName </servlet-name> <servlet-class> HelloServlet </servlet-class> </servlet> ... ... <servlet-mapping> <servlet-name> AnyName</servlet-name> <url-pattern> /demo/hello.html </url-pattern> </servlet-mapping> ... ... </web-app> Servlet映射的细节 1. 同一个Servlet可以被映射到多个URL上,即多个<servelt-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。 2. 在Servlet映射到URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是"*.扩展名",另一种格式是以正斜杠(/)开头并以"/*"结尾。 <servlet-mapping> <servlet-name> AnyName </servlet-name> <url-pattern> *.do </url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> AnyName </servlet-name> <url-pattern> /action/* </url-pattern> </servlet-mapping> Servlet映射的最具体匹配原则 对于如下的一些映射关系: 1. /abc/* 映射到 Servlet1 优先级高 2. /* 映射到 Servlet2 优先级高 3. /abc 映射到 Servlet3 4. *.do 映射到 Servlet4 优先级低 将发生如下一些行为: 1. 当请求URL为"/abc/a.html", "/abc/*" 和"/*" 都可以匹配这个URL,Servlet引擎将调用Servlet1 2. 当请求URL为"/abc", "/abc/*" 、 "/abc" 和"/*" 都可以匹配这个URL,Servlet引擎将调用Servlet3 3. 当请求URL为"/abc/a.do", "/abc/*" 和"*.do" 都可以匹配这个URL,Servlet引擎将调用Servlet1 4. 当请求URL为"/a.do", "/*" 和"*.do" 都可以匹配这个URL,Servlet引擎将调用Servlet2 5. 当请求URL为"/xxx/yyy/a.do", "/*" 和"*.do" 都可以匹配这个URL,Servlet引擎将调用Servlet2 注册和访问Servlet程序的过程 1. 在webapps目录中创建文件夹lesson 2. 在lesson目录中创建文件夹WEB-INF 3. 在WEB-INF目录中创建文件web.xml 并创建文件夹classes 注意: URL: /action/*.xx格式有误 Servlet是不能被设置为web的默认网页文档 web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name> AnyName</servlet-name> <servlet-class>HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name> AnyName</servlet-name> <url-pattern>/demo/hello.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> AnyName</servlet-name> <url-pattern>/action/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> AnyName</servlet-name> <url-pattern> *.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> test.do </welcome-file> </welcome-file-list> 缺省Servlet · 如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servelt就成为当前Web应用程序的缺省Servlet。 · 凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,他们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。 · 在<tomcat的安装目录>\conf\web.xml文件中注册了一个名称为org.apache.catalina.servlets.DefaultServlet,并将这个Servlet设置为了缺省Servlet。 · 当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。 |