Servlet

什么是Servlet?

  • Servlet是用来处理客户端请求并产生动态网页内容的Java类。
  • Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。

Servlet的体系结构

  • 所有的Servlet都必须要实现的核心的接口是javax.servlet.Servlet。
  • 每一个Servlet都必须要直接或者是间接实现这个接口,或者是继承javax.servlet.GenericServlet或者javax.servlet.http.HTTPServlet。
  • 最后,Servlet使用多线程可以并行的为多个请求服务。

GenericServlet和HttpServlet有什么区别?

  • GenericServlet类实现了Servlet和ServletConfig接口。实现了除了service()之外的其他方法,在创建Servlet对象时,可以继承GenericServlet类来简化程序的代码,但需要实现service()方法。
  • HttpServlet类继承了GeneriServlet类,为实际开发中大多数用Servlet处理 HTTP请求的应用灵活的方法。

Servlet的生命周期

  1. 加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet
  2. 创建:通过调用Servlet的构造函数来创建一个Servlet实例
  3. 初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。
  4. 处理客户请求:Servlet创建后就可以处理请求,当有新的客户端请求时,Web容器都会创建一个新的线程来处理该请求。接着调用Servlet的
    Service()方法来响应客户端请求(Service方***根据请求的method属性来调用doGet()和doPost())
  5. 卸载:容器在卸载Servlet之前需要调用destroy()方法,让Servlet释放其占用的资源。

doGet()方法和doPost()方法有什么区别?

  • doGet
    • GET方法会把名值对追加在请求的URL后面。
    • 因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。
    • 并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。
  • doPOST
    • POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。
    • 最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

什么是Servlet链(Servlet Chaining)?

  • Servlet链是把一个Servlet的输出发送给另一个Servlet的方法。
  • 第二个Servlet的输出可以发送给第三个Servlet,依次类推。
  • 链条上最后一个Servlet负责把响应发送给客户端。

如何知道是哪一个客户端的机器正在请求你的Servlet?

  • ServletRequest类可以找出客户端机器的IP地址或者是主机名。
  • getRemoteAddr()方法获取客户端主机的IP地址,getRemoteHost()可以获取主机名。

浏览器和Servlet通信使用的是什么协议?

  • 浏览器和Servlet通信使用的是HTTP协议。

posted @ 2021-01-14 15:24  张三丰学Java  阅读(104)  评论(0编辑  收藏  举报