Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

第 65 章 Spring WebMVC

目录

65.1. @EnableWebMvc
65.1.1. @PostConstruct
65.2. @Controller
65.2.1. @RequestMapping
65.2.2. @GetMapping
65.2.3. @PostMapping
65.2.4. @RequestBody
65.2.5. RequestMapping with Request Parameters - @RequestParam
65.2.6. @RequestHeader - 获取 HTTP Header 信息
65.2.7. RequestMapping with Path Variables - @PathVariable
65.2.8. @MatrixVariable注解,RFC3986定义URI的路径(Path)中可包含name-value片段
65.2.9. @ModelAttribute
65.2.10. @ResponseBody
65.2.11. @ResponseStatus 设置 HTTP 状态
65.2.12. @CrossOrigin
65.2.13. @CookieValue - 获取 Cookie 值
65.2.14. @SessionAttributes
65.2.15. ModelAndView
65.2.16. HttpServletResponse
65.2.17. HttpServletRequest
65.3. @RestController
65.3.1. 接口设计中 URL 参数,FORM 参数,JSON 怎么选择
65.3.2. 返回迭代器
65.3.3. 上传文件
65.3.4. 返回实体
65.3.5. JSON
65.3.6. 处理原始 RAW JSON 数据
65.3.7. 返回 JSON 对象 NULL 专为 "" 字符串
65.3.8. XML
65.3.9. 兼容传统 json 接口
65.3.10. 上传文件
65.3.11. 下载文件
65.3.12. Mime/MediaType
65.3.13. Spring boot with csv
65.3.14. Json 处理
65.3.15. synchronized
65.3.16. Spring boot with Emitter
65.3.17. forward 转发
65.4. Springboot 4.0
65.4.1. Api 版本控制
65.5. View
65.5.1. 配置静态文件目录
65.5.2. 添加静态文件目录
65.5.3. Using Spring’s form tag library
65.5.4. Thymeleaf
65.5.5. FreeMarker
65.5.6. i18n 国际化
65.6. Spring boot with Webpage
65.6.1. Maven
65.6.2. application.properties
65.6.3. Application
65.6.4. IndexController
65.6.5. src/main/webapp/WEB-INF/jsp/index.jsp
65.6.6. 集成模板引擎
65.7. Spring boot with Velocity template
65.7.1. Maven
65.7.2. Resource
65.7.3. Application
65.7.4. RestController
65.7.5. Test
65.8. Spring boot with Thymeleaf
65.8.1. Maven
65.8.2. application.properties
65.8.3. Controller
65.8.4. HTML5 Template
65.9. 校验器(Validator)
65.9.1. 依赖
65.9.2. 常规用法
65.9.3. 常用注解
65.9.4. 在 Service 中使用 Validator 检查数据
65.9.5. 自定义注解
65.10. Interceptor/Filter 拦截器/过滤
65.10.1. Session 拦截
65.10.2. Token 拦截
65.10.3. Authorization Bearer
65.10.4. 过滤器
65.10.5. 拦截器获取PathVariable变量
65.10.6. WebMvcConfigurer 拦截
65.10.7. Session 登录拦截器
65.11. String boot with RestTemplate
65.11.1. RestTemplate Example
65.11.2. GET 操作
65.11.3. POST 操作
65.11.4. PUT 操作
65.11.5. Delete 操作
65.11.6. 上传文件
65.11.7. HTTP Auth
65.11.8. PKCS12
65.11.9. Timeout 超时设置
65.12. RestClient
65.12.1. 创建 RestClient
65.12.2. Get 操作
65.12.3. Post Json
65.12.4. HTTP Authorization Basic
65.12.5. onStatus
65.12.6. Timeout 超时设置
65.12.7. 下载二进制流
65.12.8. 上传文件
65.12.9. Springboot 4.0 Version 版本号

Spring MVC 有两种启动模式,一种是传统Tomcat,需要配置很多XML文件。另一种方式是采用 Spring Boot 需要些一个Java程序,不需要写xml文件,这个程序会帮助你处理启动所需的一切,并且采用嵌入方式启动 Tomcat 或者 Jetty.

两种方式各有优缺点,Tomcat 方式配置繁琐,但是可以使用虚拟机,同一个IP地址使用不同域名访问,出现不同的内容。而Spring Boot一个应用一个容器一个端口,比不得不通过端口来区分应用。

65.1. @EnableWebMvc

		
package cn.netkiller.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}

	@Bean
	public InternalResourceViewResolver viewResolver() {
		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
		resolver.setPrefix("WEB-INF/jsp/");
		resolver.setSuffix(".jsp");
		return resolver;
	}

}
		
	

65.1.1. @PostConstruct

		
package cn.netkiller.config;

import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
@Slf4j
public class HikariConfigCheck {
    // 注入配置的参数
    @Value("${spring.datasource.hikari.minimum-idle:undefined}")
    private int minimumIdle;

    @Value("${spring.datasource.hikari.maximum-pool-size:undefined}")
    private int maximumPoolSize;

    @PostConstruct
    public void checkConfig() {
        log.debug("加载的 minimum-idle:" + minimumIdle);
        log.debug("加载的 maximum-pool-size:" + maximumPoolSize);
    }
}