首页 > 代码库 > 11_Servlet的一些细节知识点

11_Servlet的一些细节知识点

【Servlet的细节知识点1-----一个Servlet映射到多个URL】

同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。

如下:

[ 工程截图 ]

技术分享

[ web.xml ]

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xmlns="http://java.sun.com/xml/ns/javaee"          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"          id="WebApp_ID" version="3.0">  <display-name>HelloServlet</display-name>    <servlet>      <servlet-name>ServletDemo01</servlet-name>      <servlet-class>com.Higgin.servlet.ServletDemo01</servlet-class>  </servlet>    <servlet-mapping>      <servlet-name>ServletDemo01</servlet-name>      <url-pattern>/higgin.html</url-pattern>     <!--伪html-->  </servlet-mapping>    <servlet-mapping>      <servlet-name>ServletDemo01</servlet-name>      <url-pattern>*.do</url-pattern>    <!-- 匹配所有后缀为.do的URL -->  </servlet-mapping></web-app>

[ ServletDemo01.java ]

package com.Higgin.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//@WebServlet("/ServletDemo01")public class ServletDemo01 extends HttpServlet {    private static final long serialVersionUID = 1L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        System.out.println("ServletDemo01----doGet");        System.out.println(request.getRequestURL());  //获取客户端发出请求的URL    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

[ 运行结果 ]

1.浏览器URL输入  http://localhost:8080/HelloServlet/higgin.html

技术分享

2.浏览器URL输入http://localhost:8080/HelloServlet/adfcvsd.do (只要是.do后缀)

技术分享

 

【Servlet的细节知识点2-----通配符*】

Servlet映射到url中可以使用*通配符,但是只能有两种固定的格式:

格式一: *.扩展名                                    例子:  *.do

格式二: 正斜杠“/”开头并以"/*"结尾             例子: /action/*

 

【Servlet的细节知识点3-----在修改web.xml时,无需重启TomCat的原因】

我们打开Tomcat服务器所在的conf/context.xml

技术分享

<WatchedResource>WEB-INF/web.xml</WatchedResource>这句配置保证JavaWeb工程在web.xml被修改时,tomcat服务器会自动加载修改后的web.xml。

 

【Servlet的细节知识点4-----关于映射关系再深入】技术分享

 

【Servlet的细节知识点5-----Servlet内各个方法调用细节】

     Servlet是一个供其它java程序(Servlet引擎)调用的Java类,它不能独立运行,它的运行由Servlet引擎来控制和调度。

  针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,Servlet实例对象才会被销毁。

  在Servlet的整个生命周期内,Servlet的init方法只被调用一次。

  而对于一个Servlet的每次访问请求都导致Servlet引擎调用一次Servlet的service()方法。

  对于每次访问请求,Servlet引擎都会创建一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service()方法再根据请求方式分别调用doXXX方法。

11_Servlet的一些细节知识点