Servlet

What is a Servlet?

A servlet is a layer between the server and the client that processes the data passed by the front-end and can render the data from the database.

什么是Servlet?
Servlet是介于服务器和客户端之间的一层程序,它用来处理前端传递的数据,并且可以呈现数据库的数据。

image

The lifeCycle of a servlet

了解一下Servlet的生命周期

image

The lifecycle of a servlet mainly includes the initialization of the servlet init(), the servlet container calls service() to process the client's request, and after the request is processed, the servlet will be destroyed (the destruction process is actually the JVM garbage collection).

Servlet的生命周期主要包括Servlet的初始化init(),Servlet容器调用service()来处理客户端的请求,在处理完请求后,servlet会被销毁(销毁过程实际是JVM的垃圾回收)。

  • servlet的初始化:在第一次请求该servlet时,或者设置在容器启动时初始化servlet,在初始化过程中会有一些数据在整个生命周期中使用。
  • servlet执行任务:servlet的service()是执行请求的主要方法,servlet容器会根据请求的类型调用doGet(),doPost()等方法,我们在编写原生web程序的时候重写这些方法即可。
public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

可以看到在该方法中,我们接受请求的数据,并且把响应返回给前端。
doGet()方法:GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet()方法处理。

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}
  • servlet的销毁:在servlet生命周期结束的时候会调用destroy()方法,该方法会进行释放数据库连接、把Cookie列表写入到磁盘中、停止后台线程等操作。

了解了生命周期后,以下这个实例就很好理解了:

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class HelloWorld extends HttpServlet {
 
  private String message;

  public void init() throws ServletException
  {
      // 执行必需的初始化
      message = "Hello World";
  }

  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");

      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
      // 什么也不做
  }
}
//通过name设置类和映射的绑定
<web-app>      
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>
//设置请求路径
    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>
</web-app>  

Servlet与Servlet容器

那到底什么叫做Servlet容器呢?
Servlet容器它为其他生物提供了一个生存的环境;而Servlet则是其中的一种生物,它负责处理特定的任务

  • 当一个请求发送到Web服务器时,Servlet容器会接收这个请求,并将其传递给相应的Servlet进行处理。同时,它还负责将处理后的响应发送回客户端。
  • 一个按照Servlet规范编写的Java类,负责处理特定的业务逻辑。当Servlet容器接收到一个请求时,它会将这个请求传递给相应的Servlet进行处理。在处理完请求后,Servlet会生成一个响应对象,并将其传递回Servlet容器。然后,容器将响应对象转换成响应文本格式,并将其发送回客户端。
  • tomcat是我们经常会使用的一种JSP/Servlet容器

Controller

Spring MVC 下我们一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。
image
客户端(浏览器)发送请求, DispatcherServlet拦截请求。DispatcherServlet 根据请求信息调用 HandlerMapping 。HandlerMapping 根据 URL 去匹配查找能处理的 Handler(也就是我们平常说的 Controller 控制器) ,并会将请求涉及到的拦截器和 Handler 一起封装。DispatcherServlet 调用 HandlerAdapter适配器执行 Handler 。Handler 完成对用户请求的处理后,会返回一个 ModelAndView 对象给DispatcherServlet,ModelAndView 顾名思义,包含了数据模型以及相应的视图的信息。Model 是返回的数据对象,View 是个逻辑上的 View。ViewResolver 会根据逻辑 View 查找实际的 View。DispaterServlet 把返回的 Model 传给 View(视图渲染)。把 View 返回给请求者(浏览器)

本文作者:PostMan_Zc

本文链接:https://www.cnblogs.com/zhangcheng1234/p/18236482

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   PostMan_Zc  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起