SpringMVC01

SpringMVC

  • [1. 学习⽬标](#1. 学习⽬标)
  • [2. 什么叫MVC?](#2. 什么叫MVC?)
  • [3. SpringMVC 框架概念与特点](#3. SpringMVC 框架概念与特点)
  • [4. SpringMVC 请求流程](#4. SpringMVC 请求流程)
  • [5. Spring MVC 环境搭建](#5. Spring MVC 环境搭建)
  • [6. URL 地址映射配置](#6. URL 地址映射配置)
  • [7. 参数绑定](#7. 参数绑定)
  • [8. JSON 数据开发](#8. JSON 数据开发)

1. 学习⽬标

2. 什么叫MVC?

模型-视图-控制器(MVC)是⼀个众所周知的以设计界⾯应⽤程序为基础的设计思想。它主要通过**分离模型视图控制器在应⽤程序中的⻆⾊将业务逻辑从界⾯中解耦。通常,模型负责封装应⽤程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来⾃⽤户的请求,并调⽤后台服务(service或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了⼀些数据在视图层展示。控制器收集这些数据及准备模型在视图层展示。MVC模式的核⼼思想是将业务逻辑从界⾯中分离出来,允许它们单独改变⽽不会相互影响。

3. SpringMVC 框架概念与特点

Spring MVC是什么?

Spring MVC是Spring家族中的⼀个web成员,它是⼀种基于Java的实现了Web MVC设计思想的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦,基于请求驱动指的就是使⽤请求-响应模型,框架的⽬的就是帮助我们简化开发,SpringMVC也是要简化我们⽇常Web开发的。

Spring MVC能帮我们做什么?

java 复制代码
1. 让我们能⾮常简单的设计出⼲净的Web层;
2. 进⾏更简洁的Web层的开发;
3. 天⽣与Spring框架集成(如IOC容器、AOP等);
4. 提供强⼤的约定⼤于配置的契约式编程⽀持;
5. 能简单的进⾏Web层的单元测试;
6. ⽀持灵活的URL到⻚⾯控制器的映射;
7. ⾮常容易与其他视图技术集成,如jsp、Velocity、FreeMarker等等,因为模型数据不放在特定的
API⾥,⽽是放在⼀个Model⾥(Map数据结构实现,因此很容易被其他框架使⽤);
8. ⾮常灵活的数据验证、格式化和数据绑定机制,能使⽤任何对象进⾏数据绑定,不必实现特定框
架的API;
9. ⽀持灵活的本地化等解析;
10. 更加简单的异常处理;
11. 对静态资源的⽀持;
12. ⽀持Restful⻛格

4. SpringMVC 请求流程

Spring MVC 请求处理流程分析

java 复制代码
Spring MVC框架也是⼀个基于请求驱动的Web框架,并且使⽤了前端控制器模式(是⽤来提供⼀个集
中的请求处理机制,所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计,再根据请求映射规则分发
给相应的⻚⾯控制器(动作/处理器)进⾏处理。⾸先让我们整体看⼀下Spring MVC处理请求的流程:

1. ⾸先⽤户发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;
2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调⽤HandlerMapping;
3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及Handler对
象对应的拦截器);
4. DispatcherServlet 根据获得的HandlerExecutionChain,选择⼀个合适的HandlerAdapter。(附注:
如果成功获得HandlerAdapter后,此时将开始执⾏拦截器的preHandler(...)⽅法);
5. HandlerAdapter根据请求的Handler适配并执⾏对应的Handler;HandlerAdapter(提取Request中的
模型数据,填充Handler⼊参,开始执⾏Handler(Controller)。 在填充Handler的⼊参过程中,根
据配置,Spring将做⼀些额外的⼯作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成⼀个对象,将对象转换为指定
的响应信息。
数据转换:对请求消息进⾏数据转换。如String转换成Integer、Double等数据格式化:
数据格式化。 如将字符串转换成格式化数字或格式化⽇期等
数据验证: 验证数据的有效性(⻓度、格式等),验证结果存储到BindingResult或Error中)
6. Handler执⾏完毕,返回⼀个ModelAndView(即模型和视图)给HandlerAdaptor
7. HandlerAdaptor适配器将执⾏结果ModelAndView返回给前端控制器。
8. 前端控制器接收到ModelAndView后,请求对应的视图解析器。
9. 视图解析器解析ModelAndView后返回对应View;
10. 渲染视图并返回渲染后的视图给前端控制器。
11、最终前端控制器将渲染后的⻚⾯响应给⽤户或客户端

5. Spring MVC 环境搭建

  1. 开发环境
    Idea + Maven + Jdk1.8 + Jetty
  2. 新建 Maven webApp
    Idea 下创建 springmvc01 ⼯程
  3. pom.xml 坐标添加
    将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖
java 复制代码
<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <maven.compiler.source>1.8</maven.compiler.source>
 <maven.compiler.target>1.8</maven.compiler.target>
 </properties>
 <dependencies>
 <!-- spring web -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-web</artifactId>
 <version>5.2.4.RELEASE</version>
 </dependency>
 <!-- spring mvc -->
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>5.2.4.RELEASE</version>
  </dependency>
 <!-- web servlet -->
 <dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <version>3.0.1</version>
 </dependency>
 
 </dependencies>
<build>
 <plugins>
 <!-- 编译环境插件 -->
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.3.2</version>
 <configuration>
 <source>1.8</source>
 <target>1.8</target>
 <encoding>UTF-8</encoding>
 </configuration>
 </plugin>
 <!-- jetty插件 -->
 <plugin>
 <groupId>org.eclipse.jetty</groupId>
 <artifactId>jetty-maven-plugin</artifactId>
 <version>9.4.27.v20200227</version>
 <configuration>
 <scanIntervalSeconds>10</scanIntervalSeconds>
 <!-- 设置端⼝ -->
 <httpConnector>
 <port>8080</port>
 </httpConnector>
 <!-- 设置项⽬路径 -->
 <webAppConfig>
 <contextPath>/springmvc01</contextPath>
 </webAppConfig>
 </configuration>
 </plugin>
 </plugins>
</build>
  1. 配置 web.xml
java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <!-- 编码过滤 utf-8 -->
 <filter>
 <description>char encoding filter</description>
 <filter-name>encodingFilter</filter-name>
 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filterclass>
 <init-param>
 <param-name>encoding</param-name>
 <param-value>UTF-8</param-value>
 </init-param>
 </filter>
 <filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
 <!-- servlet请求分发器 -->
 <servlet>
 <servlet-name>springMvc</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:servlet-context.xml</param-value>
 </init-param>
 <!-- 表示启动容器时初始化该Servlet -->
 <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
 <servlet-name>springMvc</servlet-name>
 <!-- 这是拦截请求, "/"代表拦截所有请求,"*.do"拦截所有.do请求 -->
 <!-- <url-pattern>/</url-pattern> -->
 <url-pattern>*.do</url-pattern>
 </servlet-mapping>
</web-app>

要想启动我们的 SpringMVC 环境,⽬前对于 mvc 框架的配置还未进⾏。以上在 web.xml 中引⽤了servlet-context.xml ⽂件

6.servlet-context.xml 配置

java 复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc.xsd
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd">
 <!-- 开启扫描器 -->
 <context:component-scan base-package="com.xxxx.springmvc.controller"/>
 <!-- 使⽤默认的 Servlet 来响应静态⽂件 -->
 <mvc:default-servlet-handler/>
 <!-- 开启注解驱动-->
 <mvc:annotation-driven/>
 <!-- 配置视图解析器 -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
 id="internalResourceViewResolver">
 <!-- 前缀:在WEB-INF⽬录下的jsp⽬录下 -->
 <property name="prefix" value="/WEB-INF/jsp/"/>
 <!-- 后缀:以.jsp结尾的资源 -->
 <property name="suffix" value=".jsp"/>
 </bean>
</beans>

7.⻚⾯控制器的编写

java 复制代码
@Controller
public class HelloController {
 
 /**
 * 请求映射地址 /hello.do
 * @return
 */
 @RequestMapping("/hello")
 public ModelAndView hello(){
 ModelAndView mv=new ModelAndView();
 mv.addObject("hello", "hello spring mvc");
 mv.setViewName("hello");
 return mv; 
 }
}
  1. 添加视图⻚⾯
    在 WEB-INF 下新建 jsp ⽂件夹 ,并在⽂件夹下新建 hello.jsp
java 复制代码
 <%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"
;
%>
<!DOCTYPE HTML>
<html>
 <head>
 <base href="<%=basePath %>">
 <title>My JSP 'hello.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0"> 
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 </head>
 <body>
 <!-- el表达式接收参数值 -->
 ${hello}
 </body>
</html>

9.启动 jetty 服务器

访问地址 http://localhost:8080/springmvc01/hello.do

⾄此,springmvc 环境搭建完毕

6. URL 地址映射配置

6.1. @RequestMapping

通过注解 @RequestMapping 将请求地址与⽅法进⾏绑定,可以在类级别和⽅法级别声明。类级别的注

解负责将⼀个特定的请求路径映射到⼀个控制器上,将 url 和类绑定;通过⽅法级别的注解可以细化映

射,能够将⼀个特定的请求路径映射到某个具体的⽅法上,将 url 和类的⽅法绑定。

6.1.1. 映射单个 URL

@RequestMapping("") 或 @RequestMapping(value="")

java 复制代码
/**
 * @RequestMapping 声明在⽅法上⾯,映射单个 URL
 * 访问地址:(如果有类路径需要写在⽅法路径前⾯)
 * http://ip:port/springmvc01/test01
 * @return
 */
@RequestMapping("/test01")
// @RequestMapping(value = "/test01")
public ModelAndView test01(){
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.addObject("hello","test01");
 modelAndView.setViewName("hello");
 return modelAndView;
}
/**
 * 路径开头是否加 斜杠"/" 均可
 * @RequestMapping("/请求路径") 与 @RequestMapping("请求路径")均可
 * 建议加上,如:@RequestMapping("/test02")
 * 访问地址:(如果有类路径需要写在⽅法路径前⾯)
 * http://ip:port/springmvc01/test02
 * @return
 */
@RequestMapping("test02")
public ModelAndView test02(){
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.addObject("hello","test02");
 modelAndView.setViewName("hello");
 return modelAndView;
}

6.1.3. 映射 URL 在控制器上

⽤于类上,表示类中的所有响应请求的⽅法都是以该地址作为⽗路径

java 复制代码
@Controller
@RequestMapping("/url")
public class UrlController {
 /**
 * @RequestMapping 声明在类上⾯,类中的的⽅法都是以该地址作为⽗路径
 * 声明级别:
 * 类级别 + ⽅法级别 (/类路径/⽅法路径)
 * 访问地址:
 * http://ip:port/springmvc01/url/test04
 * @return
 */
 @RequestMapping("/test04")
 public ModelAndView test04(){
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.addObject("hello","test04");
 modelAndView.setViewName("hello");
 return modelAndView;
 }
}

6.1.4. 设置 URL 映射的请求⽅式

默认没有设置请求⽅式,在HTTP 请求中最常⽤的请求⽅法是 GET、POST,还有其他的⼀些⽅法,

如:DELET、PUT、HEAD 等。

可以通过 method 属性设置⽀持的请求⽅式,如 method=RequestMethod.POST;如设置多种请求⽅

式,以⼤括号包围,逗号隔开即可。

java 复制代码
/**
 * 设置请求⽅式
 * 通过 method 属性设置⽅法⽀持的请求⽅式,默认 GET请求和 POST等请求都⽀持。
 * 设置了请求⽅式,则只能按照指定的请求⽅式请求。
 * 访问地址:(只能使⽤POST请求访问)
 * http://ip:port/springmvc01/url/test05
 * @return
 */
@RequestMapping(value = "/test05",method = RequestMethod.POST)
public ModelAndView test05(){
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.addObject("hello","test05");
 modelAndView.setViewName("hello");
 return modelAndView;
}

6.1.5. 通过参数名称映射 URL

java 复制代码
/**
 * 通过参数名称访问
 * 通过参数的形式访问
 * 访问地址:
 * http://ip:port/springmvc01/url?test06
 * @return
 */
@RequestMapping(params = "test06")
public ModelAndView test06(){
 ModelAndView modelAndView = new ModelAndView();
 modelAndView.addObject("hello","test06");
 modelAndView.setViewName("hello");
 return modelAndView;
}

7. 参数绑定

客户端请求的参数到控制器功能处理⽅法上的参数的绑定,对于参数绑定⾮常灵活。

  1. 基本数据类型
java 复制代码
/**
 * 基本类型数据绑定
 * 参数值必须存在。如果没有指定参数值,也没有设置参数默认值,则会报500异常。
 * @param age
 * @param money
 */
@RequestMapping("data01")
public void data01(int age, double money){
 System.out.println("age:" + age + ", money:" + money);
}
/**
 * 基本类型数据绑定
 * 通过注解 @RequestParam 标记⼀个形参为请求参数。(注解声明在形参的前⾯)
 * 可以通过注解的属性设置相关内容
 * 设置参数的默认值 defaultValue
 * @param age
 * @param money
 */
@RequestMapping("data02")
public void data02(@RequestParam(defaultValue = "18") int age,
@RequestParam(defaultValue = "10.0") double money){
 System.out.println("age:" + age + ", money:" + money);
}
/**
 * 基本类型数据绑定
 * 通过注解 @RequestParam 标记⼀个形参为请求参数。(注解声明在形参的前⾯)
 * 可以通过注解的属性设置相关内容
 * 设置参数的参数名(别名) name
 * @param age
 * @param money
 */
@RequestMapping("data03")
public void data03(@RequestParam(defaultValue = "18", name = "userAge") int age,
 @RequestParam(defaultValue = "10.0", name = "userMoney") double money){
 System.out.println("age:" + age + ", money:" + money);
}
  1. 包装类型
java 复制代码
 /**
 * 包装类型数据绑定 (如果数据是基本类型,建议使⽤包装类型)
 * 客户端请求参数名与⽅法形参名保持⼀致,默认参数值为null
 * 可以通过 @RequestParam 的name属性设置参数的别名,defaultValue属性设置参数默认值
 * @param age
 * @param money
 */
@RequestMapping("data05")
public void data05(Integer age, Double money){
 System.out.println("age:" + age + ", money:" + money);
}
  1. 字符串类型
java 复制代码
/**
 * 字符串数据绑定
 * 客户端请求参数名与⽅法形参名保持⼀致,默认参数值为null
 * 可以通过 @RequestParam 的name属性设置参数的别名,defaultValue属性设置参数默认值
 * @param userName
 * @param userPwd
 */
@RequestMapping("data04")
public void data04(String userName, String userPwd){
 System.out.println("userName:" + userName + ", userPwd:" + userPwd);
}
  1. 数组类型
java 复制代码
 /**
 * 数组类型数据绑定
 * 客户端传参形式:ids=1&ids=2&ids=3
 * @param ids
 */
@RequestMapping("/data06")
public void data06(String[] ids){
 for(String id : ids){
 System.out.println(id + "---");
 }
}
  1. JavaBean 类型
java 复制代码
 /**
 * JavaBean 数据绑定
 * 客户端请求的参数名与JavaBean对象的属性字段名保持⼀致
 * @param user
 */
@RequestMapping("/data07")
public void data07(User user) {
 System.out.println(user);
}

User.java

java 复制代码
package com.xxxx.springmvc.po;
public class User {
 
 private int id;
 private String userName;
 private String userPwd;
 public int getId() {
 return id;
 }
 public void setId(int id) {
 this.id = id;
 }
 public String getUserName() {
 return userName;
 }
 public void setUserName(String userName) {
 this.userName = userName;
 }
 public String getUserPwd() {
 return userPwd;
 }
 public void setUserPwd(String userPwd) {
 this.userPwd = userPwd;
 }
 @Override
 public String toString() {
 return "User [id=" + id + ", userName=" + userName + ", userPwd="
 + userPwd + "]";
 }
}

8. JSON 数据开发

现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是JSON,所以前端如果发送的是JSON数据,后端该如何接收?

对于JSON数据类型,我们常见的有三种:

  • json普通数组(["value1","value2","value3",...])
  • json对象({key1:value1,key2:value2,...})
  • json对象数组([{key1:value1,...},{key2:value2,...}])

对于上述数据,前端如何发送,后端如何接收?

JSON普通数组
步骤1:pom.xml添加依赖

SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖

xml 复制代码
<!-- 添加json 依赖jar包 -->
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-core</artifactId>
 <version>2.10.0</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.10.0</version>
</dependency> 
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-annotations</artifactId>
 <version>2.10.0</version>
</dependency>
步骤2: 修改配置⽂件

servlet-context.xml

xml 复制代码
<!-- 添加json 依赖jar包 -->
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-core</artifactId>
 <version>2.10.0</version>
</dependency>
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.10.0</version>
</dependency> 
<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-annotations</artifactId>
 <version>2.10.0</version>
</dependency>
步骤3. 注解使⽤
  1. @ResponseBody
java 复制代码
@Controller
@RequestMapping("/user")
public class UserController {
 /**
 * @ResponseBody 返回的是JOSN格式的数据,返回JavaBean对象
 * 注解设置在⽅法体上
 * @return
 */
 @RequestMapping("queryUser01")
 @ResponseBody
 public User queryUser01(){
 User user = new User();
 user.setId(1);
 user.setUserName("zhangsan");
 user.setUserPwd("123456");
 // 返回的是user对象
 return user;
 }
 /**
 * @ResponseBody 返回的是JOSN格式的数据,返回JavaBean对象
 * 注解设置在⽅法返回对象前,修饰符之后
 * @return
 */
 @RequestMapping("queryUser02")
 public @ResponseBody User queryUser02(){
 User user = new User();
 user.setId(2);
 user.setUserName("lisi");
 user.setUserPwd("123321");
 // 返回的是user对象
 return user;
 }
 
 /**
 * @ResponseBody 返回的是JOSN格式的数据,返回集合
 * @return
 */
  @RequestMapping("/queryUser03")
 @ResponseBody
 public List<User> queryUser03(){
 List<User> list = new ArrayList<>();
 User user01 = new User();
 user01.setId(1);
 user01.setUserName("zhangsan");
 user01.setUserPwd("123456");
 User user02 = new User();
 user02.setId(2);
 user02.setUserName("lisi");
 user02.setUserPwd("123321");
 list.add(user01);
 list.add(user02);
 // 返回的是user集合
 return list;
 }
}
  1. @RequestBody

@RequestBody 注解常⽤来处理 content-type 不是默认的 application/x-www-form-urlcoded 类型的内

容,⽐如说:application/json 或者是application/xml 等。⼀般情况下来说常⽤其来处理 application/json

类型。@RequestBody接受的是⼀个 json 格式的字符串,⼀定是⼀个字符串。

通过 @RequestBody 可以将请求体中的 JSON 字符串绑定到相应的 bean 上,当然,也可以将其分别绑

定到对应的字符串上。

html 复制代码
/**
 * @RequestBody 规定请求的参数是JOSN格式的字符串
 * 注解设置在形参前⾯
 * @param user
 * @return
 */
@RequestMapping("/getUser")
@ResponseBody
public User getUser(@RequestBody User user){
 System.out.println(user);
 return user;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>JSON处理</title>
 <%-- 引⼊Jquery的核⼼JS⽂件 --%>
 <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
</head>
<body>
 <input type="button" value="JSON数据测试" onclick="test()"/>
 <script type="text/javascript">
 /**
 * 请求传递JSON格式的数据
 * 返回JSON格式的数据
 */
 function test(){
 $.ajax({
 // 请求⽅式 Get|Post
 type: "post",
 // 请求路径
 url: "user/getUser",
 // 预期服务器返回的额数据类型
 dataType: "json",
 // 设置服务器请求类型的数据类型为JSON格式
 contentType: "application/json;charset=utf-8",
 // 传递给服务器的参数
 data:'{"userName":"admin","userPwd":"123456"}',
 // 回调函数,接收服务器返回的响应的结果 (函数中的形参⽤来接收服务器返回的数据)
 success:function(data){
 console.log(data);
 }
 })
 }
 </script>
</body>
</html>
相关推荐
一嘴一个橘子8 分钟前
mybatis - 动态语句、批量注册mapper、分页插件
java
组合缺一9 分钟前
Json Dom 怎么玩转?
java·json·dom·snack4
危险、25 分钟前
一套提升 Spring Boot 项目的高并发、高可用能力的 Cursor 专用提示词
java·spring boot·提示词
kaico201829 分钟前
JDK11新特性
java
钊兵30 分钟前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
jiayong2335 分钟前
Tomcat性能优化面试题
java·性能优化·tomcat
秋刀鱼程序编程39 分钟前
Java基础入门(五)----面向对象(上)
java·开发语言
纪莫1 小时前
技术面:MySQL篇(InnoDB的锁机制)
java·数据库·java面试⑧股
Remember_9931 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode
Filotimo_1 小时前
在java开发中,cron表达式概念
java·开发语言·数据库