标签:tom 通过 not res override 发送请求 处理 jsp pre
什么是Servlet
Servlet来自两个单词:Server和Applet,是一个在服务器上运行的Java程序。
与普通Java程序不同的是,Servlet是由服务器去调用的,可以对浏览器或者其他HTTP客户端发送的请求进行 处理,从原理上来说,Servlet可以响应任何类型的请求,但绝大数情况下是用来扩展基于HTTP协议的web服务器。
为什么要使用Servlet
Servlet可以处理请求和发送响应,使用Servlet跟浏览器交互 ,能生成动态Web内容。
tomcat和servlet的关系
tomcat是web应用服务器,是一个Servlet/JSP容器,Tomcat能够处理客户请求,把请求传给servlet,并且将servlet的响应回送给客户端。
工作模式是:
? Servlet本质上就是一个Java接口,所有Servlet类必须直接或间接实现。
? Servlet接口中定义了以下方法:
public void init(ServletConfig servletConfig) throws ServletException
public ServletConfig getServletConfig()
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException
public String getServletInfo()
public void destroy()
当用户发送请求到服务器时,服务器将使用Servlet容器调用servlet的Service()方法,并且会传入一个ServletRequest对象和一个ServletResponse对象,这两个对象都是由Servlet容器创建的,程序员不需要实现,可以直接使用。
容器将当前的请求封装在了ServletRequest对象,开发者可以不需要去解析原始的HTTP数据,直接调用封装好的方法即可,而当开发者要返回响应给客户端时,只需操作ServletResponse对象就可以了。
对于每一个应用程序,Servlet容器还会创建一个ServletContext对象,这个对象封装了应用程序的环境详情,每一个应用程序只有一个ServletContext,可以通过ServletContext获取一些信息。
? 在Web容器中,Servlet主要经历3个阶段,这3个阶段就是Servlet的生命周期,主要是init(),service()和destroy()方法,这一部分都是由Servlet容器管理的。
下面编写一个简单的Servlet来验证Servlet的生命周期:
如何创建项目可以参考另一篇文章:Idea创建JavaWeb项目以及配置Tomcat
package cap.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/TestServlet")
public class TestServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet初始化....");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet正在工作...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("Servlet正在销毁...");
}
}
这里使用了注解的方式配置访问的路径为/TestServlet.
在浏览器中访问该Servlet,控制台会输出如下信息:
第一次访问,会调用init(),再调用service(),所以会先打出“Servlet初始化..." 和"Servlet正在工作..."
然后刷新几次,只会调用service(),打印出"Servlet正在工作..."
最后当关闭tomcat后,会调用destroy(),打印出"Servlet正在销毁"
? Servlet是一个接口,在包javax.servlet.Servlet
,它的实现类是:GenericsServlet
.
? javax.servlet.GenericsServlet
是一个抽象类,有一个直接的子类:HttpServlet
.
? javax.servlet.http.HttpServlet
也是一个抽象类,继承自GenericsServlet
.
? 如下图:
GenericsServlet
:将Servlet接口中的其他方法做了默认的空实现,只将service()方法作为抽象方法,以便将来定义Servlet类时,直接继承GenericsServlet,只要实现service()就可以。
HttpServlet
:对HTTP协议做了封装,简化了操作(后面都以继承HttpServlet开发)
操作步骤:
标签:tom 通过 not res override 发送请求 处理 jsp pre
原文地址:https://www.cnblogs.com/LucasBlog/p/12715849.html