SpringMVC 404番外篇(一)
SpringMVC 404番外篇(一)记录idea模块新增框架支持后TomCat启动404报错问题起因经过
事情分析比较复杂,如果只想查看解决办法的朋友建议,直接移步到 最终解决办法
在学习SpringMVC的过程中,一般都是新建一个大项目,然后在里面新建许多小模块,运行测试的时候就可以只运行模块,这样既可以不用频繁导包,也可以让自己的项目看起来整洁干净。有一次我在下面建立了一个maven普通项目的模块,如图👇
然后新增模块支持,具体步骤如下:
打开 项目结构 点击 模块 选中当前模块
点击上面的➕,选择web框架👇
新增工件
最后点击确定,完成模块的创建
问题现象 本来以为这样一顿操作过后就能直接配置TomCat,然后启动项目了,结果没想到启动tomcat后显示404
然后不管跳转到哪个网页,全部都是404,描述:源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
排查过程思路
缺少 target 目录
查看编译后的目录结构,发现是这样的 👇
编译的类和web信息,全部输出在 out 文件夹中,正常来说,都是模块目录下, ...
SpringMVC(一)
SpringMVCssm:mybatis + Spring + SpringMVC MVC三层架构
重点:SpringMVC执行流程、SSM框架整合
回顾MCVMVC(Model-View-Controller)是一种设计模式,用于解决用户接口(UI)与业务逻辑分离的问题。它将应用程序分为三个互相交互的部分:模型(Model),视图(View)和控制器(Controller)。这三个部分各自承担不同的任务,这样可以让结构更清晰,也更易于维护和开发。
模型(Model):模型是应用程序的核心部分,代表了业务逻辑,如数据库交互、用户查询处理等。模型对象负责访问数据源,检索数据,存储数据,并在需要时对数据进行处理和计算。
dao层 连接数据库
service层 调用dao层处理业务
视图(View):视图是用户看到和与之交互的界面。它是模型中数据的可视化表示,通常是用户界面元素。视图将模型包含的数据可视化,并不包含业务逻辑。
jsp
控制器(Controller):控制器是模型与视图之间的接口,处理用户的输入并作出响应。控制器从视图接收输入,然后转化为模型能理解的指令。它负责决定 ...
Spring(一)IOC 依赖注入
Spring(一)IOC 依赖注入1. SpringSpring -> 春天! 软件行业的春天!
Spring是一个开源的Java/Java EE应用程序框架,它被设计用来简化企业级应用程序的开发。Spring的核心理念是通过提供一系列的服务,帮助开发者更好地管理对象间的依赖关系,以及更好地组织和结构化他们的应用程序代码。
以下是Spring框架的一些关键特性:
依赖注入(Dependency Injection):Spring框架通过依赖注入(DI)支持松耦合。DI使得组件之间的依赖关系可以通过配置文件或注解进行描述,而不是通过硬编码。
面向切面编程(Aspect-Oriented Programming):Spring支持面向切面编程,使得诸如日志记录、事务管理、安全等跨越多个对象层次的关注点可以被模块化和组织得更好。
事务管理:Spring提供了一套抽象接口以统一各种事务管理API,使得开发者可以使用一致的编程模型跨越不同的事务管理API(如JTA、JDBC、Hibernate、JPA等)。
Spring MVC:Spring的Web MVC框架是一个设计 ...
Spring 系列(四) Spring声明式事务(AOP实现)
Spring 声明式事务1. 回顾事务
把一组业务当成一个业务,要么都成功,要么都失败
事务在项目开发中,十分的重要,涉及到数据一致性问题,不能马虎!
确保完整性和一致性
事务的ACID原则:
原子性(Atomicity):原子性意味着事务是一个不可分割的工作单位,事务中的操作要么全部完成,要么全部不完成。如果一个事务被标记为失败,那么系统将自动回滚到事务开始前的状态,就像这个事务从未被执行过一样。
一致性(Consistency):一致性意味着事务必须将数据库从一个一致性状态转换到另一个一致性状态。一致性状态通常由数据库的一组完整性约束来定义。如果一个事务在执行过程中发生错误,所有的数据修改都会被回滚,数据库状态将回到事务开始前的状态。
隔离性(Isolation):隔离性意味着在并发环境中,一个事务的执行不应该被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,其他事务无法看到这个事务内部的操作。
持久性(Durability):持久性意味着一旦事务被提交,它对数据库中数据的改变就是永久性的。接下来的其他操作或故障不应对其有任何影响。
首先!官方 ...
Spring 系列(三) 整合Mybatis
1. 回忆Mybatis目录结构
编写工具类12345678910111213141516171819202122232425262728293031323334package top.qwwq.utils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;// SqlSessionFactory --> sqlSessionpublic class MybatisUtils { private static final SqlSessionFactory sqlSessionFactory; static { ...
Spring系列(二)自动装配和AOP
Spring系列(二)自动装配和AOP1. 自动装填自动装配:
byName:会自动在容器上下文中查找,和自己set方法后面的值对应的bean id
byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean12345<bean id="people" class="top.qwwq.pojo.People" autowire="byName"> <property name="name" value="EnderKC"/> <property name="dog" ref="dog"/> <property name="cat" ref="cat"/></bean>
自动装配注解:
@Autowired 自动装配 Spring的包
@Resource 自动装配 javax的包
@Nullable 允许为nu ...
MyBatis 基础 一(环境搭建、基础使用)
MyBatis 基础 一(环境搭建、基础使用)开发环境:
idea 专业版
JDK 18
mybatis-3.5.11
MySQL Ver 8.0.29 for Win64 on x86_64 (MySQL Community Server - GPL)
MySQL 用到的可视化开发软件
IDEA 有很好的命令提示
Navicat Premium 16 颜值高
SQLyog - 64 bit 界面较为复古 功能和Navicat差不多
环境搭建首先,我们需要一个Maven项目
把创建好的项目中的src目录删掉,剩下的文件就会看起来比较整洁,目前 项目中的文件有 .idea pom.xml 。编辑pom.xml 导入我们需要的依赖
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768<?xml version="1.0" encoding=" ...
Bark 苹果推送使用指北
Bark 苹果推送使用指北1.1 关于 Bark 详情请看中文官方文档:点击这里
隐私保护:如果你的数据特别敏感,请将Bark部署到私人服务器。所有的数据将只在 你的手机、你的服务器、Apple推送服务器之间传输。
历史消息通过 NotificationServiceExtension 扩展,在收到推送时将推送信息保存在本地,不会经过其他任何设备。历史记录仅由个人iCloud私有库进行同步。可以确保你产生的任何通知,将只留在你的设备与你的iCloud中
1.2 如何部署
如果使用官方服务器,或者已经部署好服务器,请跳过该步骤。
Docker 部署:
1docker run -dt --name bark -p 8080:8080 -v `pwd`/bark-data:/data finab/bark-server
(Docker 如何安装? 请自行百度 看这里)
2.1有服务器了该怎么使用呢?
拿出你的安卓手机 ( 什么?你没有安卓手机玩个蛋) 打开通知滤盒子
打开增强
打开Webhook
增加规则
增加规则这里可以选择post请求,请求的URL就 ...
随身WIFI 短信转发 MQTT QQ机器人 部署指北
前言 本教程使用于对Linux、Python、docker有一定基础的人群,纯小白用户有一定的上手难度,如果您为小白 请放弃本教程 请认真阅读本教程 善于利用NewBing等搜索引擎 可以在评论下方提问。
第一步 硬件准备
提示 市面上随身WIFI千奇百怪,但是内部使用的方案是大差不差,本教程所使用的随身WIFI型号为 淘宝工厂版的新训随身WIFI UFI_003 512mb + 4G 组合 自带卡槽 。
1. 对棒子备份数据 这段网上的教程比较多了,讲的肯定比我这个菜鸡清楚,这里推荐
高通骁龙芯片的随身wifi入门刷机教程 @伏莱兮浜 大佬的
2. 刷入Debian系统 在安卓系统备份完成之后就可以刷入Debian了,首先插入棒子 在cmd输入指令 adb reboot bootloader 然后我这里刷入的是 @苏苏小亮亮 大佬 的包
链接在这里:点击这里查看下载地址和文档
根据介绍,直接双击 Flash.bat 就行了,然后等待棒子刷机成功。
3. 进入Debian系统 刷好Debian后怎么进去呢? 我们在cmd中输入 adb shell 就可 ...
初认识墨水屏-GxEPD
关于 GxEPD2 库的使用测试
网络上实在是没有关于 GxEPD 库的说明,好像所有人都会用(除了我),这篇文章旨在帮助第一次接触的小白踩坑 GxEPD
1. api测试1.1 display.nextPage()从源码中看,display.nextPage() 返回的是一个bool类型的数据,应该是显示下一页面,并判断屏幕是否显示完成,例程中的:
123456do{ display.fillScreen(GxEPD_WHITE); // 设置背景颜色 display.setCursor(x, y); // 设置光标位置 (显示图像的起始位置) display.print("hellowprld"); // 要显示的文本} while (display.nextPage());
从上述代码可以看到,在显示未完成的时候会执行一个循环,将图像显示出来。在实际测试中确实如此。
下面这样做也可以将画面正常显示出来:
1234/*不带 do While 循环*/display.setCursor(x + 10, y + 1 ...
