2024-09-04

Spring MVC 是一个用于创建web应用程序的框架,它是Spring的一部分,提供了MVC(模型-视图-控制器)架构和用于开发web应用程序的组件。

一文速查全览:

Spring MVC 核心组件

  • DispatcherServlet:前端控制器,用于处理所有请求和响应。
  • HandlerMapping:用于查找处理请求的Controller。
  • HandlerAdapter:用于支持多种类型的Controller。
  • Controller:处理用户请求,返回ModelAndView对象。
  • View Resolver:解析视图,将逻辑视图名转换为具体View实现。
  • View:渲染结果,将模型数据渲染成HTML响应。

配置示例




<!-- 配置Spring MVC DispatcherServlet -->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

注解示例




// 使用@Controller注解标识一个类为Controller
@Controller
public class MyController {
    // 使用@RequestMapping注解映射URL到具体方法
    @RequestMapping("/greeting")
    public String greeting() {
        return "greeting"; // 返回逻辑视图名
    }
}

Spring MVC 工作流程

  1. 用户发送请求到前端控制器(DispatcherServlet)。
  2. DispatcherServlet收到请求,通过HandlerMapping找到对应的Controller。
  3. HandlerMapping将Controller信息返回给DispatcherServlet。
  4. DispatcherServlet将请求交给HandlerAdapter。
  5. HandlerAdapter调用Controller的方法处理请求,得到ModelAndView对象。
  6. HandlerAdapter将ModelAndView返回给DispatcherServlet。
  7. DispatcherServlet将ModelAndView传递给View Resolver解析视图。
  8. View Resolver解析后返回真正的视图对象。
  9. DispatcherServlet对视图进行渲染,将响应返回给用户。

Spring MVC 优势

  • 简化了web开发,使用注解和少量配置即可快速搭建应用。
  • 灵活的URL映射和灵活的Controller组件支持。
  • 支持REST风格的URL。
  • 支持强大的表单绑定、验证等功能。
  • 支持国际化和主题等。
  • 支持静态资源服务。

Spring MVC 常用注解

  • @Controller:标识一个类为Controller。
  • @RequestMapping:映射HTTP请求到具体方法。
  • @RequestParam:绑定请求参数到方法参数。
  • @PathVariable:绑定URL模板变量到方法参数。
  • @ModelAttribute:绑定请求参数到命令对象。
  • @RequestBody:绑定请求体到方法参数。
  • @ResponseBody:将返回值放入响应体。

Spring MVC 学习资源

Spring MVC 框架选择

2024-09-04

在Redis中,maxmemory参数用于指定Redis最大使用的内存量。当到达这个内存使用量时,Redis将会根据maxmemory-policy参数指定的策略来决定如何处理新的写入操作。

配置maxmemory参数

redis.conf文件中配置maxmemory参数,指定最大内存使用量。例如,要设置为2GB,可以这样配置:




maxmemory 2gb

配置maxmemory-policy参数

maxmemory限制到达时,需要通过maxmemory-policy参数来指定内存达到阈值时的行为。以下是一些常用的策略:

  • noeviction: 不进行驱逐,写命令会返回错误。
  • allkeys-lru: 当内存不足以容纳更多数据时,使用最近最少使用算法进行驱逐。
  • volatile-lru: 只对设置了过期时间的键进行最近最少使用算法驱逐。
  • allkeys-random: 在内存达到限制时随机驱逐键。
  • volatile-random: 在内存达到限制时随机驱逐设置了过期时间的键。
  • volatile-ttl: 驱逐具有更早过期时间(TTL)的键。

例如,配置为LRU(最近最少使用)策略:




maxmemory-policy allkeys-lru

配置建议

  • 设置maxmemory时,应该为系统的实际可用内存量留出一些空间,以便Redis可以继续执行任务,比如执行持久化操作。
  • 根据应用程序的数据访问模式选择合适的maxmemory-policy策略。
  • 如果应用程序对响应时间敏感,可以使用allkeys-lruvolatile-lru策略。
  • 如果应用程序对数据缓存效果敏感,可以使用allkeys-random策略。
  • 在生产环境中,应该监控Redis的内存使用情况,并适时调整maxmemorymaxmemory-policy参数。

示例配置




# 设置最大内存为2GB
maxmemory 2gb

# 设置内存达到最大值时的驱逐策略为LRU
maxmemory-policy allkeys-lru

以上配置将Redis限制在2GB内存使用量,并在达到限制时使用LRU算法进行数据驱逐。

2024-09-04

