首页 > 代码库 > Servlet的一些细节

Servlet的一些细节

 

1.  Servlet程序必须映射到一个URL地址

 

由于客户端是通过URL访问web服务器资源,所以Servlet程序必须映射到一个URL地址。这个工作在web.xml文件中使用<servlet>元素和<servlet-maping>元素完成

<servlet>用于注册Servlet,<servlet-name>和<servlet-Class>分别用于设置Servlet的注册名称和完整类名

一个<servlet-maping>元素用于映射一个已经注册的Servlet的一个对外访问路径,子元素<servlet-name>和<url-pattern>分别指定Servlet的注册名称和对外访问路径

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"     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">    <servlet>    <servlet-name>ServletDemo</servlet-name>    <servlet-class>cn.school.ServletDemo</servlet-class>  </servlet>  <servlet>    <servlet-name>ServletDemo2</servlet-name>    <servlet-class>cn.school.ServletDemo2</servlet-class>  </servlet>    <servlet-mapping>     <servlet-name>ServletDemo</servlet-name>     <url-pattern>/ServletDemo</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>ServletDemo2</servlet-name>    <url-pattern>/servlet/ServletDemo2</url-pattern>  </servlet-mapping></web-app>


对于第一个程序,使用http://localhost:8080/D623/ServletDemo

对于第二个程序,  使用http://localhost:8080/D623/servlet/ServletDemo2

 

2. 同一个Servlet可以被映射到多个URL地址上去

  即是一个Servlet注册名可以对应多个<servlet-mapping>元素

      也就是说可以有多个地址访问同一个Servlet程序

  <servlet>    <servlet-name>ServletDemo</servlet-name>    <servlet-class>cn.school.ServletDemo</servlet-class>  </servlet>    <servlet-mapping>     <servlet-name>ServletDemo</servlet-name>     <url-pattern>/my1/ServletDemo</url-pattern>  </servlet-mapping>      <servlet-mapping>     <servlet-name>ServletDemo</servlet-name>     <url-pattern>/my2/ServletDemo</url-pattern>  </servlet-mapping>      <servlet-mapping>     <servlet-name>ServletDemo</servlet-name>     <url-pattern>/my3.html</url-pattern>  </servlet-mapping>


注意最后一个访问地址是http://localhost:8080/D623/my3.html

在地址栏中出现这样的地址看起来好像是一个静态页面,其实Selvlet是动态页面,这就是常说的伪静态

 

3. Servlet映射地址可以使用* 通配符

  但只有两种固定格式

   *.扩展名 或者 以 /* 结尾

 

  <servlet>    <servlet-name>ServletDemo</servlet-name>    <servlet-class>cn.school.ServletDemo</servlet-class>  </servlet>    <servlet-mapping>     <servlet-name>ServletDemo</servlet-name>     <url-pattern>/ServletDemo</url-pattern>  </servlet-mapping>  <servlet-mapping>    <servlet-name>ServletDemo</servlet-name>    <url-pattern>/*</url-pattern>  </servlet-mapping>    <servlet-mapping>    <servlet-name>ServletDemo</servlet-name>    <url-pattern>*.dd</url-pattern>  </servlet-mapping>


  通配符的意思是可以输入任何字符

 

注意一点,当修改web.xml时,不需要重新生成web应用,web服务器会自动监测web.xml的改动

Tomcat服务器的conf文件夹下context.xml文件有一句

   <WatchedResource>WEB-INF/web.xml</WatchedResource>


4.  最先匹配最像的路径

 如下映射关系

  Servlet1 映射到 /abc/*

  Servlet2 映射到 /*

  Servlet3 映射到 /abc

  Servlet4 映射到 *.do

 

当请求URL为 /abc/a.html 时,匹配Servlet1

当请求URL为 /abc 时,匹配Servlet3

当请求URL为/abc/a.do 时,匹配Servlet1 (*在前面的方式优先级最低

当请求URL为 /a.do 时 匹配Servlet2