Servlet中常用的三大API

HttpServlet

我们写 Servlet 代码的时候,首先第一步就是先创建类,继承自 HttpServlet,并重写其中的某些方法。Servlet中常用的三大API_第1张图片我们实际开发的时候主要重写 doXXX 方法,很少会重写 init / destory / service。

因为这一些方法的调用时机,称为“Servlet生命周期”。Servlet生命周期可被定义为从创建直到毁灭的整个过程。具体的可以看该文章:Servlet生命周期icon-default.png?t=N7T8http://t.csdnimg.cn/duZTC

通过Ajax来构造一个请求

我们先在WEBAPP目录下新建一个html文件。至于为什么要在这个目录下,这是tomcat规定的。不同的服务器有不同的规定。

Servlet中常用的三大API_第2张图片

先在html中引入一个jquery cdn的min版本的链接,再写ajax的部分。重新运行服务器就可以在控制台中看到这是一个get方法,并且通过修改type的值来修改运用的方法。

同时url就代表着路径,在这里是相对路径,也就是Servlet中常用的三大API_第3张图片

这里同时也可以用绝对路径来表示。

HttpServletRequest

当 Tomcat 通过 Socket API 读取 HTTP 请求(字符串),并且按照 HTTP 协议的格式把字符串解析成 HttpServletRequest 对象。

Servlet中常用的三大API_第4张图片

通过stringBuilder来把结果的字符串拼接起来,可以看到每个方法的具体结果。Servlet中常用的三大API_第5张图片

并且最后的querystring可以直接添加上去。

前端给后端传参

1.GET query string

在前端给后端传两个数字,一个是同学的studentid,一个是classid。

通过req.getParameter,query string键值对会自动被tomcat处理成形如Map这样的结构,后续就可以随时通过key来获取value了。Servlet中常用的三大API_第6张图片

2.POST form

对于前端是form表单这样格式的数据,后端还是使用getParameter来获取。

Servlet中常用的三大API_第7张图片

 在前端完成代码,抓包看看具体的样子,并且在浏览器中输入10和20:Servlet中常用的三大API_第8张图片

raw中清楚地看到form表单形成的样子。

在后端代码中与前端代码形成关联,通过req.getParameter来获取到具体的信息,这样后端就获取到了前端的信息。

form表单的信息传到tomcat服务器,tomcat构造req和resp对象,form表单中解析出来的值就存在于req对象中,通过getParameter拿到其中的值,再通过resp空对象编写响应,写回到tomcat,tomcat发响应给浏览器显示出来。Servlet中常用的三大API_第9张图片

3.POST json

json是一种非常主流的数据格式,也是键值对结构。前端可以使用ajax的方式来构造出这个内容,更简单的方法就是使用postman直接构造~

例如,现在想要组织一个body:

{

classId:20,

studentId:10

}

可以使用postman直接构造出来相关的请求。Servlet中常用的三大API_第10张图片

后端:

@WebServlet("/postParameter")
public class Myservlet_demo1 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int length = req.getContentLength();//定义需要从前端获取到多少字节的数据
        byte[] buffer = new byte[length];   //存到这样一个大小的数组中

        InputStream inputStream = req.getInputStream();//通过inputStream来获取到req的内容
        inputStream.read(buffer);                      //再通过read写到数组中

        String body = new String(buffer,0,length,"utf8");
        System.out.println("body = " + body);
        resp.getWriter().write(body);                  //最后再把这个构成String,打印出来

    }
}

Servlet中常用的三大API_第11张图片Servlet中常用的三大API_第12张图片Servlet中常用的三大API_第13张图片

最后打印出来,这样就拿到了前端的一段数据。

但是当前通过json传数据,服务器这边只是把整个body读出来,并没有按照键值对的方式来处理。使用第三方库如jackson就可以支持解析body的内容。

在maven仓库中找到JacksonServlet中常用的三大API_第14张图片

 把这个xml片段粘贴到pom.xml中就可以引入这个依赖。

此时用objectMapper.readValue就可以从body中读取出json的字符串。Servlet中常用的三大API_第15张图片

根据第二个参数类对象创建Student实例,然后解析上述的json格式的字符串,处理成map键值对结构。遍历所有的键值对,看看键的名字和Student实例的哪个属性名字匹配就把对应的value设置到该属性中。最后返回该Student实例。

本质上来说,三种方式前端给后端传参数都是一样的,以前通过get和form表单的写法很多,现在通过json格式的更常见。Servlet中常用的三大API_第16张图片

HttpServletResponse

核心方法:

Servlet中常用的三大API_第17张图片

你可能感兴趣的:(servlet)