在Windows上安装SQLite通常不需要特殊的步骤,因为SQLite是作为一个自包含的二进制文件提供的,你可以从SQLite的官方网站下载它。以下是安装步骤:

  1. 访问SQLite官方网站下载页面:https://www.sqlite.org/download.html
  2. 选择适合Windows的版本,通常是一个名为 sqlite-tools-win32-*.zipsqlite-dll-win64-*.zip 的压缩包。
  3. 下载并解压缩文件。
  4. 将解压缩的SQLite二进制文件添加到系统的PATH环境变量中,这样你就可以从任何命令行窗口运行SQLite了。

以下是如何在Windows上安装SQLite的示例步骤:




# 1. 访问SQLite官方网站下载页面
# 2. 下载适合你的系统(32位或64位)的压缩包
# 3. 解压缩文件到你选择的目录,例如 C:\sqlite
 
# 将SQLite添加到PATH环境变量
setx PATH "%PATH%;C:\sqlite"
 
# 注意:如果你使用的是命令行,你可能需要重新打开一个新的命令行窗口来使PATH变量的更改生效。
 
# 验证安装
sqlite3 --version

请确保替换 C:\sqlite 为你解压缩SQLite二进制文件的实际目录。

如果你想要在Python中使用SQLite,通常情况下Python标准库中已经包含了 sqlite3 模块,无需额外安装。如果你需要一个更高级的SQLite接口,可以考虑安装 pysqlite3sqlite3 的替代包。

2024-09-04

Redis提供了两种持久化机制RDB(Redis DataBase)和AOF(Append Only File)。

RDB:

RDB是Redis默认的持久化方式。在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshotting。

配置示例:




save 900 1      # 900秒内至少1个键被修改则触发保存
save 300 10     # 300秒内至少10个键被修改则触发保存
save 60 10000   # 60秒内至少10000个键被修改则触发保存
 
dbfilename dump.rdb                      # RDB文件名
dir /path/to/your/redis/directory        # RDB文件存储目录

AOF:

AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。

配置示例:




appendonly yes                   # 开启AOF持久化
appendfilename "appendonly.aof"  # AOF文件名
dir /path/to/your/redis/directory        # AOF文件存储目录
 
# 同步策略
appendfsync everysec              # 每秒同步一次至磁盘
# appendfsync everysec           # 每次写命令都同步至磁盘(慢,安全)
# appendfsync no                 # 完全依赖操作系统,不同步(快,不安全)

在实际应用中,可以根据数据的重要性和性能需求选择合适的持久化方式,或者两者结合使用。

2024-09-04



# 安装MongoDB
choco install mongodb
 
# 启动MongoDB服务
net start MongoDB
 
# 下载并安装cpolar内网穿透客户端
# 这里以Windows系统为例,如果是其他系统请使用对应的安装命令
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://www.cpolar.com/download/windows/cpolar.exe')
 
# 注册cpolar账号,获取token,并在客户端登录
# 请在浏览器打开 https://www.cpolar.com/register 注册账号
# 登录后,在用户中心 > 身份验证 > API Token 获取您的API Token
cpolar client login 您的API_Token
 
# 公网访问本地MongoDB数据库
# 将本地MongoDB的27017端口映射到任意可用的公网端口
cpolar tcp 27017
 
# 在这一步,cpolar会生成一个公网访问所需的公网端口号,例如:40521
# 此时您可以通过MongoDB客户端使用公网IP和这个端口访问您的本地MongoDB数据库
# 公网IP可通过以下命令查询
cpolar client tcping
 
# 例如:mongodb://localhost:27017 变成了 mongodb://公网IP:生成的公网端口

以上脚本提供了在Windows环境下安装MongoDB,并使用cpolar进行内网穿透的步骤。在实际操作时,需要替换您的API_Token为您从cpolar官网获取的API Token,并在MongoDB客户端中使用生成的公网IP和端口进行数据库访问。

2024-09-04

在CentOS系统上安装Tomcat的步骤如下:

  1. 安装Java环境

    Tomcat需要Java环境才能运行,可以通过安装OpenJDK来满足需求。




sudo yum install java-1.8.0-openjdk
  1. 验证Java安装



java -version
  1. 创建Tomcat用户

    为Tomcat创建一个专用的系统用户,这样可以增加系统的安全性。




sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
  1. 下载Tomcat

    从官网下载Tomcat压缩包,这里以Tomcat 9为例。




cd /tmp
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.62/bin/apache-tomcat-9.0.62.tar.gz
  1. 解压Tomcat

    将Tomcat解压到/opt/tomcat目录。




sudo tar xf apache-tomcat-*tar.gz -C /opt/tomcat
sudo ln -s /opt/tomcat/apache-tomcat-* /opt/tomcat/latest
sudo chown -RH tomcat: /opt/tomcat/latest
sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'
  1. 创建Systemd服务文件

    创建一个systemd服务文件来管理Tomcat服务。




sudo nano /etc/systemd/system/tomcat.service

