• JavaWeb基础(day15)( http + tomcat + servlet + 响应)


    HTTP+Tomcat+Servlet+响应

    HTTP

      HTTP  超文本传输协议(Hyper Text  Transfer  Protocol  ),一种网络协议。

    • 协议的组成和过程

      • HTTP协议由http请求和http响应组成。在浏览器输入一个请求,浏览器将你的请求封装成一个http请求发送给服务器,服务器收到请求组响应数据封装成一个http响应,返回给客户端。
    • 抓包分析

        使用chrome自带的工具,可以看到数据相互传送的具体过程。

      • http请求

          get请求

           请求行:请求的方法为get请求

           本地的地址:host:localhost:8080

           connection:keep-alive   连接方式:长连接

           浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。
           常用于:防盗链
           Referer: http://localhost:8080/BigData/a.html

          post请求

    • Http响应

        常用响应状态码

             200    请求成功
          302    重定向
          304    读取本地缓存文件
          404    请求的页面不存在
          500    服务端程序错误

    Tomcat

    • 服务器

      • 服务器是一个管理资源并为用户要提供服务的计算机软件,服务器的本质就是普通的电脑中安装了相关的服务软件。tomcat就是一个web应用服务器
    • web2资源

      • 在web应用服务器内部,能够让外界进行访问的资源都叫web资源。图片,js,css,视频等。
    • web应用服务器

      • tomcat:是apache开源组织下的开源免费的中小型web服务器,支持Javaee中的servlet和jsp规范
      • tomcat 的实际作用就是通过HTTP协议规范让用户访问存在与服务器内部的资源。
    • Tomcat目录结构

      • bin中放的都是可执行的脚本程序 启动脚本 startup.bat  停止脚本 shutdown.bat
      • conf存放的是配置信息文件  server.xml核心配置文件:可以设置Tomcat端口,编码格式,web应用的发布信息
      • tomcat­users.xml用户权限配置文件:用于设置用户的分组和用户的密码
      • web.xml web项目默认配置文件,可以配置缺省路径,配置tomcat默认servlet
      • lib 依赖库,tomcat和web项目中需要使用的jar包,如jsp-api.jar 和 servlet-api.jar
      • logs日志文件夹,如 catalina.2017-07-11.log 查看tomcat日志
      • temp:临时文件目录,其中内容可以任意删除
      • webapps:存放发布的web应用的目录
      • work:tomcat解析jsp文件的工作目录,会将jsp解析成的servlet就存在于这个目录
    • Tomcat启动

      • 需要jdk的支持,并且需要配置环境变量JAVA_HOME
      • 本机地址127.0.0.1或者localhost
      • 端口配置,默认tomcat是8080端口
      • 80端口:http协议默认的端口,我们可以通过修改
      • servler.xml设置端口
         
      • 配置用户名管理tomcat下所有的web应用,修改 tomcat­-users.xml
    • 常见问题

      • 启动闪退
        • 系统没有配置环境,JAVA_HOME
      • java.net.BindException: Address already inuse: JVM_Bind <null>:8080
        • 8080端口被占。开源通过server.xml修改端口,也可以通过进程杀死占用程序。
          • 1.命令行输入   netstat  -ano 查询8080端口被那个程序占用
          • 2.打开任务管理器根据pid找到对应程序关闭。

    Servlet

      servlet运行在服务端的Java小程序。由sun公司提供的一套规范接口,用来处理客户端的请求,响应给浏览器的动态资源。但是servlet的实质就是Java代码,通过Java的API动态向客户端输出内容。

    • Servlet的内部实现原理

      • servlet规范:包含三个技术点。servlet技术,filter(过滤器)技术,listener(监听器)技术。
      • 当客户端发送请求时,tomcat会先解析请求的路径,在web.xml的配置文件中去找到对应匹配的路径,如果找到,就会通过配置文件中servlet-name找到对应的类,然后去创建对应类的对象,此时因为接口规范中规定了,init方法,所以tomcat会去调用相应对象的init方法,然后再去调用service方法,由我们service方法去处理响应的请求
    • Servlet生命周期

      • init方法:servlet创建的时候执行
      • servlet方法:每次发送请求的时候执行
        • servletRequest 代表请求  servletRequest内部封装的是http请求的信息。
        • servletResponse代表响应 要封装的是响应的信息。
      • destory方法:服务器关闭的时候执行
    • Servlet的配置  

      • <servlet> 中的 <servlet-name> 中的名字可以任意起,但是需要和 <servlet-mapping> 中的 <servlet-name> 相同
      • <servlet> 中的 <servlet-class> 指定是对应servlet
        的类的全名
      • <servlet-mapping> 中 <url-pattern> 指的是当浏览器中输入什么路径的时候去匹配我们对应的servlet

    <servlet>
      <servlet-name>myServlet</servlet-name>
      <servlet-class>com.web.servlet.MyServlet</servlet-class>
    </servlet>
      <servlet-mapping>
      <servlet-name>myServlet</servlet-name>
      <url-pattern>/myServlet</url-pattern>
    </servlet-mapping>
    

      

    • url­pattern的配置方式  

      • 完全匹配如 /myServlet
      • 目录匹配如 /a/b/c/*
      • 扩展名匹配 *.do
      • 缺省配置如 / 当你访问资源地址所有的servlet都不匹配时,缺省的servlet负责处理其实,web应用中所有的资源的响应都是servlet负责,包括静态资源,对于静态资源其实是由tomcat的默认servlet进行处理的
      • /和/*区别/不会处理后缀名是.jsp的资源
      • /*会处理后缀名是.jsp的资源
      • 启动服务器的时候创建servlet配置 <load-on-startup>1</load-on-startup> 只要不是负数都会随着服务器的启动而创建,值越小优先级越高

    HttpServlet

      在实际的开发过程中,我们不会去创建一个类实现Servlet接口,我们会直接创建一个类去继承HttpServlet,这个是Tomcat提供的一个类,并且实现了Servlet接口。

    ServletContext对象

     ServletContext代表是一个web应用的环境对象,ServletContext对象 内部封装是该web应用的信息一个web应用只有一个ServletContext对象

    • ServletContext的生命周期

      • 创建:当前的web应用创建的时候,一般web应用会随着服务器的启动而创建的(或者发布的时候)
      • 销毁:web应用被卸载(服务器关闭,删除当前的web应用)
    • 如何得到ServletContext对象

      • 在doGet或者doPost方法中调用 this.getServletContext();
      • 注意在当前web应用中所有的servlet中调用此方法获取的servletContext对象是全局唯一的
    • ServletContext作用

      • ServletContext对象随着服务器的启动而启动,所以可以通过ServletContext获得web应用全局的初始化参数,在日后学习的spring中,就是将Spring文件的路径配置在初始化参数中.
      • ServletContext是一个域对象,因为它随着服务器的启动而创建,服务器的关闭而销毁,所以存放在ServletContext中的数据是整个web应用所共享的.
        • 向ServletContext域中放入数据 setAtrribute(String name,Object obj);
        • 从ServletContext域中获取数据 getAttribute(String name);
        • 从ServletContext域中删除数据 removeAttribute(String name);

    HttpServletResponse

      service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口
    • response运行流程

      • tomcat内核发送一个空内容的response对象,供我们去将需要的内容放入
    • response设置响应行

      • 使用response设置了状态码,那么tomcat就不会再去设置状态码了
      • response.setStatus(302);
    • response设置响应头

      • 设置不同的头,客户端收到消息后会做响应的操作
      • response.setHeader("Location", "/WebTest/index.html");

    response重定向

      重定向相当于客户端发送第二次请求

      response.sendRedirect("/WebTest/index.html");

    response定时重定向

      response.setHeader("refresh", "2;url=/Day18/index.html");
    • 重定向特点

      • 重定向过程是客户端收到消息后,再做的请求,所以浏览器的地址会发生改变
      • 服务器收到的请求是两次请求
    • response设置响应体

      • 通过response可以将客户端需要的数据放入响应体中,其过程是先将返回的信息放在response的缓冲区中,然后由tomcat读取缓冲区的内容,封装成http的响应内容发送给客户端。

    解决乱码问题

      response.setCharacterEncoding("UTF-8");

      response.setHeader("Content-Type","text/html;charset=UTF-8");

      (使用httpservlet时写上就对了,标准。)

  • 相关阅读:
    微信分享链接出现config:invalid signature错误的解决方法
    微信开发,分享部分出现的问题
    thinkphp 3.2 去除调试模式后报错,怎么解决
    MySQL添加新用户、为用户创建数据库、为新用户分配权限
    xshell工具source导入几个G的数据库
    thinkphp5引入公共部分header、footer等
    用样本估计总体
    随机抽样
    平面几何相关定理
    直线和曲线相切,曲线和曲线相切
  • 原文地址:https://www.cnblogs.com/ZhuX-H/p/13324873.html
Copyright © 2020-2023  润新知