简单的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才会被调用。

相关文章
相关标签/搜索