行业知识
【Servlet】——Servlet API 详解
个人主页:兜���有颗棉花糖
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 兜里有颗棉花糖 原创
收录于专栏【Servlet】
本专栏旨在分享学习Servlet的一点学习心得,欢迎大家在评论区交流讨论
目录
- 一、HttpServlet
- 二、HttpServletRequest
- 核心方法
- 代码示例1
- 如何获取query string和body(form格式)中的数据
- 获取body(json格式)中的数据
- jackon依赖的导入
- 三、HttpServletResponse
- setStatus
- setHeader
- 构造重定向响应
- 返回一个html界面
API就是一组类和方法,本文中我们学习Servlet API的三个类:HttpServlet、HttpServletRequest、HttpServletResponse。
一、HttpServlet
HttpServlet是我们编写Servlet代码用来的核心类,通过继承这个类并重写其中的方法,然后Tomcat去调用其中的代码逻辑。可以这样理解:我们这里写的代码(重写的方法)并不是我们自己手动调用手动执行的,而是将我们写地代码交给Tomcat,让Tomcat帮助我们执行调用这些代码。
核心方法如下:
- Init方法:在webapp被加载的时候会调用此方法,可以使用该方法进行初始化操作。
- destroy方法:在webapp被销毁(或Tomcat结束)的时候执行destroy方法,可以使用该方法进行收尾工作。注意:该方法不能保证一定会被调用到。
这里分为两种情况。
第一种情况:通过8005端口给Tomcat发起一个特殊的请求,然后Tomcat就关闭了(这种情况可以调用到destroy方法)。
第二种情况:直接杀***Tomcat进程,比如说通过任务资源管理器直接结束Tomcat任务进程,此时就无法执行destroy方法。
实际开发中第二种情况占多数(尤其是在Linux中),这就提醒我们不能依赖destroy方法,因为该方法不一定被调用到。
- service方法:每次收到请求会执行service方法,处理每个请求。一般会使用doXXX方法来替代service方法。
对于上述方法,浏览器只能构造Get方法,对于其它的方法浏览器并不方便构造。如果想要构造其它的请求方法,我们可以使用ajax或者postman。
实际开发中用到的最多的是Get和Post。
二、HttpServletRequest
HttpServletRequest是Java Servlet API提供的接口之一,用于表示客户端的HTTP请求。
一个HTTP请求中都有哪些信息都会在HttpServletRequest类中进行体现。当Tomcat接收到Http请求时,它将解析请求并将相关的信息填充到HttpServletRequest对象中,从而使开发人员可以方便地获取和处理这些信息。
核心方法
下图是HttpServletRequest的方法:
- URI和URL:URI是唯一资源标识符,URL是唯一资源定位符;URI用来区分不同的资源,而URL就是用来区分不同资源的一种方式。我们可以这样理解,URL是URI的实现方式。实际开发中一般会混着用。
Enumeration getParameterNames()和String getParameter(String name)
我们直到请求中可以通过一些方式把自定义数据传递到服务器中,有两种方式:
第一种方式:query string,query string是键值对结构的数据,Tomcat收到请求后就会把query string解析成Map这样的键值对。然后使用getParameter就可以根据key获取到value;而getParameterNames是拿到所有的key。
第二种方式:body:如果是通过post form表单的形式提交表单的话,此时body中也是键值对的形式(和query string一样)。
getParameterValues方法:即一个key涉及到多个value。
Enumeration getHeaderNames()和String getHeader(String name):获取到请求头中的键值对,Tomcat收到请求后也会把请求头解析成Map。getHeader是通过key拿到指定的value;而getHeaderNames是拿到所有的key。
代码示例1
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;import java.util.Enumeration;@WebServlet("/request")public class RequestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 下行代码就是为了显示告诉浏览器,浏览器拿到的内容是html resp.setContentType("text/html"); // 调用req的各个方法,把得到的结果汇总到一个字符串中,然后统一返回到桌面上 StringBuilder respBody = new StringBuilder(); // 由于下面的内容在浏览器是按照html展示的,\n在浏览器上并不是换行,所以使用
来表示换行 // 获得HTTP请求协议的版本号 respBody.append(req.getProtocol()); respBody.append("
- URI和URL:URI是唯一资源标识符,URL是唯一资源定位符;URI用来区分不同的资源,而URL就是用来区分不同资源的一种方式。我们可以这样理解,URL是URI的实现方式。实际开发中一般会混着用。
- service方法:每次收到请求会执行service方法,处理每个请求。一般会使用doXXX方法来替代service方法。