javaweb2

举报
京与旧铺 发表于 2022/06/29 20:03:22 2022/06/29
【摘要】 缓存机制有哪些?堆内存当中的字符串常量池。“abc”先在字符串常量池中查找,如果有,则直接拿来用。没有则新建,再放入到字符串常量池中。堆内存中的整数型常量池。[-128~127]一共256个Integer类型的引用,放在整数型常量池中。没有超出这个范围的话,直接从常量池中取。连接池(Connection Cache)这里说的连接池中的连接是Java语言连接数据库的连接对象:java.sql....

缓存机制有哪些?

  1. 堆内存当中的字符串常量池。

    • “abc”先在字符串常量池中查找,如果有,则直接拿来用。没有则新建,再放入到字符串常量池中。

  2. 堆内存中的整数型常量池。

    • [-128~127]一共256个Integer类型的引用,放在整数型常量池中。没有超出这个范围的话,直接从常量池中取。

  3. 连接池(Connection Cache)

    • 这里说的连接池中的连接是Java语言连接数据库的连接对象:java.sql.Connection对象。

    • JVM是一个进程,MySQL也是一个进程。进程和进程之间建立连接,打开通道是很耗费资源的。所以可以先提前创建好N个Connection连接对象,将连接对象放到一个集合中,我们把这个放有Connection对象的集合称为连接池。每一次用户连接的时候不需要再新建连接对象了,省去了新建的环节,直接从连接池中获取连接对象,大大提升了访问效率。

    • 连接池

      • 最小连接数

      • 最大连接数

      • 连接池可以提升用户的访问效率,也可以保证数据库的安全性。

  4. 线程池

    • Tomcat服务器本身就是支持多线程的。

    • Tomcat启动服务器的时候,会先创建好N个线程Thread对象,然后将线程对象放到集合中,称为线程池。用户发送请求过来之后,需要有一个对应的线程来处理这个请求,这个时候线程对象就会直接从线程池中拿,效率比较高。

  5. redis

    • NoSQL数据库、非关系型数据库、缓存数据库。

    • 向ServletContext应用域中存储数据,也等于是将数据存放到缓存cache当中了。


HTTP协议

  1. 什么是HTTP协议?

    • HTTP协议:是W3C制定的一种超文本传输协议

    • W3C:

      • 万维网联盟组织

      • 负责制定标准的:HTTP、HTML4.0、HTML5.0、XML、DOM等规范都是W3C制定的。

      • 万维网之父:蒂姆-伯纳斯-李


  2. HTTP协议包括:

    • 请求协议:

      • 浏览器 向 服务器发送数据,叫做:请求(request)

      • 包括四部分:

        • 请求行

        • 请求头

        • 空白行

        • 请求体

    • 响应协议:

      • WEB服务器 向 浏览器发送数据,叫做:响应(response)

      • 包括四部分:

        • 状态行

        • 响应头

        • 空白行

        • 响应体

    • 请求行的三部分:

      • 第一部分:请求方式(7种)

        • get(常用)

        • post(常用)

        • delete

        • put

        • head

        • options

        • trace

      • 第二部分:URI

        • 什么是URI?统一资源标识符。代表网络中的某个资源的名字。但是通过URI是无法定位资源的。

        • 什么是URL?统一资源定位符。代表网络中的某个资源,同时,通过URL是可以定位到该资源的。

        • URI和URL是什么关系?有什么区别?

      • 第三部分:协议版本号

    • 状态行分三部分:

      • 第一部分:协议版本号

      • 第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码)

        • 200表示请求响应成功,正常结束。

        • 404表示访问的资源不存在,通常是因为路径写错了,或者路径写对了,但是服务器对应的资源并没有启动成功。(404是前端错误)

        • 405表示前端发送的请求方式和后端请求的处理方式不一致时发生:

          • 比如:前端是POST请求,后端的处理方式按照GET方式进行处理,发生405

          • 比如:前端是GET请求,后端的处理方式按照POST方式进行处理,发生405

        • 500表示服务器端的程序出现了异常。一般会认为是服务器端的错误导致的。

      • 第三部分:状态的描述信息:

        • ok 表示正常成功结束

        • not found 表示资源找不到

  3. 怎么向服务器发送GET请求,怎么向服务器发送POST请求?

    • 到目前为止,只有一种情况可以发送post请求:使用form表单,并且form标签中的method属性值为:method="post"。

    • 其它所有情况都是get请求:

      • 在浏览器地址栏上直接输入URL

      • 在浏览器上直接点击超链接

      • 使用form表单提交数据时,form标签中没有写method属性,默认就是get

      • ... ...

  4. GET请求和POST请求的区别?

    • get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加了一个 ?,?后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在 “请求行” 上发送数据)

    • post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上,也就是说post发送的数据,在浏览器上看不到。(post在 “请求体” 当中发送数据)

    • get请求只能发送到普通的字符串。并且发送的字符串长度有限制,不通的浏览器限制不同。

    • get请求无法发送大量数据。

    • post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。

    • post请求可以发送大数据量,理论上没有长度限制。

    • get请求比较适合从服务器端获取数据。

    • post请求比较适合向服务器端上传数据。

    • get请求是安全的,因为get请求只是为了从服务器上获取数据,不会对服务器造成危险。

    • post请求是危险的,因为post请求是向服务器提交数据,如果这些数据通过后门的方式进入到服务器中,服务器是很危险的。另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截(监听)post请求。

    • get请求支持缓存

      • 任何一个get请求最终的 “响应结果” 都会被浏览器缓存起来。

      • 一个get请求路径 对应 一个资源。

      • 实际上,只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。这种缓存机制目的是为了提高用户的体验。

    • post请求不支持缓存

      • 因为post缓存没有意义。

  5. GET请求和POST请求如何选择?什么时候用GET请求,什么时候用POST请求?

    • 怎么选择GET请求和POST请求呢?衡量标准是什么呢?你这个请求是想获取服务器端的数据,还是想从服务路上获取资源,建议使用GET请求,如果你这个请求是为了向服务器提交数据,建议使用POST请求。

    • 大部分的form表单提交,都是post方式,因为form表单中要填写大量的数据,这些数据是收集用户的信息,一般是需要传给服务器,服务器将这些数据保存/修改等。

    • 如果表单中有敏感信息,还是建议适用post请求,因为get请求会回显敏感信息到刘览器地址栏上。(例如:密码信息)

    • 做文件上传,一定是post请求。要传的数据不是普通文本。

    • 其他情况都可以使用get请求。

    • 不管你是get清求还是post浦求,发送的清求数据格式是完全相同的,只不过位置不同,格式都是统一的:

      • name=value&name=value&name=value&name=value

      • name是什么?

        • 以form表单为例:form表单中input标签的name。

      • value是什么?

        • 以form表单为例:form表单中input标签的value。


