簡單的servlet的實現之Hello實現原理

簡單的servlet介紹:java

javax.servlet.Servlet接口:任何的Servlet必須實現的接口(被容器調用)
void init(ServletConfig config):初始化一個Servlet時會被調用
void service(ServletRequest req,ServletResponse resp):針對用戶的每一次請求,此方法都會被調用
void destroy():當一個Servlet對象被摧毀時,調用該方法。web


代碼:瀏覽器

ServletDemo1.javatomcat

public class ServletDemo1 extends HttpServlet {

    public ServletDemo1(){
        System.out.println("調用了默認構造方法");
    }
    public void init(ServletConfig config){
        System.out.println("調用了初始化方法");
    }
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        String data="Hello servlet";
        ServletOutputStream outputStream = res.getOutputStream();
        outputStream.write(data.getBytes());
        outputStream.close();
    }
    public void destroy(){
        System.out.println("調用了銷燬方法");
    }
}app

web.xmlurl

<?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">
  <display-name></display-name>    
  <servlet>
      <servlet-name>ServletDemo1</servlet-name>
      <servlet-class>cn.itxx.ServletDemo1</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>ServletDemo1</servlet-name>
      <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

編寫好這麼多就能夠發佈了到tomcat運行了xml

訪問:http://http://localhost:8080/Hello/hello對象

瀏覽器會輸出接口

Hello servlet內存

原理:到這裏咱們會想這是怎麼實現的?

這裏用到了反射機制

首先咱們訪問http://localhost:8080/Hello/hello,進入tomcat中,找到項目Hello應用,這個加載的同時也會加載web.xml。

在有Hello應用查找hello,在加載的web.xml中找url-parttern,最後加載該類,並實例化。

在加載類的同時其實就是用的反射機制。

加載類,並實例化代碼實現:Class.forName("cn.itxx.ServletDemo1").newInstance();


最後有一點就是,當Servlet對象的實例:用於第一次使用時建立,並完成初始化。之後就駐留在內存中了。當應用被卸載,或者Tomcat中止了,destroy纔會被調用。

相關文章
相關標籤/搜索