Day04 开始学Request

Day04 request

一、request概述

表示请求
有两种含义

1、Http中的request

Http请求包含三部分:请求行、请求头、请求体。

在这里插入图片描述

2、servlet中的request

doGet/doPost方法的request的类型是HttpServletRequest
在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法。

二、request获取请求行

//1.获取请求行中的请求方法
String method = request.getMethod();
//2.获取请求行中的项目访问路径
String path = request.getContextPath();

三、request-获取请求头

1、什么是请求头

请求中的键值对

2、方法

根据键获取对应的值
String getHeader(String name)

//获取当前浏览器的类型
String type = request.getHeader("User-Agent");

四、request-获取请求体

1、请求体是什么?

提交的参数

2、有什么特点?

(1)只有POST请求才有请求体
(2)请求体中包含的是请求的参数

3、方法

(1)根据一个参数名,获取参数的值

String getParameter(String name)
如果表单中的参数,是一个key对应一个value。

String username = request.getParameter("username");
String password = request.getParameter("password");

其中,Tomcat 8.5 已经默认可以处理GET请求的中文的提交,但POST没有。
所以请求为POST时,要加上下列代码。

if("POST".equals(request.getMethod())){
    //设置请求体的数据的编码为utf-8
    request.setCharacterEncoding("UTF-8");
}
(2)获取多个参数和所有参数

1)根据一个参数名,获取参数的多个值。如果没有值,则返回null

String[] getParameterValues(String name)
如果表单中的参数,是一个key对应多个value

String [] hobby = request.getParameterValues("hobby");

2)获取所有的参数名和参数值

Map<String,String[]> getParameterMap()
写得很麻烦 , 一个一个地获取,再一个一个的设置。
等下用BeanUtils工具装数据

五、apache BeanUtils工具类

1、BeanUtils是什么?

BeanUtils 是 Apache commons组件的成员之一

2、作用

主要用于简化JavaBean封装数据的操作。
使用第三方工具,需要导入jar包:
在这里插入图片描述

3、使用步骤

(1)添加Jar包到web/WEB-INF/lib目录

在这里插入图片描述

(2)选中所有jar包,右击–>add as Library…
(3)调用populate()方法
//1.获取所有参数
Map<String, String[]> map = request.getParameterMap();
//2.创建一个javabean对象
User user = new User();

try {
    //参数1,新建的javabean对象,没有值;参数2,有key-value的map
    BeanUtils.populate(user,map);
} catch (Exception e) {
    e.printStackTrace();
}

必须做到让参数的参数名与类的成员变量名一致

public class User {
    private String username;
    private String password;
    private String[] hobby;
    private String sex;

在这里插入图片描述

(4)底层原理

1)根据获取的Map中的key,使用拼接法,在这个key名前加set,来生成set方法。
2)从而调用同名set方法给成员变量赋值(反射)。

六、转发的原理

1、什么是请求转发

浏览器访问Servlet1,Servlet1将参数处理得到结果,没有直接返回给浏览器,而是将结果带给Servlet2,由Servlet2再处理之后返回给浏览器。

2、类比

面试者的简历给前台,前台收到之后转给面试官。

3、在哪里使用?

搜索功能,还有很多地方。
在这里插入图片描述

4、代码实现

(1)方法

  1. setAttribute(key,value) 存一个key-value数据到请求中
  2. getAttribute(key) 根据key将对应的value取出来
  3. getRequestDispatcher("/demo7").forward(request, response);
    back 后退 forward前进

pack04_dispatch\Demo06Servlet.java

@WebServlet("/demo06")
public class Demo06Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.存数据
        request.setAttribute("name","游戏本");
        //2.请求转发
        request.getRequestDispatcher("/demo07").forward(request,response);
    }
}

pack04_dispatch\Demo06Servlet.java

@WebServlet("/demo07")
public class Demo07Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //取数据
        String name = (String) request.getAttribute("name");
        //2 组装标签后,响应给浏览器
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println("<font color='red'>"+name+"</font>");
    }
}

5、转发和重定向的区别

在这里插入图片描述
(1)重定向
两次请求,两次响应
重定向不携带数据
重定向地址栏发生改变

(2)转发
一次请求,一次响应
转发需要携带数据
转发地址栏不会发生变化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值