Servlet


servlet

Servlet被称为服务器小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。

自MVC规范出现后,Servlet的作用被明确为仅仅作为控制器使用,不在生成页面标签,也不作为视图层角色使用。

Servlet是特殊的Java类,这个类要继承HttpServlet。每个Servlet可以响应客户端的请求。Servlet提供不同的方法用于响应客户端的请求。

  • doGet: 用于响应客户端的GET请求;
  • doPost: 用于响应客户端的POST请求;
  • doPut: 用于响应客户端的PUT请求;
  • doDelete: 用于响应客户端的DELETE请求。

通常客户端的请求主要有GET和POST请求,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。如果Servlet为了响应4种方式的请求,则需要重写上面的4个方法。
一般情况下,Servlet对应所有请求的响应都是一样的。这样可以重写一个方法来代替上面的几个方法,即只要重写service()方法及可响应客户端的所用请求。

Httpservlet里的两个方法

  • init(ServletConfig config): 创建Servlet实例时,调用该方法初始化Servlet资源;
  • destroy(): 消耗Servlet实例时,自动调用该方法的回收资源。

通常这两个方法不需要重写,除了要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init()方法。如果要在销毁Servlet之前,先完成某些资源的回收,比如数据库连接等,才需要重写destroy()方法。

不用为Servlet类写构造器,如果需要初始化Servlet,应将初始化操作放在Servlet的init()方法中定义。如果重写了init(ServletConfig config)方法,则应在重写该方法的第一行调用super.init(config),该方法将调用HttpServlet的init方法。

使用Servlet示例

package com.afy.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServletDemo extends HttpServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("=========init without parameters=======");
        super.init();
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("=========init with parameters=======");
        super.init(config);
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("========= service =======");
        PrintWriter pw = response .getWriter();
        pw.println("Hi there,would you wanna play a game?");
        pw.close();
    }

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

}

Servlet类继承了HttpServlet类,表明它可以作为Servlet使用。其中定义了service方法来响应用户请求,通过HttpServletRequest获取客户端的form请求参数与,并显示请求参数的值。
Servlet与JSP相比:

  • Servlet中没有内置对象,原理JSP中的内置对象都必须有程序显式创建;
  • 对应静态的HTML标签,Servlet都必须使用页面输出流逐行输出。

JSP是Servlet的简化,使用JSP只需程序员输出到客户端的内容,至于JSP脚本如何嵌入一个类中,则有JSP容器完成。而Servlet是个完整的Java类,这个类的service()方法用于生成对客户端的响应。
普通Servlet类里的service方法的作用等同于JSP生成Servlet类的_jspServlet()方法。

Servlet的配置

写好的Servlet源文件不能响应用户的请求,必须将其编译成class文件。一般.class文件放在WEB-INF/classes路径下

要Servlet响应用户请求,必须将Servlet配置在Web应用中。配置Servlet一般是在web.xml文件中操作的。
Servlet3.0开始,配置Servlet有两种方式

  • 在Servlet类中使用@WebServlet注解进行配置;
  • 通过web.xml文件配置

Servlet_第1张图片

未完,待续…

你可能感兴趣的:(java,servlet)