添加以下内容:




[Unit]
Description=Tomcat 9 servlet container
After=network.target
 
[Service]
Type=forking
 
User=tomcat
Group=tomcat
 
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
 
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
 
[Install]
WantedBy=multi-user.target
  1. 启动Tomcat服务



sudo systemctl daemon-reload
sudo systemctl start tomcat
  1. 设置开机启动



sudo systemctl enable tomcat
  1. 验证Tomcat安装

    打开你的Web浏览器,输入服务器的IP地址或域名后跟:8080,你应该看到Tomcat的默认页面。

以上步骤安装了Tomcat 9,并通过systemd管理服务。确保你的防火墙设置允许8080端口的流量,否则你可能无法通过网络访问Tomcat。

2024-09-04

CVE-2022-22947是Spring框架中存在的一个远程代码执行漏洞。该漏洞源于Spring Cloud Function中的web模块未正确处理函数参数,攻击者可以构造特定的HTTP请求利用此漏洞执行任意代码。

解决方法:

  1. 升级Spring相关库到安全版本:

    • 如果使用Spring Boot,请升级到安全版本:2.5.15、2.6.9或更高版本。
    • 如果使用Spring Cloud,请升级到安全版本:2020.0.4、2021.0.10或更高版本。
    • 如果使用Spring Framework,请升级到安全版本:5.3.17、5.2.20或更高版本。
  2. 应用安全更新后,确保重新部署应用并进行充分的测试,以确保更新没有引入新的问题。
  3. 如果无法立即升级,建议采取临时措施,比如禁用不必要的Spring Cloud Function web模块的端点,或者使用安全更新之前的版本。
  4. 监控安全更新发布的官方通知,以获取最新的修复信息和建议。
2024-09-04

Tomcat 服务器的默认端口号是 8080。这意味着,当你访问 Tomcat 服务器时,如果没有指定端口号,浏览器会默认尝试通过 8080 端口来获取内容。

此外,Tomcat 还使用了一些其他的端口,例如:

  1. 8005:用作关闭 Tomcat 的 shutdown 端口。
  2. 8009:用作与 HTTP 连接器的 AJP (Apache JServ Protocol)端口,AJP 协议是用来在 Tomcat 和 Apache 服务器之间进行通信的。

如果你需要更改这些端口,可以在 Tomcat 的配置文件中进行设置,通常这些配置文件位于 conf 目录下,例如 server.xml

以下是一个简单的例子,展示了如何在 server.xml 文件中更改 Tomcat 的默认端口号(8080):




<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

在这个例子中,我们将默认的连接器端口从 8080 更改为 8081。当然,你需要重启 Tomcat 以使更改生效。

2024-09-04

解释:

Spring Cloud Gateway 注册到 Nacos 失败可能是由于网络问题、配置错误、Nacos 服务未运行或版本不兼容等原因造成的。

解决方法:

  1. 检查网络连接:确保网络通畅,Gateway服务能够访问Nacos服务的地址。
  2. 检查Nacos服务状态:确保Nacos服务已启动且运行正常。
  3. 检查配置:确保application.properties或application.yml中关于Nacos的配置正确,包括服务名、Nacos地址、端口等。
  4. 版本兼容性:确保Spring Cloud Gateway和Spring Cloud alibaba的版本兼容。
  5. 查看日志:检查Gateway服务的日志文件,查找具体错误信息,根据错误信息进一步排查问题。
  6. 防火墙/安全组设置:检查是否有防火墙或安全组规则阻止了Gateway服务注册到Nacos的端口。

如果以上步骤无法解决问题,可以考虑查看Spring Cloud Gateway和Spring Cloud Alibaba相关的官方文档,或者在Stack Overflow等社区搜索类似问题,以获取更多的解决方案。

2024-09-04

在Spring Boot 3.2.0版本中搭建Nacos,你需要确保Nacos的客户端版本兼容你使用的JDK版本。以下是搭建步骤:

  1. pom.xml中添加Nacos的依赖:



<dependencies>
    <!-- Spring Cloud Nacos Discovery -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>最新兼容JDK 17的版本</version>
    </dependency>
</dependencies>
  1. application.propertiesapplication.yml中配置Nacos服务器地址:



spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  1. 在Spring Boot应用的主类上添加@EnableDiscoveryClient注解:



import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 
@SpringBootApplication
@EnableDiscoveryClient
public class NacosDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosDemoApplication.class, args);
    }
}

确保你使用的Spring Cloud Alibaba Nacos Discovery依赖库版本兼容JDK 17。如果你不确定哪个版本兼容,可以查看官方文档或GitHub的release信息。

启动你的Spring Boot应用,它将自动注册到Nacos服务列表中。你可以在Nacos控制台查看服务状态。