Servlet——请求(request)与响应(response)


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、请求响应流程图

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

  • 1.创建request对象,把请求数据封装到request中;
  • 2.创建response对象
  • 3.调用Servlet的service()方法传递这两个参数

Request: 父接口: ServletRequest, 子接口: HttpServletRequest
Response: 父接口: ServletResponse: 子接口: HttpServletResponse

二、Request对象

功能:

获取请求头
获取请求参数
域功能 实现数据传递
请求转发 实现页面之间跳转

void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!

2.1

  • 获取请求参数

在这里插入图片描述

  1. String getParameter(String name) //根据请求参数名获取请求参数值
    //注意:
    // 1) 前端传递这个请求参数, 得到请求参数value
    // 2) 前端传递这个请求参数,username=,得到""
    // 3) 前端传递没有这个请求参数, 得到null
  2. String[] getParameterValues(String name) //根据请求参数名获取请求参数值(一个name对应多个value)
  3. Enumeration getParameterNames() //获取所有的请求参数名
  4. Map<String,String[]> getParameterMap() //获取所有的请求参数, 并且把请求参数保存到map集合
  • 注:如果表单没有name属性, 该表单无法传递到后端
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // System.out.println("登录处理中....");
        //使用request得到请求参数
        //String  getParameter(String name)
        //返回值情况:
        // 1) 前端传递这个请求参数, 得到请求参数value
        // 2) 前端传递这个请求参数,username=,得到""
        // 3) 前端传递这个请求参数, 得到null
       /* String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");
         System.out.println("username:"+username);
        System.out.println("pwd:"+pwd);*/




        //一个key对应多个value
        String[] usernames = request.getParameterValues("username");
        //变成list集合
       /* List<String> list = new ArrayList<>();
        for (String username : usernames) {
            list.add(username);
        }*/
        //Arrays.asList() 返回的ArrayList 是Arrays内部类
        // 只读的List, 无法进行添加元素,删除元素操作
        List<String> list = Arrays.asList(usernames);
        //list.add("aa");
        System.out.println(list);


        //获取所有的请求参数的name
       /* Enumeration<String> names = request.getParameterNames();
        while(names.hasMoreElements()){
            System.out.println(names.nextElement());
        }*/

        //一次性获取所有的请求参数  框架内部使用
        /*Map<String, String[]> parameterMap = request.getParameterMap();
        System.out.println(parameterMap);*/

        //调用dao查询数据库
        //使用response 响应结果给前端
    }

三、域对象功能 request域

request域中的数据,只能同一次请求内有效

void setAttribute(String name, Object o)//往域中保存数据
Object getAttribute(String name) //从域中获取数据
void removeAttribute(String name) //从域中删除数据

3.1请求转发

转发只是服务器内部跳转;
在这里插入图片描述
在AServlet中,把请求转发到BServlet

public  class AServlet extends HttpServlet {	       
    public void doGet(HttpServletRequest request, HttpServletResponse response)		throws ServletException, IOException {		
        System.out.println("AServlet");		
        RequestDispatcher rd = request.getRequestDispatcher("/BServlet");
        rd.forward(request, response);	
    }
}
public class BServlet extends HttpServlet {	       
    public void doGet(HttpServletRequest request, HttpServletResponse response)		throws ServletException, IOException {		
        System.out.println("BServlet");	
    }
}

3.2总结

  • 如果在AServlet中请求转发到BServlet,那么在AServlet中就不允许再输出响应体,即不能再使用response.getWriter()和response.getOutputStream()向客户端输出,这一工作应该由BServlet来完成;如果是使用请求包含,那么没有这个限制;
  • 请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(”text/html;charset=utf-8”);
  • 请求请求大多是应用在Servlet中,转发目标大多是JSP页面;

四、Response

4.1概述

response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。

request: 请求对象, 封装了客户端给服务器的相关的数据

  • 请求头 getHeader()
  • 请求参数
  • 域功能
  • 请求转发

request默认编码: ISO-8859-1 这种编码不包含中文, UTF-8
void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!
设置输出流的编码,但是这个方法无法设置页面的编码, 页面编码不是UTF-8, GBK, 输出流的编码:UTF-8,

4.2response 对象

response对象的功能分为以下四种:

  • 设置响应头信息;
  • 发送状态码;
  • 设置响应正文;
  • 重定向;

4.3response响应正文

通过输出流, 通过Response得到网络输出流
在这里插入图片描述

ServletOutputStream getOutputStream() //得到响应字节输出流, 万能流
//输出中文,出错
PrintWriter getWriter() //得到响应字符输出流, 输出字符

  • 两个流不能同时使用

4.4 重定向

void sendRedirect(String location)
在这里插入图片描述

重定向与转发区别:

  1. 重定向是两次请求, 转发是一次请求

  2. 重定向的客户端的地址栏发生变化, 转发客户端地址栏不发生变化

  3. 重定向是客户端的跳转, 转发是服务器内部的跳转

重定向资源可以是服务器的资源,也可以是服务器之外的资源

转发的资源只能是服务器内部的资源

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值