zoukankan      html  css  js  c++  java
  • javaweb04 ServletRequest&ServletResponse

    WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个歌规则就是 HTTP协议
    HTTP协议是超文本传输协议,它是TCP/IP协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式

    浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都只要建立一次单独的连接
    浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。
    客户机
    建立连接
    发送请求
    回送响应信息
    关闭连接
    服务器

    请求消息的结构:
    一个请求行,若干消息头、以及实体内容,其中一些消息头和实体内容都是可选的,消息头和实体内容之间要用空格隔开。

    相应消息的结构:
    一个状态行,若干消息头,以及实体内天,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空格隔开。

    请求方式有两种 get请求和post请求

    1).使用get请求传递参数:
    ①. 在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。
    ②. 如果网页中的<form>表单元素的 method 属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。
    ③. 使用GET请求方式给WEB服务器传递参数的格式:
    http://localhost:8080/day_291/loginServlet?user=liugang&password=12342
    ④. 使用GET方式传送的数据量一般限制在 1KB 以下。

    2).使用POST方式传递参数:

    ①. POST 请求方式主要用于向 WEB 服务器端程序提交 FORM 表单中的数据: form 表单的 method 置为 POST
    ②. POST 方式将各个表单字段元素及其数据作为 HTTP 消息的实体内容发送给 WEB 服务器,传送的数据量要比使用GET方式传送的数据量大得多。

    POST /counter.jsp HTTP/1.1
    referer: http://localhost:8080/Register.html
    content-type: application/x-www-form-urlencoded
    host: localhost:8080
    content-length: 43

    name=zhangsan&password=123 --请求体中传递参数.


    如何在servlet中获取请求信息:

    1).servlet的service()方法用于应答请求:因为每次都会调用service()方法

    public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {
    // TODO 自动生成的方法存根
    System.out.println("请求来了。。。");
    }
    ServletRequest:封装了请求信息,可以从中获取到任何请求信息。
    ServletResponse:封装了相应信息,如果想给用户什么响应,具体可以使用该接口的方法实现


    这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.

    2). ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.

    1.获取请求参数
    > String getParameter(String name): 根据请求参数的名字, 返回参数值.
    若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

    > String[] getParameterValues(String name): 根据请求参数的名字, 返回参数对应的字符串数组.

    > Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,
    类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.

    > Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.

    2.获取请求的URI:
    HttpServletRequest httpServletRequest =(HttpServletRequest) request;

    String requestURL=httpServletRequest.getRequestURI();
    System.out.println(requestURL);///day_291/loginServlet

    3.获取请求方式:
    String method = httpServletRequest.getMethod();
    System.out.println(method);//GET
    4.获取请求的查询字符串:若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
    String queryString = httpServletRequest.getQueryString();
    System.out.println(queryString); user=213&password=321&interesting=reading&interesting=game&interesting=party

    5.获取请求的servlet的映射路径
    String servletPath = httpServletRequest.getServletPath();
    System.out.println(servletPath);///loginServlet


    6.和attribute相关的几个方法


    3).HttpServletRequest:是ServletRequest的子接口,针对HTTP请求所定义,里面包含大量获取HTTP请求的相关方法。

    4).ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现。

    1.getWriter(): 返回 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印
    到客户的浏览器上。

    PrintWriter out =response.getWriter();
    out.println("helloworld...");

    2.设置响应的内容类型: response.setContentType("application/msword");

    PrintWriter out =response.getWriter();
    out.println("helloworld...");
    3.void sendRedirect(String location): 请求的重定向. (此方法为 HttpServletResponse 中定义.)

    在 web.xml 文件中设置两个 WEB 应用的初始化参数, user, password.
    定义一个 login.html, 里边定义两个请求字段: user, password. 发送请求到 loginServlet
    在创建一个 LoginServlet, 在其中获取请求的 user, password. 比对其和 web.xml 文件中定义的请求参数是否一致
    若一致, 响应 Hello:xxx, 若不一致, 响应 Sorry: xxx xxx 为 user.

  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11634987.html
Copyright © 2011-2022 走看看