简单的servlet的实现之Hello实现原理

简单的servlet介绍:

javax.servlet.Servlet接口:任何的Servlet必须实现的接口(被容器调用)
void init(ServletConfig config):初始化一个Servlet时会被调用
void service(ServletRequest req,ServletResponse resp):针对用户的每一次请求,此方法都会被调用
void destroy():当一个Servlet对象被摧毁时,调用该方法。


代码:

ServletDemo1.java

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("调用了销毁方法");
    }
}

web.xml

<?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运行了

访问: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才会被调用。



转载于:https://my.oschina.net/lzwenme/blog/227238

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值