zoukankan      html  css  js  c++  java
  • Servlet的一些细节(1)

    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

  • 相关阅读:
    Netty Java原生和Netty网络的API比较
    MYSQL登录函数(第3版本)
    利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)
    UC登录功能:商户需要创建的表
    利用MYSQL的函数实现用户登录功能,进出都是JSON(第一版)
    MYSQL存储过程实现用户登录
    FreeBsd网络性能优化方案sysctl
    利用飞儿云PHP框架自带的DNSPOD库做DDNS动态域名解析
    Linux根据MAC地址自动设置IP
    在KVM里装个pfSense
  • 原文地址:https://www.cnblogs.com/tech-bird/p/3805246.html
Copyright © 2011-2022 走看看