• Web核心


    B/S架构:Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据存储在服务器端。浏览器只需要请求服务器获取Web资源,服务器把Web资源发送给浏览器即可
    优点:易于维护升级:服务端升级后,客户端无需任何部署就可以使用到新版本
    HTTP协议:定义通信规则(超文本传输协议,规定了浏览器和服务器之间数据传输规则)
    Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据

    HTTP协议特点

    • 基于TCP协议:面向连接、安全
    • 基于请求-响应模式的:一次请求对应一次响应
    • HTTP协议是无状态的协议:对于事物处理没有记忆能力,每次请求-响应都是独立的
    缺点:多次请求间不能共享数据(Java中会使用会话技术Cookie、Session来解决)
    优点:速度快

    HTTP-请求数据格式

    在这里插入图片描述

    HTTP-响应数据格式

    在这里插入图片描述

    Web服务器

    Web服务器是一个应用程序软件,对HTTP协议的操作进行封装,使得程序猿不必直接对协议进行操作,开发更加便捷。主要功能”提供网上信息浏览服务“

    Servlet

    Servlet是Java提供的一门动态web资源开发技术
    在这里插入图片描述
    Servlet由谁创建?Servlet方法由谁调用?
    Servlet由服务器创建 Servlet方法由web服务器调用
    服务器怎么知道Servlet中一定有service方法?
    因自定义Servlet,必须实现Servlet接口 并复写其方法
    而Servlet接口中又有service方法

    Servlet生命周期

    对象的生命周期就是 指一个对象从被创建到销毁的过程
    Servlet运行在Servlet容器(web服务器中),其生命周期由容器管理
    1、加载和实例化:默认情况下,当Servlet第一次被访访问时,由容器创建Servlet对象
    2、初始化:在Servlet被实例化之后,容器调用Servlet的init()方法初始化这个对象,并完成一些如加载配置文件、创建连接等初始化的工作,该方法只调用一次
    3、请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service方法对请求进行处理
    4、服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destory()方法完成资源释放。在destroy()方法调用之后,容器就会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。

    Servlet体系结构在这里插入图片描述

    配置
    在这里插入图片描述

    /和/*区别

    配置路径:
    在这里插入图片描述
    访问路径:
    在这里插入图片描述

    • 当项目中的Servlet配置 “/”, 会覆盖掉Tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet
    • 当项目中”/*“, 意味着匹配任意访问路径

    request

    获取请求数据

    请求行:

    在这里插入图片描述

    解决乱码问题

    在这里插入图片描述

    请求转发(一种在服务器内部的资源跳转方式)

    在这里插入图片描述

    • 请求转发资源共享数据:使用Request对象
    • void setAttribute(String name,Object o): 存储数据到request域中
    • Object getAttribute(String name):根据key,获取值
    • void removeAttribute(String name): 根据key,删除该键值对

    请求转发特点

    1、浏览器地址栏路径不会发生变化
    2、只能转发到当前服务器的内部资源
    3、一次请求,可以在转发的资源间使用request共享数据

    Response设置响应数据功能介绍

    在这里插入图片描述

    重定向

    在这里插入图片描述

    特点

    1、浏览器地址栏路径发送变化
    2、可以重定向到任意位置的资源(服务器内部、外部均可)
    3、两次请求,不能在多个资源使用request共享数据
    浏览器使用:需要加虚拟目录(项目访问路径
    服务端使用:不用加虚拟目录

    Jsp

    Java Server Pages ,Java服务端页面

    • 一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容
    • JSP = HTML + Java
    • JSP 的作用 :简化开发,避免了Servlet中直接输出HTML标签

    JSP原理

    JSP本质就是一个Servlet
    在这里插入图片描述
    JSP在被访问时,由JSP容器(Tomcat)将其转换为Java文件(Servlet),在由JSP容器将其编译,最终对外提供服务的其实就是这个字节码文件

    缺点:

    1、书写麻烦:特别是复杂的页面
    2、阅读麻烦
    3、复杂度高:运行需要依赖各种环境,JRE,JSP容器,。。。
    4、占内存和磁盘:JSP会自动生成.java和.class文件占磁盘,运行的是.class文件占内存
    5、调试困难:出错后,需要找到自动生成的.java文件进行调试

    EL表达式

    Expression Language 表达式语言,用于简化JSP页面内的Java代码

    • 主要功能:获取数据
    • 语法 ${expression} 获取域中存储的key为expression的数据
    • JavaWeb中的四大域对象:
      1、page 当前页面有效
      2、request: 当前请求有效
      3、session: 当前会话有效
      4、 application: 当前应用有效
      在这里插入图片描述
      el表达式获取数据,会依次从这4个域中寻找,直到找到为止
      JSTL标签
      在这里插入图片描述

    MVC

    在这里插入图片描述

    三层架构

    在这里插入图片描述

    MVC 和 三层架构

    在这里插入图片描述

    会话跟踪技术

    会话:用户打开浏览器,访问web服务器的资源,会话建立,直到一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
    会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话的多次请求间共享数据
    HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
    -实现方式:
    1、客户端会话跟踪技术:Cookie
    2、服务端会话跟踪技术:Session

    • Cookie: 客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
      在这里插入图片描述

    发送Cookie

    package com.shanks.web;
    
    import com.sun.deploy.net.cookie.CookieUnavailableException;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.annotation.*;
    import java.io.IOException;
    
    @WebServlet("/aServlet")
    public class AServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            /**
             * 发送Cookie
             * 创建Cookie 对象
             */
            Cookie cookie = new Cookie("username", "zs");
            //发送Cookie
            response.addCookie(cookie);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    获取Cookie

    package com.shanks.web;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/bServlet")
    public class BServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            /**
             * 获取Cookie
             * 获取Cookie 数组
             */
            Cookie[] cookies = request.getCookies();
            //遍历数组
            for (Cookie cookie : cookies) {
                //获取数据
                String name = cookie.getName();
                if("username".equals(name)){
                    String value = cookie.getValue();
                    System.out.println(name+":"+value);
                    break;
                }
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doGet(request, response);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    Cookie原理

    Cookie的实现是基于HTTP协议

    • 响应头: set-cookie
    • 请求头:cookie
      在这里插入图片描述
      Cookie存活时间
    • 默认情况下,Cookie存储在浏览器内存中,当浏览器,内存释放,则Cookie被销毁
    • setMaxAge(int seconds) :设置Cookie存活时间
      1、整数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到时间自动删除
      2、负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
      3、零:删除对应Cookie
      存储中文使用URL转码 后接收时在解析
     //Cookie cookie = new Cookie("username", "zs");
            String value = "张三";
            value = URLEncoder.encode(value, "UTF-8");
            Cookie cookie = new Cookie("username", value);
    
    • 1
    • 2
    • 3
    • 4
    • Cookie不能直接存储中文
    • 如需存储,则需要进行转码:URL编码

    Session

    服务端会话跟踪技术:将数据保存到服务端
    JavaEE提供HttpSession接口,来实现一次会话多次请求间数据共享功能
    在这里插入图片描述

    • Session是基于Cookie实现的
      Session钝化、活化:
    • 服务器重启后,Session中的数据是否还在?
      1、钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘中
      2、 活化:再次启动服务器后,从文件中加载数据到Session中
    • Session销毁:
      1、默认情况下,无操作,30分钟自动销毁
    <session-config>
              <session-timeout>30session-timeout>
    seesion-config>
    
    • 1
    • 2
    • 3

    调用Session对象的invalidate()方法
    Cookie和Session都是来完成一次会话内多次请求间数据共享

    • 存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
    • 安全性:Cookie不安全,Session安全
    • 数据大小:Cookie最大3KB, Session不限大小
    • 存储时间:Cookie可长期存储,Session默认30min
    • 服务器性能:Cookie不占服务器资源,Session占服务器资源
      验证码就是使用Java代码生成的一张图片
      验证码作用:防止机器自动注册,攻击服务器

    Filter

    Filter表示过滤器,是JavaWeb三大组件(Servlet
    、Filter、Listener)之一。
    过滤器可以把资源的请求拦截下来,从而实现一些特殊功能。
    过滤器一般完成一些通用的操作,比如:控制权限、统一编码处理、敏感字符处理等
    JSON
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    import com.alibaba.fastjson.JSON;
    
    public class FastJsonDemo {
        public static void main(String[] args) {
            /**
             *
             * 将java对象转为JSON字符串
             */
    
            User user = new User();
            user.setId(1);
            user.setUsername("zhangsan");
            user.setPassword("123");
            String s = JSON.toJSONString(user);
            System.out.println(s);//{"id":1,"password":"123","username":"zhangsan"}
    
    
            //将JSON字符串
           User u =  JSON.parseObject("{\"id\":1,\"password\":\"123\",\"username\":\"zhangsan\"}",User.class);
            System.out.println(u);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    Spring Security:探索 JDBC 身份验证
    图像超分辨率模型:Real-ESRGAN | 论文阅读+实战记录
    http 协议文件上传 - mongoose
    实现分别在Linux、Docker、Kubernetes上安装部署Mysql、Redis、Nginx软件
    元年专利解析|元数据管理系统和使用其对模型对象进行建模的方法
    Sql优化总结!详细!(2021最新面试必问)
    [Unity] 实现AssetBundle资源加载管理器
    Pytest-Allure及Allure命令使用
    【SEO学习】技术总结
    吐槽记~(这个帖子是我的垃圾桶)~哈哈
  • 原文地址:https://blog.csdn.net/pilipala_biu/article/details/126409218