首页 > 编程语言 > 详细

Javaweb基础知识---servlet、HTTP、Request

时间:2021-01-26 22:44:36      阅读:28      评论:0      收藏:0      [点我收藏+]

servlet部分:

体系结构

  servlet---接口

  GenericServlet---抽象类

  HttpServlet---抽象类

  GenericsServlet:将Servlet接口中其他方法做了默认空实现,只将service()方法作为抽象方法

    将来定义servlet类时,可以继承GenericsServlet,实现service()方法即可

  HttpServlet:对http协议的一种封装,简化操作

    定义类继承httpServlet

    复写doGet/doPost方法

servlet相关配置:

  urlpartten:servlet访问路径

    一个servlet可以定义多个访问路径:@webServlet({"路径一","路径二","路径三"})

    路径定义规则:

      /XXX:路径匹配

      /XXX/XXX:多层路径。结构目录

      *.do:扩展名匹配

HTTP:

  概念:全称为:Hyper Text Transfer Protocol超文本传输协议

    传输协议:定义了客户端与服务器端通信时发送数据的格式

    特点:

      基于TCP/IP的高级协议

      默认端口号为80

      基于请求/响应模型的:一次请求对应一次响应

      无状态的:每次请求之间相互独立,不能交互数据

    历史版本:

      1.0:每次请求响应都会建立新的连接

      1.1:复用连接

  请求消息数据格式:

    请求行:

      请求方式 请求url 请求协议/版本

      GET/login.html     HTTP/1.1
      请求方式:

        HTTP协议由七种请求方式,常用两种:

          GET:

            请求参数在请求行中,在url后

            请求的url长度有限制的

            不太安全

          POST:

            请求参数在请求体中

            请求的url长度没有限制的

            相对安全

    请求头:客户端浏览器告诉服务器一些信息

      请求头名称:请求头值

        User-Agent:浏览器告诉服务器,访问服务器使用的浏览器版本信息

          可以在服务器端获取该头的信息。解决浏览器的兼容性问题

        Referer:http://localhost/login.html

          告诉服务器,当前请求从哪里来

            作用:防盗链;统计工作

    请求空行:

      一个空行,用于分隔POST请求的请求头,和请求体的

    请求体(正文):

      封装POST请求消息的请求参数的

    字符串格式

  响应消息数据格式

Request部分:

  request对象和response对象的原理

    request和response对象是由服务器创建的,我们只是使用它

    request对象时来获取请求消息的,response对象是来设置响应消息

  request对象是继承体系结构:

    ServletRequest    ---接口

       |  继承

    HTTPServletRequest ---接口

     |  实现

    org.apache.catalina.connect.RequestFacade  类(tomcat)

  request功能:

    获取请求消息数据

      获取请求行数据:

        GET:/DEMO/demo1?name=zhangsan HTTP/1.1

        方法:

          获取请求方式:GET

          *String getMethod()

         (重要知识点)获取虚拟目录:/DEMO

          *String getContextPath()

          获取Servlet路径:demo1

          *String getServletPath()

          获取get方式请求参数:name=zhangsan

          *String getQureyString()

          (重要知识点)获取请求URI:/DEMO/demo1   

          *String getRequestUTI():/DEMO/demo1

          *StringBuffer getRequestURL(): http://localhost/DEMO/demo1

          URL:统一资源定位符,如:http://localhost/DEMO/demo1

          URI:统一资源标识符,如:/DEMO/demo1

          获取协议及版本:HTTP/1.1

          *String getProtocol()

          获取客户机的IP地址:

          *String getRemoteAddr()

      获取请求头数据:

        方法:

          (重要知识)String getHeader(String name):通过请求头的名称获取请求头的值

           Enumeration<String> getHeaderNames():获取所有请求头名称

      获取请求体数据:

        请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的参数

        步骤:获取流对象

          BufferReader getReader():获取字符输入流,只能操作字符数据

          ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

           在从流对象中拿数据

      其他功能:

          1.获取请求参数通用方式∶不论get还是post请求方式都可以使用下列方法来获取请求参数
            1. String getParameter(String name):根据参数名称获取参数值username=zs&password=123
            2. String[] getParameterValues(String name);根据参数名称获取参数值的数组     hobby=xx&hobby=game

            3. Enumeration<string> getParameterNames():获取所有请求的参数名称
            4. Map<String,String[]> getParameterMap():获取所有参数的map集合

          

          中文乱码问题:
            get方式:tomcat 8已经将get方式乱码问题解决了

            post方式:会乱码
              解决∶在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");

          

          2.请求转发︰—种在服务器内部的资源跳转方式
            1.步骤:
              1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(string path)
              2.使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)
            2.特点:
              1.浏览密地址栏路径不发生变化
              2.只能转发到当前服务器内部资源中。

              3.转发是一次请求

        3.共享数据︰
            域对象:一个有作用范围的对象,可以在范围内共享数据
            *request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

            方法:
              1. void setAttribute(string name,object obj):存储数据

              2. object getAttitude(string name):通过键获取值
              3. void removeAttribute(string name):通过键移除键值对

        4.获取servletcontext :
            servletcontext getservletcontext()

