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.

  • 相关阅读:
    Web应用网络模型
    Http协议
    Array数组标准库
    Array数组基础
    javascript--Object
    javascript--Function
    letCode-3
    面试前的准备
    面试常见问题
    面试经验总结
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/11634987.html
Copyright © 2011-2022 走看看