Tianyi's Blog Tianyi's Blog
首页
  • 计算机网络
  • 操作系统
  • 计算机科学
  • Nginx
  • Vue框架
  • 环境配置
  • Java
  • JVM
  • Spring框架
  • Redis
  • MySQL
  • RabbitMQ
  • Kafka
  • Mirror Sites
  • Dev Tools
  • Docker
  • Jenkins
  • Scripts
  • Windows
  • 科学上网
  • 旅行
  • 网站日记
  • 软件
  • 电子产品
  • 杂野
  • 分类
  • 友情链接
GitHub (opens new window)

Tianyi

一直向前,永不停止
首页
  • 计算机网络
  • 操作系统
  • 计算机科学
  • Nginx
  • Vue框架
  • 环境配置
  • Java
  • JVM
  • Spring框架
  • Redis
  • MySQL
  • RabbitMQ
  • Kafka
  • Mirror Sites
  • Dev Tools
  • Docker
  • Jenkins
  • Scripts
  • Windows
  • 科学上网
  • 旅行
  • 网站日记
  • 软件
  • 电子产品
  • 杂野
  • 分类
  • 友情链接
GitHub (opens new window)
  • Java

  • Golang

  • JVM的奇妙世界

  • Spring

    • SSM-Java开发工具链
      • Maven
        • Maven工程结构
        • Maven生命周期
        • Maven 常用命令
      • Jetty
        • dependency
        • 动态修改静态文件
        • 字符编码
      • Http 请求
        • tips
        • 常见的几个错误码
        • Tomcat - 中文乱码问题
        • 处理前后端的时间格式
        • Json解析
      • 模板引擎
      • 声明式事务@Transactional
    • SSM-IOC&AOP
    • MyBatis
    • MyBatis-Plus
    • mybatis搭建demo
    • SSM-JUnit、文件上传与拦截器
    • Spring基础
    • Spring Framework6
  • Spring增强封装

  • Redis

  • MySQL

  • RabbitMQ

  • Kafka

  • 分享

  • 后端
  • Spring
tianyi
2023-03-02
目录

SSM-Java开发工具链

# Maven

  • Define
    • Maven是Apache开源项目管理工具,对软件项目提供构建与依赖管理

    • Maven为Java项目提供了统一的构建与管理方式,是业界标准

    • Maven是基于项目对象模型(pom.xml)来管理软件工程

# Maven工程结构

目录 用途
${basedir} 根目录,用于保存pom.xml
${basedir}/src/main/java Java源代码目录
${basedir}/src/main/resources 资源目录,保存配置文件、静态图片等
${basedir}/src/test/java 测试类的源代码
${basedir}/src/test/resources 测试时需要使用的资源文件
${basedir}/target 项目输出的目录,用于存储jar、war文件
${basedir}/target/classes 字节码(.class)的编译输出目录
${basedir}/pom.xml 项目(Project)对象(Object)模型(Model)文件
第一个是组织名称、组件、名称以及版本号

Note:没想到这样在项目代码里面也能够直接配置镜像源,不需要在 本地目录的 maven setting 里面进行配置。新发现,不错

image-20250228005046790

在软件版本管理中,版本号后缀标注具有特定的含义区分:

  1. Beta(贝塔)版本:表示开放测试版,面向部分用户群体进行功能测试
  2. Alpha(阿尔法)版本:属于内部测试版,仅供开发团队及指定测试人员使用
  3. Release版本:为开放的正式稳定版本,经过充分测试后向所有用户发布

image-20250228005223206

本地仓库其实就是中央仓库的一个镜像,是用来帮我们减低网络压力的

# Maven生命周期

命令 用途
mvn archetype:generate 创建Maven工程结构
mvn validate 验证项目是否正确,所有必要的信息可用
mvn compile 编译源代码
mvn test 执行测试用例
mvn verify 对项目执行验证
mvn package 项目打包
mvn install 安装至本地仓库
mvn deploy 发布至远程仓库

# Maven 常用命令

命令 输出位置 主要用途 依赖关系可见范围
mvn package 项目下的 target/ 目录 本地验证构建结果 仅当前项目
mvn install 本地 Maven 仓库 供本地其他项目依赖 本地所有项目
mvn deploy 远程 Maven 仓库 供团队或远程环境使用 所有有权访问仓库的项目

# Jetty

# dependency

<!-- Jetty 启用一定要将打包从Jar改为war -->
<packaging>war</packaging>
<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <!--嵌入式Jetty的Maven插件-->
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.4.14.v20181114</version>
            <configuration>
                <webApp>
                    <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
                </webApp>
                <!--应用启动后加载webapp网页与资源-->
                <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
                <httpConnector>
                    <!--应用端口号,默认8080端口-->
                    <port>80</port>
                </httpConnector>
            </configuration>
        </plugin>
    </plugins>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 动态修改静态文件

