学习Servlet

参考链接:http://www.runoob.com/servlet/servlet-tutorial.html

什么是Servlet?

答:Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。简而言之就是Web服务器收到Http请求后,就让一个个Servlet来处理其对应的请求,从而完成客户端请求的操作。

Servlet 在 Web 应用程序中的位置

web browser <==http protocol==> http server <===> servlet <===> database or other

可以很直观地看出,Servlet的任务就是从http请求中获取数据,然后做出相应的处理,有可能是操作数据库,有可能是逻辑运算等等,然后根据处理结果返回给客户端返回消息

Servlet在哪个jar包中?

答:Servlet 可以使用 javax.servletjavax.servlet.http 包创建,它是 Java 企业版的标准组成部分。

Servlet的生命周期

Servlet接口包含init()service()destroy()函数,这三个函数反映了Servlet的生命周期。

  • 初始化:Servlet初始化时会调用init()函数;
  • 处理HTTP请求:在服务器接收到HTTP请求时,Servlet通过service()函数来进行处理;
  • 销毁:在Servlet被销毁时,会回调destroy()函数(原本以为service()执行完毕就会执行destroy(),但实际测试并不是这样,Servlet容器应该是将Servlet实例缓存起来,以便后面的请求调用了,Servlet究竟什么时候会被销毁依然众说纷纭,不过我们也不必过多纠结,Servlet容器会自动帮我们管理)
  • 回收:Servlet容器不再持有该实例后,该实例会被GC回收;

在Servlet中设置一个int变量index,在service()中每次对其进行自加操作,有如下输出:

init.
service
index: 0
service
index: 1

由此可知,Servlet其实是单例的,一个Servlet实例初始化之后,Servlet容器会一直或长时间保存该实例,因此Servlet并不是线程安全的,在使用时应该注意数据的线程安全性。

一个简单的Servlet
package com.baymax.study.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.Servlet;

public class TestServlet implements Servlet{
    private int index = 0;

    @Override
    public void destroy() {
        System.out.println("destroy.");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return this.toString();
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        System.out.println("init.");
    }

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("service");
        System.out.println("index: " + index++);
    }
}
在web.xml中配置Servlet
<servlet>
    <servlet-name>testservlet-name>
    <servlet-class>com.baymax.study.servlet.TestServletservlet-class>
servlet>
<servlet-mapping>
    <servlet-name>testservlet-name>
    <url-pattern>/testurl-pattern>
servlet-mapping>

你可能感兴趣的:(Java)