模板方法设计模式
  1. 什么是设计模式?

    • 某个问题的固定的解决方案。(可以被重复使用)

  2. 有哪些设计模式?

    • GoF设计模式:

      • 通常我们所说的23种设计模式。(Gang of Four:4人组提出的设计模式)

      • 单例模式

      • 工厂模式

      • 代理模式

      • 门面模式

      • 责任链设计模式

      • 观察者模式

      • 模板方法设计模式

      • ....

    • JavaEE设计模式:

      • DAO

      • DTO

      • VO

      • pojo

      • ...

  3. 什么是模板方法设计模式?

    • 在模板类的模板方法中定义核心算法骨架,具体的实现步骤可以延迟到子类当中完成。

  4. 模板类通常是一个抽象类,模板类当中的模板方法定义核心算法,这个方法通常是final的(不是必须的,只是为了防止子类继承从而修改算法)

  5. 模板类当中的抽象方法就是不确定实现的方法,这个不确定怎么实现的事交给子类去做。


HttpServlet源码分析

  1. HttpServlet类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。

  2. HttpServlet在哪个包下?

    • jakarta.servlet.http.HttpServlet

  3. 到目前位置我们接触了servlet规范中的哪些接口?

    • jakarta.servlet.Servlet 核心接口

    • jakarta.servlet.ServletConfig Servlet配置信息接口

    • jakarta.servlet.ServletContext Servlet上下文接口

    • jakarta.servlet.ServletRequest Servlet请求接口

    • jakarta.servlet.ServletResponse Servlet响应接口

    • jakarta.servlet.ServletException Servlet异常(类)

    • jakarta.servlet.GenericServlet 标准通用的Servlet类(抽象类)

  4. HTTP包下都有哪些接口类和接口?jakarta.servlet.http.*;

    • jakarta.servlet.http.HttpServlet(HTTP协议专用的servlet类,抽象类)

    • jakarta.servlet.http.HttpServletRequest(HTTP协议专用的请求对象)

    • jakarta.servlet.http.HttpServletResponse(HTTP协议专用的响应对象)

  5. HttpServletRequest对象中封装了什么信息?

    • HttpServletRequest,简称request对象。

    • HttpServletRequest中封装了请求协议的全部内容

    • Tomcat服务器(web服务器)将 “请求协议” 中的数据全部解析出来,然后将这些数据全部封装到request对象当中。也就是说只要面向HttpServlitRequest,就可以获取请求协议中的数据。

  6. HttpServletResponse对象是专门用来响应HTTP协议到浏览器的。

  7. HttpServletRequest接口中有哪些常用方法?

    • //获取前端浏览器用户提交的数据:
      Map<String,String[]> getParameterMap();//这个是获取map
      Enumeration<String> getParameterNames();//这个是获取map集合中所有的key
      String[] getParameterValues(String name);//根据key获取map集合的value
      String getParameter(String name)//获取value这个一维数组当中的第一个元素。(最常用)
      //以上4个方法,和用户提交的数据有关系
       
          
      //eg:
      Map<String,String[]> parameterMap = request.getParameterMap();
      ​
      //通过key获取value
      String username = request.getParameter("username");
      String password = request.getParameter("password");
      //复选框时调用
      String[] interests = request.getParameterValues("interest");
      ​
      System.out.println(username);
      System.out.println(password);
      for(String interest : interests){
          System.out.println(interest);
      }
  8. request对象实际上又称为 “请求域” 对象。

    • 应用域对象是什么?

      • ServletContext(Servlet上下文对象)

      • 什么情况下会考虑向ServletContext这个应用域当中绑定数据?

        • 第一:所有用户共享的数据。

        • 第二:这个共享的数据量很小。

        • 第三:这个共享的数据很少的修改操作。

        • 在以上三个条件满足的情况下,使用这个应用域对象,可以大大提高我们的执行效率。

        • 实际上向应用域中绑定数据,就相当于把数据放到了缓存(Cache)当中,然后用户访问的时候直接从缓存中取,减少IO操作,大大提升系统的性能,所以缓存技术是提高系统性能的重要手段。

        • //ServletContext当中有三个操作域的方法:(四个域共享方法)
          void setAttribute(String name,Object obj);//向域当中绑定数据
          Object getAttribute(String name);//从域中根据name获取数据。
          void removeAttribute(String name);//将域当中绑定的数据移除
  9. request和response对象的生命周期

    • request对象和response对象,一个是请求对象,一个是响应对象。这两个对象只在当前请求中有效。

    • 一次请求对应一个request。

    • N次请求则对应N个request。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。