二〇二三·三·六——request、response初使用

Request 请求头

Enumeration<String> headerNames = req.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String s1 = headerNames.nextElement();
            System.out.println(s1 + " == " + req.getHeaders(s1).nextElement());
            System.out.println(" ");
        }

01 Request 通用方式获取请求参数

Map<String,String[]> getParameterMap(); 	//获取所有参数Map集合
String[] getParameterValues(String name);	//根据名称获取参数值(数组)
String getParameter(String name);	//根据名称获取参数值(单个值)

实例
//获取请求参数
    String method = this.getMethod();
	if("Get".equals(method)){
        //Get方式获取请求参数
        params = this.getQueryString();
    }else if("Post".equals(method)){
        //Post方式获取请求参数
        BufferedReader reader = this.getReader();
        params = reader.readLine();
    }

02 测试工具:postman、Talend API Tester

一般的浏览器只能测试Get方法,无法测试Post方法

java接受数据一般用

req.getParameter("name"); 

封装对象:

  • 如果前端传递了无数个参数,我们会对数据进行封装,应该用一个大容器去接受:JavaBean
  • JavaBean:一般情况下如果这些数据内容相似,属于一个对象
  • 以后,前端和后端发生交互的时候默认全部用对象

03 传递对象

如果想要将对象转换为json对象{"key":"value"}的形式,则需要进行封装,Java没有自己的api,所以会引用第三方jar包

前后端数据传递都通过json对象进行

04 前后端相互交互:

  1. 乱码处理

  2. 得到前端的数据

    //Java得到前端的数据:
        String name = req.getParameter("username");
        String pass = req.getParameter("password");
    //Java传递数据
        req.setAttribute("username",name);
        req.setAttribute("password",pass);
    
    <%--前端发送数据--%>
    	<input type="text" name="username">
    	<input type="password" name="password">
    <%--前端接受数据--%>
    	用户名:${username}
    	密码:${password}
    
  3. 将数据封装到对象

  4. 进行逻辑处理(service层)

  5. 得到逻辑处理结果

  6. 将最终结果以json对象传递给调用者

Java里面最好不要出现魔法值:容易经常改变的值:

推荐使用枚举

05 请求转发

  • 请求转发(forward):一种在服务器内部的资源跳转方式

  • 实现方式

    req.getRequestDispatcher("资源B路径").forward(req,resp);
    
  • 请求转发资源间共享数据:使用Request对象

    void setAttribute(String name,Object o); //存储数据到request域中
    Object getAttribute(String name); //根据key,获取值
    void removeAttribute(String name); //根据key,删除该键值对
    

如果只是单纯跳转页面,不要使用请求转发,因为请求转发需要传递数据

06 页面转发涉及到的作用域

servlet三大作用域:
  1. request

    数据只能在转发页面才能取到

  2. session

    req.getSession()
    

    数据可以在同一个浏览器任意界面取到

  3. application

    req.getServletContext()
    

    数据可以在任何页面取到,可以跨浏览器

三种域都可以视为 {key,value} 对象

07 req对属性进行设置

req.setAttribute("name",name);
req.getAttribute("name");
req.removeAttribute("name");

08 请求转发特点

  • 浏览器地址栏不发生变化
  • 只能转发到当前服务器的内部资源
  • 一次请求,可以在转发的资源间使用request共享数据

response

01 response完成重定向

resp.sendRedirect("/success.jsp");

02 通过Response对象获取字符输入流

//通过Response对象获取字符输入流
PrintWriter writer = resp.getWriter();
//写数据
writer.write("aaa");

03 Response响应字节数据

//通过Response对象获取字节输出流
ServletOutputStream outputStream = resp.getOutputStream();
//写数据
outputStream.write(字节数据);

IOUtils工具类使用

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
IOUtils.copy(输入流,输出流)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值