目录
Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet技术的核心是Servlet接口,定义了Servlet与Servlet容器之间的契约,Servlet容器将Servlet类载入内存,生成Servlet实例并调用它具体的方法,所以它是所有Servlet类必须直接或者间接实现的一个接口。
Servlet接口:只负责定义Servlet程序的访问规范;
GenericServlet抽象类:实现了Servlet接口,做了很多空实现,并持有一个ServletConfig类的引用,并提供了一些ServletConfig的使用方法;
HttpServlet抽象类:实现了service方法,并实现了请求分发处理;
在Servlet API中最重要的是Servlet接口,所有Servlet都会直接或间接的与该接口发生联系,或是直接实现该接口,或间接继承自实现了该接口的类。该接口中包括以下5个方法:
负责响应用户的请求,当容器接收到客户端访问Servlet对象的请求时就会调用此方法。
容器会构造一个表示客户端请求信息的ServletRequest对象和一个用于响应客户端的ServletResponse对象作为参数传递给service()方法,在service()方法中可以通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse
Servlet实例化后,Servlet容器调用该方法完成Servlet的初始化工作
获取Servlet对象的配置信息
返回包含Servlet对象的配置信息
负责释放Servlet对象占用的资源,当服务器关闭或者Servlet对象被移除时会销毁Servlet对象,此时会调用此方法
GenericServlet抽象类使编写Servlet变得更容易。它提生命周期方法init和destroy的简单实现,要编写一般的Servlet,只需要重写service方法即可。 ?
HttpServlet是在继承GenericServlet的基础上进一步的扩展。提供将要被子类化以创建适用于Web站点的HTTP servlet的抽象类
HTTPServlet的子类至少必须重写一个方法,该方法通常是:
}
@Override
public String getServletInfo() {
//获取Servlet的详细信息
//没有执行
System.out.println("getServletInfo方法执行");
return null;
}
@Override
public void destroy() {
//当tomcat关闭的时候,执行销毁这个servlet的方法
System.out.println("destroy方法执行");
//只有当tomcat关闭的时候,才会执行这个方法
}
}
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/*
* 第二种方式:继承GenericServlet
*
* */
@WebServlet("/test2")
public class Servlet2 extends GenericServlet {
//只有一个方法是必须重写的,抽象方法
//为什么?service是核心方法,因为请求和响应就是执行这个方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//解决中文乱码问题
servletResponse.setContentType("text/html;charset=utf-8");
servletResponse.getWriter().append("我是第二种创建Servlet的方法");
}
}
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test3")
public class Servlet3 extends HttpServlet {
//因为在前端的时候,有两种请求方式get和post
//doGet和doPost方法写在了Service方法中了
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().println("我是HttpServlet创建的Servlet");
}
}
最好的方式是继承HttpServlet
1.可以减少对其他方法的要求 init destroy
2.可以根据前端的要求进行分门别类 doGet doPost