BeanUtils略

  响应消息∶服务器端发送给客户端的数据
    *数据格式:
      1、响应行
        1.组成:协议/版本响应状态码状态码描述
        2.响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
          1.状态码都是3位数字
          2.分类:
            1.1xx∶服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码

            2.2xx∶成功。代表:200
            3.3xx∶重定向。代表:302(重定向),304(访问缓存)

            4. 4xx∶客户端错误。
              *代表:
                *404〔请求路释没有对应的资源)
                *405:请求方式没有对应的doXxx方法
            5.5xx∶服务器端错误。代表:50e(服务器内部出现异常)

      

      2.响应头:
        1.格式:头名称:值

        2.常见的响应头︰
          1. content-Type:服务器告诉客户端本次响应体数据格式以及编码格式

          2. Content-disposition :服务器告诉客户端以什么格式打开响应体数据
            *值∶
              *in-line :默认值,在当前页面内打开
              *attachment;filename=xxx∶以附件形式打开响应体。文件下载
      3.响应空行
      4.响应体:传输的数据

 

Response对象

  *功能:设置响应消息
    1.设置响应行
      1.格式:HTTP/1.1 200 ok
      2.设置状态码:setstatus ( int sc)
    2.设置响应头: setHeader(string name,string value)
    3.设置响应体:
      *使用步骤:
        1.获取输出流
          字符输出流:Printwriter getwriter(
          字节输出流: Servletoutputstream getoutputstream()
        2.使用输出流,将数据输出到客户端浏览器

完成重定向方式
  *重定向:资源跳转的方式多代码实现:
    方法1、设置状态码为302,设置响应头location
    response.setstatus( 302);2.设置响应头location
    response.setHeader( "location" , " /day/responseDemo2");
    方法2、简单的重定向方法
    response. sendRedirect(" / day/responseDemo2");

*重定向的特点: redirect

  1.地址栏发生变化
  2.重定向可以访问其他站点(服务器)的资源
  3,重定向是两次请求。不能使用request对象来共亨数据

*转发的特点: forward
  1,转发地址栏路径不变
  2.转发只能访问当前服务器下的资源
  3.转发是一次请求,可以使用request对象来共亨数据

路径写法:
  1.路径分类
    1.相对路径∶通过相对路径不可以确定唯一资源
      如: ./index.html
      *不以/开头,以.开头的路径
      *规则:找到当前资源和目标资源之间的相对位置关系
        *./:当前目录
        * ../:后返一级目录
    2.绝对路释:通过绝对路径可以确定唯一资源
      *如: http: / / localhost/day/responseDemo2
/ day/responseDemo2
      以/开头的路径

      *规则∶判断定义的路释是给谁用的?判断请求将来从哪儿发出
        *给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
          *建议虚拟目录动态获取:request.getcontextPath()

          *<a> , <form>重定向...
          *给服务器使用:不需要加虚拟目录
            *转发路径

服务器输出字符数据到浏览器

*步骤:
  1.获取字符输出流  2.输出数据
*注意:
  *乱码问题:
    1. Printwriter pw = response.getwriter();获取的流的默认编码是I50-8859-1

    2.设置该流的默认编码
    3.告诉浏览器响应体使用的编码
      //简单的形式,设置编码,是在获取流之前设置
      response.setContentType( "text/ html; charset=utf-8");

服务器输出字节数据到浏览器
  *步骤:
    1.获取字节输出流  2.输出数据

Javaweb基础知识---servlet、HTTP、Request

原文:https://www.cnblogs.com/9-King/p/14319109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!