Spring MVC
Spring web MVC
Tomcat
Tomcat 是一个开源的轻量级web服务器和servlet容器。它实现了java servlet等java EE 规范的核心功能,常用于部署和运行javaweb应用程序。
Tomcat 是一个严格遵循Servlet 规范开发出来的,可以独立安装和运行Java web服务器/servlet容器
核心功能:
- servlet容器:支持servlet的执行,处理HTTP请求和响应
- Web服务器:提供静态资源(如HTML)的访问能力,支持基本的Http服务
servlet
-
API示范
创建项目/配置文件
-
在IDEA中创建Maven项目
-
在pom.xml 文件中添加servlet依赖(置于< project >< /project >标签下)
<dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <!--servlet依赖版本应与jdk和tomcat的版本相匹配--> <version>6.1.0</version> <scope>provided</scope> </dependency> </dependencies>
-
-
在main路径下创建webapp/Web-INF/web.xml,在xml文件中添加以下内容
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> </web-app>-
API示例
import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; //设置访问路径(url) @WebServlet("/method") //继承HttpServlet并重写doGet和doPost方法 public class MethodServlet extends HttpServlet { //接收method=post的请求 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("doPost"); resp.setContentType("text/html; charset=utf-8"); resp.getWriter().write("doPost"); } //接收method=put的请求 @Override protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("doPut"); resp.setContentType("text/html; charset=utf-8"); resp.getWriter().write("doPut"); } //接收method=delete的请求 @Override protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException { System.out.println("doDelete"); resp.setContentType("text/html; charset=utf-8"); resp.getWriter().write("doDelete"); } }
-
-
生命周期
servlet生命周期由web容器(如Tomcat)管理,包含加载,初始化,处理请求和销毁四个阶段
每个阶段对应特定的方法调用,开发者可以 通过重写这些方法实现自定义逻辑
- 类加载:Web容器通过类加载器加载 Servlet 类(通常首次请求触发或容器启动时预加载,字节码文件被加载到内存但未实例化)。具体类加载流程请阅读:Java虚拟机——JVM(Java Virtual Machine)解析一
- 实例化:确认Servlet类成功加载后立刻执行,在整个Web容器中每种Servlet类(如HttpServlet)只会有一个实例化对象
- 初始化:Web容器调用刚刚创建好的Servlet实例的init(ServletConfig config)方法,在整个servlet实例的生命周期中仅调用一次,主要作用是读取配置和资源加载。若初始化失败,抛出
ServletException,Servlet不会被加入可用队列 - 处理请求:Web容器为每个请求创建线程,调用service(ServletRequest req, ServletResponse res)方法。service() 方法根据
HTTP请求类型(get/post)调用doGet()或doPost() - 销毁:Web容器调用 destroy()方法,Servlet 实例被标记为垃圾回收
- 类加载:Web容器通过类加载器加载 Servlet 类(通常首次请求触发或容器启动时预加载,字节码文件被加载到内存但未实例化)。具体类加载流程请阅读:Java虚拟机——JVM(Java Virtual Machine)解析一
Spring 配置文件
配置文件
SpringBoot配置文件:SpringBoot支持多种类型的配置文件,常见的格式包括properties、yaml和yml,主要用于集中管理应用程序的各种配置参数,简化部署和开发过程中的环境切换
YAML和YML本质上是相同的文件格式,只是文件扩展名的不同,两者在功能和使用上没有区别
properties
- properties配置文件是最早期的配置文件格式,也是创建SpringBoot项目默认的配置文件
- 采用常见的键值对格式(key=value)
- 支持# 开头的注释
#应用程序名称
spring.application.name=configuration
#应用程序端口号
server.port=8080
#数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/database_name?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
yml
- 采用键值对格式(key:value),冒号后面必须有空格
- 数据序列化格式,通过缩进表示层级关系
- 支持#开的注释
spring:
application:
#应用程序名称
name: configuration
#数据库连接信息
datasource:
url: jdbc:mysql://127.0.0.1:3306/database_name?characterEncoding=utf8&useSSL=false
username: root
password: root
#应用程序端口号
server:
port: 8080
properties优先级高于yaml
@Value注解
作用:是Spring框架提供了一个@Value注解(org.springframework.beans.factory.annotation.Value),用于将外部配置文件中的值注入到Spring管理的Bean中
properties 和 yml 的读取方式相同
package org.example.configuration.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Config {
@Value("${spring.application.name}")
private String applicationName;
@Value("${server.port}")
private Integer port;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
public void print() {
System.out.println("applicationName=" + applicationName);
System.out.println("port=" + port);
System.out.println("url=" + url);
System.out.println("username=" + username);
System.out.println("password=" + password);
}
}
package org.example.configuration;
import org.example.configuration.config.Config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class ConfigurationApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(ConfigurationApplication.class, args);
Config config = context.getBean(Config.class);
config.print();
}
}
运行结果:
applicationName=configuration
port=8080
url=jdbc:mysql://127.0.0.1:3306/database_name?characterEncoding=utf8&useSSL=false
username=root
password=root

浙公网安备 33010602011771号