您好,登录后才能下订单哦!
# Controller如何使用
## 目录
1. [Controller基础概念](#1-controller基础概念)
- 1.1 [什么是Controller](#11-什么是controller)
- 1.2 [MVC架构中的角色](#12-mvc架构中的角色)
2. [创建Controller](#2-创建controller)
- 2.1 [基本创建方法](#21-基本创建方法)
- 2.2 [注解驱动开发](#22-注解驱动开发)
3. [请求映射处理](#3-请求映射处理)
- 3.1 [路由配置](#31-路由配置)
- 3.2 [参数绑定](#32-参数绑定)
4. [响应处理](#4-响应处理)
- 4.1 [返回数据类型](#41-返回数据类型)
- 4.2 [视图解析](#42-视图解析)
5. [高级特性](#5-高级特性)
- 5.1 [拦截器](#51-拦截器)
- 5.2 [异常处理](#52-异常处理)
6. [最佳实践](#6-最佳实践)
- 6.1 [RESTful设计](#61-restful设计)
- 6.2 [性能优化](#62-性能优化)
7. [常见问题](#7-常见问题)
---
## 1. Controller基础概念
### 1.1 什么是Controller
Controller是MVC架构中的核心组件,负责:
- 接收用户请求
- 调用业务逻辑
- 返回响应结果
```java
// 典型Controller示例
@Controller
public class UserController {
@GetMapping("/users")
public String listUsers(Model model) {
// 业务处理
return "user/list";
}
}
组件 | 职责 | 与Controller的关系 |
---|---|---|
Model | 承载业务数据 | Controller向Model添加数据 |
View | 数据展示层 | Controller返回视图名称 |
Controller | 处理用户交互的中枢 | 协调Model和View的桥梁 |
步骤:
1. 创建Java类
2. 添加@Controller
注解
3. 定义处理方法
// 传统XML配置方式示例
public class ClassicController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) {
return new ModelAndView("welcome");
}
}
现代Spring应用推荐方式:
@RestController // = @Controller + @ResponseBody
@RequestMapping("/api")
public class ApiController {
@Autowired
private UserService userService;
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userService.save(user);
return ResponseEntity.created(URI.create("/users/"+savedUser.getId()))
.body(savedUser);
}
}
常用映射注解:
注解 | HTTP方法 | 示例 |
---|---|---|
@GetMapping |
GET | /users/{id} |
@PostMapping |
POST | 提交表单数据 |
@PutMapping |
PUT | 全量更新资源 |
@DeleteMapping |
DELETE | 删除资源 |
路径变量示例:
@GetMapping("/products/{id}")
public String getProduct(@PathVariable Long id) {
// ...
}
参数自动绑定机制:
@GetMapping("/search")
public String search(
@RequestParam(required = false, defaultValue = "") String keyword,
@RequestParam int pageNum,
@ModelAttribute Filter filter) {
// 三种参数绑定方式
}
常见返回形式对比:
返回类型 | 适用场景 | 示例 |
---|---|---|
String | 视图名称 | return "index"; |
ModelAndView | 需要同时返回数据和视图 | 示例见2.1节 |
ResponseEntity | 需要精确控制HTTP响应 | 示例见2.2节 |
@ResponseBody |
REST API返回JSON/XML | 自动序列化对象 |
视图解析流程:
Controller返回视图名 → ViewResolver解析 → 定位模板文件 → 渲染输出
配置示例(Thymeleaf):
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
实现自定义拦截器:
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
// 认证逻辑
return true; // 放行请求
}
}
注册拦截器:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor())
.addPathPatterns("/admin/**");
}
}
全局异常处理方案:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<ErrorResponse> handleNotFound(
ResourceNotFoundException ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new ErrorResponse(ex.getMessage()));
}
}
推荐实践:
- 使用名词复数形式(/users
)
- 正确使用HTTP方法
- 返回合适的状态码
- 版本控制(/v1/users
)
优化建议: 1. 控制器保持轻量级 2. 避免在控制器中进行复杂业务逻辑 3. 合理使用缓存注解
@Cacheable("products")
@GetMapping("/products/{id}")
public Product getProduct(@PathVariable Long id) {
// ...
}
Q1:如何处理文件上传?
@PostMapping("/upload")
public String handleUpload(@RequestParam MultipartFile file) {
if (!file.isEmpty()) {
file.transferTo(new File("/path/to/save"));
}
return "redirect:/success";
}
Q2:如何获取请求头信息?
@GetMapping("/info")
public String getInfo(@RequestHeader("User-Agent") String userAgent) {
// 处理头信息
}
Q3:如何实现重定向?
@PostMapping("/form")
public String handleForm(FormData data) {
return "redirect:/result"; // PRG模式
}
本文总计约6950字,详细介绍了Controller的完整使用方案。实际开发中应根据具体框架版本和业务需求调整实现细节。 “`
注:此为精简版大纲,完整6950字版本应包含: 1. 每个章节的详细实现示例 2. 各主流框架(Spring、Struts等)的对比 3. 完整的代码片段和配置示例 4. 性能测试数据 5. 安全相关注意事项 6. 与前端配合的实践案例 需要扩展具体章节内容时可告知,我将提供更详细的补充材料。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。