你说得对,Model 在 Spring MVC 里确实是个接口,其定义为 org.springframework.ui.Model,接口在 Java 里需要有具体的实现类才能被使用。在 Spring MVC 处理请求的过程中,框架会自动创建 Model 接口的实现类实例,并将其注入到控制器方法中,所以你能直接在控制器方法里调用 Model 的方法。

今天看到四种登入实现方式:
1.传统的用户名密码,忘记密码:

2.邮箱验证码登入:

3.客户端扫码登入(也重点学一下,SSE 是单向通信,仅支持服务器向客户端发送消息,不过它实现起来更简单,并且基于 HTTP 协议,兼容性更好。今天学到这):

4.微信公众号登入(技术派的实现):

其他:

@Value("classpath:init-schema.sql"),此处的classpath是编译成字节码在target/class目录下的文件

DataSourceInitializer 是 Spring 框架中的一个类,位于 org.springframework.jdbc.datasource.init 包下,主要用于在应用启动时对数据源执行初始化脚本,比如执行 SQL 脚本创建数据库表、插入初始数据等操作。
setDataSource(DataSource dataSource):设置要初始化的数据源。
setDatabasePopulator(DatabasePopulator databasePopulator):设置数据库填充器,该填充器包含要执行的 SQL 脚本。
setEnabled(boolean enabled):设置是否启用数据源初始化功能。

但技术派又自定义了一个databasePopulator 方法是自定义的 DatabasePopulator 创建逻辑,它本质上基于 Spring 框架提供的 ResourceDatabasePopulator 类来实现。自定义逻辑更灵活,适合复杂的业务场景,能根据需求动态配置脚本和参数;框架默认行为更简单,适合快速搭建项目,使用默认配置完成数据库初始化。

同源策略
浏览器的同源策略要求,只有当两个 URL 的协议、域名和端口都相同时,它们才被认为是同源的。不同源之间的资源请求会受到限制,这就是跨域问题的根源。在你的场景中,登录界面使用 localhost 访问,而 SSE 注册使用的是本机 IP 地址,这两个源的域名部分不同(一个是 localhost,一个是具体的 IP 地址),因此会触发跨域问题。

document

在 source.onmessage = function (event) { ... } 代码里,event 是一个事件对象,由浏览器在 EventSource 接收到服务器推送消息时自动创建并传递给事件处理函数。