修改 webdefault.xml 里面的一个参数,为了能够在服务器启动时修改静态文件,需要把

useFileMappedBuffer --》 false

image-20250302181257145

# 字符编码

image-20250302181417154

<locale-encoding-mapping>
  <locale>zh</locale>
  <encoding>UTF-8</encoding>
</locale-encoding-mapping>
1
2
3
4

# Http 请求

在HTTP请求中,常见的参数传递方式主要有两种:

  1. URL参数(适用于GET请求)
    • 参数附加在URL路径后,以键值对形式出现,格式为?key1=value1&key2=value2
    • 后端通过request.param获取参数值
    • 特点:参数长度受限,安全性较低,适用于简单数据传输
  2. 请求体参数(适用于POST请求)
    • 参数通过表单数据(Form Data)或JSON等形式传递
    • 后端通过request body获取数据
    • 特点:支持大数据传输,安全性较高,适用于复杂数据交互

# tips

  • @RequestMapping-通用绑定
  • @GetMapping - 绑定Get请求
  • @PostMapping-绑定Post请求

# 常见的几个错误码

  • HTTP 400错误通常表明客户端请求中存在数据结构、格式或语义层面的根本性问题,服务器无法正确解析或处理请求
  • HTTP 405 Method Not Allowed 状态码是服务器明确表示不支持客户端请求所用的HTTP方法时的标准响应。

# Tomcat - 中文乱码问题

  • 对于 Response 响应乱码,需在 Spring 中配置StringHttpMessageConverter;
  • 对于 Get 请求乱码,在server.xml中增加URIEncoding属性(Jetty 服务器无需设置);
  • 对于 Post 请求乱码,在web.xml中配置CharacterEncodingFilter(Jetty 服务器无需设置)

image-20250301211136356

image-20250301211316843

# 处理前后端的时间格式

 @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy", timezone = "GMT+8")
 @DateTimeFormat(pattern = "dd/MM/yyyy")
 private LocalDate asAtDate;
1
2
3
  • @JsonFormat → 控制Response时间格式
  • @DateTimeFormat → 处理Request时间格式

# Json解析

        <!-- SpringMVC支持的JSON序列化工具包Jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 模板引擎

image-20250302230053922

学完了,也实际盘过几个项目,但是就最近几年的经历来说,还真的没有遇到过有关这种技术的项目。

  • 这些技术在一些老项目中仍然广泛使用,尤其是在 Java EE 生态中。如果您的工作环境或项目需求涉及这些技术,值得一学。
  • 如果计划进入一些重视传统技术的公司(如银行、政府机构等),掌握这些技能可能会增加您的竞争力。如果目标是现代开发,优先级较低。因为现在走的都是前后端分离的架构,深入这种技术价值不大。

# 声明式事务@Transactional

在Spring框架中,@Transactional注解的默认行为是:当方法成功执行时自动提交事务,当抛出RuntimeException及其子类异常时自动回滚事务。

通过指定rollbackFor = Exception.class参数,可以将触发事务回滚的异常类型扩展到所有异常。这一配置虽小,但对系统安全至关重要。

一个场景是:当 writeOrderToFile 抛出 IOException 时,因为它不是 RuntimeException 的子类,Spring 的事务管理器不会回滚事务。(当然我这个场景只是为了说明我们在使用 transaction 这个类的时候,最好自定义一下异常类,best practice!)

/*
@Transactional 当方法执行成功时自动提交,抛出RuntimeException及其子类时自动回滚
利用rollbackFor = Exception.class遇到所有类型异常都会滚
*/
@Transactional(rollbackFor = Exception.class)

/* 【提高效率】:不使用事务,方法注解优先级比类注解高*/
@Transactional(propagation = Propagation.NOT_SUPPORTED , readOnly = true)
public Goods findById(Integer goodsId) {
    return  goodsMapper.findById(goodsId);
}
1
2
3
4
5
6
7
8
9
10
11

不当的事务配置可能导致严重的安全隐患。例如:

  • 系统漏洞被恶意利用
  • 非法操作(如刷钱等欺诈行为)
  • 引发重大的经济损失
完善页面 (opens new window)
JVM调优
SSM-IOC&AOP

← JVM调优 SSM-IOC&AOP→

最近更新
01
JDK
02-23
02
BadTasteCode && 优化
09-11
03
Gradle 实践操作指南及最佳实践
09-11
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Tandy | 粤ICP备2023113440号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式