zoukankan      html  css  js  c++  java
  • Servlet 常用API学习(二)

    Servlet常用API学习

    一、HTTP简介

      WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。

      HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。

      HTTP协议的版本 HTTP/1.0、HTTP/1.1、HTTP-NG

      HTTP会话方式,四个步骤:

      浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。

      浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

      浏览器访问多图网页的过程

      HTTP请求消息的结构:

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

      HTTP响应消息的结构:

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

      HTTP消息其他细节

      响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。

      一个使用GET方式的请求消息中不能包含实体内容,只有使用POST、PUT和DELETE方式的请求消息中才可以包含实体内容。

    二、使用GET和POST方式传递参数

      在URL地址后面可以附加一些参数

      举例:http://www.it315.org/servlet/ParamsServlet?param1=abc&param2=xyz

      GET方式

      举例:GET /servlet/ParamsServlet?param1=abc&param2=xyz HTTP/1.1
      特点:传送的数据量是有限制的,一般限制在1KB以下。

      POST方式

      举例:
      POST /servlet/ParamsServlet HTTP/1.1
      Host:
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 28

      param1=abc&param2=xyz
      特点:传送的数据量要比GET方式传送的数据量大得多 。

      使用GET方式传递参数

      在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的HTTP请求消息的请求方式为GET。

      如果网页中的<form>表单元素的method属性被设置为了“GET”,浏览器提交这个FORM表单时生成的HTTP请求消息的请求方式也为GET。

      使用GET请求方式给WEB服务器传递参数的格式:http://www.hello.me/counter.jsp?name=lc&password=123

      使用GET方式传送的数据量一般限制在1KB以下。

      使用POST方式传递参数

      POST请求方式主要用于向WEB服务器端程序提交FORM表单中的数据。

      POST方式将各个表单字段元素及其数据作为HTTP消息的实体内容发送给WEB服务器,传送的数据量要比使用GET方式传送的数据量大得多。  
      POST请求消息的格式:
      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

    三、如何在 Serlvet 中获取请求信息

    1.Servlet 的 service() 方法用于应答请求: 因为每次请求都会调用 service() 方法
      public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException

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

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

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

    2. ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
    ①. 获取请求参数:
      > String getParameter(String name): 根据请求参数的名字, 返回参数值,若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.

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

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

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

    ②. 获取请求的 URI:
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
            
        String requestURI = httpServletRequest.getRequestURI();
        System.out.println(requestURI); //  /day_29/loginServlet

    ③. 获取请求方式:
      String method = httpServletRequest.getMethod();
      System.out.println(method); //GET

    ④. 若是一个 GET 请求, 获取请求参数对应的那个字符串, 即 ? 后的那个字符串.
      String queryString = httpServletRequest.getQueryString();
      System.out.println(queryString); //user=atguigu&password=123456&interesting=game&interesting=party&interesting=shopping

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

    ⑥. 和 attribute 相关的几个方法:     

    3. HttpServletRequest: 是 SerlvetRequest 的子接口. 针对于 HTTP 请求所定义. 里边包含了大量获取 HTTP 请求相关的方法.

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

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

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

    ③. 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.

    -----------------------------------------------------------------------------

    未完,待续!!!

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/albertrui/p/8428605.html
Copyright © 2011-2022 走看看