传智播客Servlet学习,Servlet的映射,注册和运行

来源:互联网 发布:java基础知识面试 编辑:程序博客网 时间:2024/05/29 11:44

  今天继续学习Servlet,跟张老师学了Servlet的映射,还有注册和运行,Servlet激活器。 张老师讲的动手与实践,跟着做了一遍,巩固了servlet的注册和运行。
   servlet映射的细节
    同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
   在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映射的匹配原则
  当同一个Servlet被映射到多个URL上时, servlet引擎会调用最接近请求url的对外访问url所映射的servlet,*.do的优先级最低。
  Servlet的注册和运行
     Servlet程序必须通过Web服务器和Servlet引擎来启动运行。Servlet程序要存储在<Web应用程序目录>/WEB-INF/classes/目录中。Servlet程序必须在Web应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。对于编写web.xml文件,最好先参考已有的例子,进行模仿。可以参看Tomcat自带的examples应用程序中的web.xml文件的相应部分。最好是使用负责和粘贴的方式复制,然后对其进行适当的修改。
   我们的访问url要与Servlet映射中设置的url大小写一致,否则,浏览器会显示找不到请求资源。
  Tomcat5.0以上的版本,修改web.xml后,会自动加载,不用重启Tomcat。
  Servlet映射中设置的对外访问Url,“*.扩展名”格式中的"*"前面不能有目录分隔符,否则是无效的映射路径。
 <welcome-file-list>用于设置web应用程序的目录默认网页文档。这是因为目录默认网页文档是对各级目录都有效的,那么在<welcome-file>元素设置的默认网页文档就不能出现目录分隔符“/”。
Servlet激活器,学习它可能没有什么用,不过可以开阔知识视野,了解Servlet更多的应用。必须使用Tomcat4.x版本的Web服务器,Tomcat提供了一些servlet的例子程序,他们存储在<Web应用程序目录>webapps/examples/WEB-INF/classes/目录中,但是打开examples这个Web应用程序的web.xml文件,在里面找不到例子Servlet的注册信息。这就很难理解这些例子Servlet的访问路径和servlet引擎对这些例子servlet的访问请求的处理。
   我们可以查看到Tomcat提供的第一个标题为Hello World的例子程序的url如下:
http://localhost:8080/examples/servlet/HelloWorldExample,查看所有Servlet例子程序的访问路径,可以总结他们的访问路径格式如下:
  
http://localhost:8080/examples/servlet/(servlet名称)
在web.xml文件中可以找到下面的映射:
   <servlet-mapping> 
      <servlet-name>invoker</servlet-name>
      <url-pattern>/servlet/*</url-pattern>
 </servlet-mapping> 
这说明会调用一个注册名称为invoker的Servlet。可是在web.xml文件中根本找不到这个Servlet的注册。还有一点要注意,一个web应用程序的部署描述除了包含在该应用程序内部的web.xml文件中,还包含<tomcat主目录>/conf目录下的web.xml文件中的全局设置信息,在<tomcat主目录>/conf/web.xml文件中可以看到:
<servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
这样,如果有多个web应用程序要用到这个Servlet,我们不必在每个web应用程序中都单独注册这个servlet,而只需在web.xml文件中映射其访问路径即可。这个Servlet的作用就是激活和调用任何其他Servlet,被称为Servlet激活器。 <load-on-startup>2</load-on-startup>设置它随Tomcat的启动而加载。所以,在web应用程序中为Servlet激活器invoker映射的访问路径以"/*"结尾,即使某个Servlet程序没有在web.xml文件中注册,我们只需将Servlet激活器所映射的访问路径中的通配符(*)替换为这个Servlet的完整类名,就可以通过servlet激活器来调用这个Servlet程序。

原创粉丝点击