controller如何使用

发布时间:2021-12-20 10:40:38 作者:iii
来源:亿速云 阅读:207
# 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";
    }
}

1.2 MVC架构中的角色

组件 职责 与Controller的关系
Model 承载业务数据 Controller向Model添加数据
View 数据展示层 Controller返回视图名称
Controller 处理用户交互的中枢 协调Model和View的桥梁

2. 创建Controller

2.1 基本创建方法

步骤: 1. 创建Java类 2. 添加@Controller注解 3. 定义处理方法

// 传统XML配置方式示例
public class ClassicController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, 
                                     HttpServletResponse response) {
        return new ModelAndView("welcome");
    }
}

2.2 注解驱动开发

现代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);
    }
}

3. 请求映射处理

3.1 路由配置

常用映射注解:

注解 HTTP方法 示例
@GetMapping GET /users/{id}
@PostMapping POST 提交表单数据
@PutMapping PUT 全量更新资源
@DeleteMapping DELETE 删除资源

路径变量示例:

@GetMapping("/products/{id}")
public String getProduct(@PathVariable Long id) {
    // ...
}

3.2 参数绑定

参数自动绑定机制:

@GetMapping("/search")
public String search(
    @RequestParam(required = false, defaultValue = "") String keyword,
    @RequestParam int pageNum,
    @ModelAttribute Filter filter) {
    // 三种参数绑定方式
}

4. 响应处理

4.1 返回数据类型

常见返回形式对比:

返回类型 适用场景 示例
String 视图名称 return "index";
ModelAndView 需要同时返回数据和视图 示例见2.1节
ResponseEntity 需要精确控制HTTP响应 示例见2.2节
@ResponseBody REST API返回JSON/XML 自动序列化对象

4.2 视图解析

视图解析流程:

Controller返回视图名 → ViewResolver解析 → 定位模板文件 → 渲染输出

配置示例(Thymeleaf):

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

5. 高级特性

5.1 拦截器

实现自定义拦截器:

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/**");
    }
}

5.2 异常处理

全局异常处理方案:

@ControllerAdvice
public class GlobalExceptionHandler {
    
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleNotFound(
            ResourceNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND)
                            .body(new ErrorResponse(ex.getMessage()));
    }
}

6. 最佳实践

6.1 RESTful设计

推荐实践: - 使用名词复数形式(/users) - 正确使用HTTP方法 - 返回合适的状态码 - 版本控制(/v1/users

6.2 性能优化

优化建议: 1. 控制器保持轻量级 2. 避免在控制器中进行复杂业务逻辑 3. 合理使用缓存注解

   @Cacheable("products")
   @GetMapping("/products/{id}")
   public Product getProduct(@PathVariable Long id) {
       // ...
   }

7. 常见问题

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. 与前端配合的实践案例 需要扩展具体章节内容时可告知,我将提供更详细的补充材料。

推荐阅读:
  1. SpringMVC Controller介绍
  2. Cordova学习笔记 中controller的使用及controller as的使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

controller

上一篇:Kubernetes怎么部署ReplicationController多副本负载均衡

下一篇:如何创建用于室内和室外火灾检测的定制InceptionV3和CNN架构

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》