SpringBoot框架Web开发
1. 控制器开发
(1) JSON的支持
Spring Boot默认支持JSON格式的数据交换,主要通过以下方式实现:
- 依赖:
spring-boot-starter-web
依赖包已经包括了Jackson
,用于将Java对象序列化为JSON,以及将JSON反序列化为Java对象 - 注解:使用
@RequestBody
注解将请求体中的JSON数据转换为Java对象,使用@ResponseBody
注解将Java对象转换为JSON响应 - 配置:可以通过
application.properties
或application.yml
文件配置JSON序列化和反序列化的细节,如日期格式、字段忽略等
@RestController
public class SampleController {
@GetMapping("/user")
public User getUser() {
return new User("张三");
}
@PostMapping("/user")
public User postUser(@RequestBody User user) {
return user;
}
}
(2) RESTful的支持
Spring Boot支持RESTful API的开发,可以使用以下注解来实现:
@RestController
:用于定义RESTful控制器,结合@RequestMapping
、@GetMapping
、@PostMapping
等注解处理HTTP请求@PathVariable
:用于提取URL路径中的参数@RequestParam
:用于提取请求参数@RequestBody
:用于接收请求体中的数据
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
}
}
(3) Web测试的支持
Spring Boot提供了强大的测试支持,主要通过以下方式:
@SpringBootTest
:用于启动整个Spring应用程序上下文,用于集成测试@WebMvcTest
:用于测试Spring MVC控制器,加载Spring MVC相关组件而不启动整个应用上下文MockMvc
:用于模拟HTTP请求和响应,进行控制器层的测试
@SpringBootTest
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetUser() throws Exception {
mockMvc.perform(get("/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("张三"));
}
}
2. 视图开发
(1) SpringBoot整合JSP
Spring Boot支持JSP视图模板,但需要一些配置:
- 依赖:添加
spring-boot-starter-tomcat
依赖(使用provided
范围)和spring-boot-starter-web
- 配置:在
application.properties
或application.yml
中配置视图解析器,指定JSP文件的位置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
(2) 静态资源引入
Spring Boot默认支持静态资源的引入,资源文件可以放在以下目录中:
src/main/resources/static
src/main/resources/resources
src/main/resources/META-INF/resources
访问静态资源时,可以直接通过URL路径访问。
(3) 支持热部署
Spring Boot支持热部署,可以通过以下方式实现:
- Spring Boot DevTools:一个开发工具,可以通过
spring-boot-devtools
依赖实现自动重启和热部署功能
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
3. 过滤器和拦截器
(1) 自定义过滤器
自定义过滤器用于在请求处理之前或之后执行一些操作,例如日志记录、请求检查等:
- 实现:实现
javax.servlet.Filter
接口,重写doFilter
方法 - 注册:通过
@Component
注解自动注册,或在WebMvcConfigurer
中进行注册
@Component
public class CustomFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);
}
}
(2) 自定义拦截器
自定义拦截器用于在请求处理前后执行操作,例如权限验证:
- 实现:实现
HandlerInterceptor
接口,重写preHandle
、postHandle
和afterCompletion
方法 - 注册:通过
WebMvcConfigurer
的addInterceptors
方法注册
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor());
}
}
4. 打包部署
(1) 多环境配置
Spring Boot支持不同的环境配置,可以通过以下方式实现:
- 配置文件:使用
application-{profile}.properties
或application-{profile}.yml
来定义不同环境的配置 - 激活配置:通过
spring.profiles.active
属性激活指定的环境配置
# application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
# application-prod.properties
spring.datasource.url=jdbc:mysql://localhost:3306/proddb
# application.properties
spring.profiles.active=dev
(2) 服务器配置
Spring Boot应用可以打包成独立的JAR或WAR文件:
- JAR包:适合嵌入式服务器的应用,通常使用
spring-boot-maven-plugin
插件进行打包 - WAR包:适合传统的Web服务器部署,需继承
SpringBootServletInitializer
并重写configure
方法
可以直接在pom.xml中进行配置
<<!-- 任选其一 -->
<packaging>jar</packaging>
<packaging>war</packaging>
(3) 项目打包
项目打包可通过以下步骤完成:
- Maven/Gradle打包:使用Maven或Gradle进行项目打包
- 打包命令:使用
mvn clean package
或./gradlew build
命令生成JAR或WAR文件
mvn clean package