Servlet执行原理和API详解

一、HttpServlet

我们写 Servlet 代码的时候, 首先第⼀步就是先创建类, 继承⾃ HttpServlet, 并重写其中的某些方法.
在这里插入图片描述

1.1核心方法

在这里插入图片描述

1.2处理GET或POST请求

在这里插入图片描述

1.3数据的两种提交方式

数据提交有两种方式:

  1. form 表单提交
  2. ajax 提交

1.3.1form 表单提交

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
form表单提交的是整个页面,当数据进行提交之后,页面就消失了。
在这里插入图片描述
在这里插入图片描述

1.3.2 ajax提交

使用ajax请求不需要刷新整个页面
在这里插入图片描述
在这里插入图片描述

二、HttpServletRequest

2.1核心方法

在这里插入图片描述

2.1.1String getProtocol()

返回请求协议的名称和版本。
在这里插入图片描述
在这里插入图片描述

2.1.2String getMethod()

返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。
在这里插入图片描述
在这里插入图片描述

2.1.3String getRequestURI()

在这里插入图片描述
在这里插入图片描述

2.1.4String getContextPath()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.5 String getQueryString()

在这里插入图片描述
在这里插入图片描述

2.2 获取json格式的参数

使用之前的getParameter获取:
在这里插入图片描述
在这里插入图片描述
发现使用getParameter方式获取不到json格式的参数
则有下:
使用 InputStream 获取 JSON 参数:

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/postjson")
public class JsonPostServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置返回类型和编码
        resp.setContentType("text/html;charset=utf-8");

        //1.得到数据流
        ServletInputStream inputStream = req.getInputStream();
        //2.使用数组接收数据流
        byte[] bytes = new byte[req.getContentLength()];
        inputStream.read(bytes);
        //3.将数组转换为字符串(对象)
        String result = new String(bytes,"utf-8");
        System.out.println(result);
        
        resp.getWriter().println(result);
    }
}

在这里插入图片描述
拿到json格式的参数,接下来就需要将json字符串转换为对象

2.3将json字符串转换为对象

使用jackson
jackson的主要用途:
1.将对象转换为json字符串
2.将json字符串转换为对象

2.3.1jackson的配置

将jackson引入的项目中
1.在中央仓库中选择
在这里插入图片描述
2.将其引入pom.xml中
在这里插入图片描述

2.3.2jackson的使用介绍前置知识

1.将对象转换为json字符串
在这里插入图片描述
在这里插入图片描述
2.将json字符串转换为对象
在这里插入图片描述
在这里插入图片描述

2.3.3回到项目中

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
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.HashMap;

@WebServlet("/postjson")
public class JsonPostServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置返回类型和编码
        resp.setContentType("text/html;charset=utf-8");

        //1.得到数据流
        ServletInputStream inputStream = req.getInputStream();
        //2.使用数组接收数据流
        byte[] bytes = new byte[req.getContentLength()];
        inputStream.read(bytes);
        //3.将数组转换为字符串(对象)
        String result = new String(bytes,"utf-8");
        System.out.println(result);
        //4.将字符串转换为对象(字典)
        ObjectMapper objectMapper = new ObjectMapper();
        HashMap<String,String> map = objectMapper.readValue(result,HashMap.class);

        System.out.println("用户名:" + map.get("username"));
        System.out.println("密码:" + map.get("password"));

        resp.getWriter().println("用户名:" + map.get("username") + "|密码:" + map.get("password"));
    }
}

结果如下:将json字符串转换为了对象
在这里插入图片描述

2.3.4将前后端代码修改为json格式

前端:
在这里插入图片描述
后端:
在这里插入图片描述

三、HttpServletResponse

核心方法:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值