Java基础学习:JavaWEB(二)

时间:2023-02-16 11:57:23

1.HTTP 简介

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

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

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

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

2.HTTP的请求消息

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

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

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

3.GET 和 POST 方式传递参数

  3.1 GET在URL地址后面可以附加一些参数,举例 http://127.0.0.1:8888/usagi-web/loginServlet?user=abb&password=abb , 特点:传送的数据量是有限制的,一般限制在1KB以下。

  3.2 POST参数附带在请求体中,特点:传送的数据量要比GET方式传送的数据量大得多。

4.如何在 Serlvet 中获取请求信息:

  4.1 Servlet 的 service() 方法用于应答请求:因为每次请求都会调用 service() 方法。

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

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

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

5.ServletRequest 

  5.1 获取请求参数:

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

    2)request.getParameterMap():根据请求参数的名字,返回请求参数对应的字符串数组

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

    4)request.getParameterValues():返回请求参数的键值对:key:参数名,value:参数值,String 数组类型

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

    6)httpServletRequest.getRequestURI():获取请求的URI 。如:http://127.0.0.1:8888/usagi-web/loginServlet?user=123&password=123 , 结果:/usagi-web/loginServlet

    7)httpServletRequest.getMethod():获取请求方式。

    8)httpServletRequest.getQueryString():若是一个GET请求,获取请求参数对应的那个字符串,既?后的那个字符串。如:http://127.0.0.1:8888/usagi-web/loginServlet?user=123&password=123 ,结果:user=123&password=123

    9)httpServletRequest.getServletPath():获取请求的 Servlet 的映射路径。如:http://127.0.0.1:8888/usagi-web/loginServlet?user=123&password=123,结果:/loginServlet

 6.ServletResponse 

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

  6.2 response.setContentType():设置响应的内容类型

  6.3 httpServletResponse.sendRedirect():请求的重定向。(此方法为 HttpServletResponse 中定义)

7.GenericServlet

  7.1 是一个Servlet,是 Servlet 接口和 ServletConfig 接口的实现类,但是一个抽象类,其中的 service 方法为抽象方法

  7.2 如果新建的 Servlet 程序直接继承 GenericServlet 会使开发更简洁

  7.3 具体实现:

    1) 在 GenericeServlet 中声明了一个 ServletConfig 类型的成员变量,在init(ServletConfig)方法中对其进行了初始化

    2) 利用 servletConfig 成员变量方法实现了 ServletConfig 接口的方法

    3) 还定义了一个 init()方法,在init(ServletConfig)方法中对其调用,子类可以直接覆盖 init()在其实现对 Servlet 的初始化 

    4) 不建议直接覆盖init(ServletConfig),因为如果忘记编写 super(ServletConfig),而还是用了 ServletConfig接口的方法,则会出现空指针异常

    5) 新建的init(){}并非 Servlet 的生命周期方法,而init(ServletConfig)是生命周期相关的方法

8.HttpServlet

  8.1 是一个Servlet,继承GenericeServlet . 针对于 HTTP 协议所定制

  8.2 在service()方法中直接把 ServletRequest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse并调用了重载的service(HttpServletRequest,HttpServletResponse)获取了请求方式:request.getMethod(),根据请求方式又创建了doXXX()方法 (XXX 为具体的请求方式,比如 doGet,doPost)

  8.3 实际开发中,直接继承 HttpServlet,并根据请求方式复写 doXXX()方法接口

  8.4 好处:直接由针对性的覆盖doXXX(),直接使用 HttpServletRequest  和 HttpServletResponse 不在需要进行强转,即可使用