Spring MVC-口试题(33)

[复制链接]
发表于 2025-8-4 02:53:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
摘要:
1、通俗易懂,得当小白
2、仅做口试复习用,部分泉源网络,博文免费,知识无价,侵权请接洽!
1. 什么是 Spring MVC 框架?

答案:Spring MVC 是 Spring 框架中的一个模块,是基于 Java 实现 MVC 设计模式的轻量级 Web 框架。它通过一套注解和接口,使 Web 应用的开发变得简朴高效。
核心特点:

  • 清晰的职责分离(控制器、模型、视图)
  • 强盛的注解支持
  • 灵活的视图解析
  • 与 Spring 生态无缝集成
2. Spring MVC 中常用的注解包含哪些?

答案:

  • @Controller:标识控制器类
  • @RequestMapping:映射哀求路径
  • @RequestParam:获取哀求参数
  • @PathVariable:获取路径变量
  • @ResponseBody:直接返回数据而非视图
  • @RestController:组合 @Controller + @ResponseBody
  • @ModelAttribute:绑定模型数据
  • @SessionAttributes:将模型数据存入 session
  • @Valid:参数校验
示例:
  1. @RestController
  2. @RequestMapping("/users")
  3. public class UserController {
  4.    
  5.     @GetMapping("/{id}")
  6.     public User getUser(@PathVariable Long id) {
  7.         // ...
  8.     }
  9.    
  10.     @PostMapping
  11.     public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
  12.         // ...
  13.     }
  14. }
复制代码
3. Spring MVC 执行流程是什么?

答案:

  • 用户发送哀求到前端控制器 DispatcherServlet
  • DispatcherServlet 调用 HandlerMapping 查找 Handler
  • 返回 HandlerExecutionChain(包含 Handler 和拦截器)
  • DispatcherServlet 调用 HandlerAdapter 执行 Handler
  • Handler 执行完成后返回 ModelAndView
  • DispatcherServlet 调用 ViewResolver 解析视图
  • 返回 View 对象
  • DispatcherServlet 渲染视图并返回响应
4. Spring MVC 如何解决哀求中文乱码问题?

解决方案:

  • 设置 CharacterEncodingFilter
  • 设置 request/response 编码
  • 设置 Tomcat server.xml 的 URIEncoding
示例:
  1. @Configuration
  2. public class WebConfig implements WebMvcConfigurer {
  3.    
  4.     @Bean
  5.     public Filter characterEncodingFilter() {
  6.         CharacterEncodingFilter filter = new CharacterEncodingFilter();
  7.         filter.setEncoding("UTF-8");
  8.         filter.setForceEncoding(true);
  9.         return filter;
  10.     }
  11. }
复制代码
5. Spring MVC 哀求转发和重定向有什么区别?

答案:
特性转发 (forward)重定向 (redirect)哀求次数1 次2 次URL 变化不变变化数据共享共享 request 域不共享实现方式return “forward:url”return “redirect:url”服从更高较低6. Spring MVC 中体系是如何分层?

答案:

  • 体现层 (Presentation Layer):@Controller
  • 业务逻辑层 (Service Layer):@Service
  • 数据访问层 (DAO Layer):@Repository
  • 模型层 (Model Layer):POJO/DTO
  • 视图层 (View Layer):JSP/Thymeleaf 等
7. 如何开启注解处理器和适配器?

答案:

  • XML 设置方式:
  1. <mvc:annotation-driven/>
复制代码

  • Java 设置方式:
  1. @Configuration
  2. @EnableWebMvc
  3. public class WebConfig implements WebMvcConfigurer {
  4.     // ...
  5. }
复制代码
8. Spring MVC 如何设置重定向和转发?

示例:
  1. @Controller
  2. public class RedirectController {
  3.    
  4.     // 转发
  5.     @GetMapping("/forward")
  6.     public String forward() {
  7.         return "forward:/target";
  8.     }
  9.    
  10.     // 重定向
  11.     @GetMapping("/redirect")
  12.     public String redirect() {
  13.         return "redirect:/target";
  14.     }
  15. }
复制代码
9. Spring MVC 中函数的返回值是什么?

答案:

  • String:视图名称
  • ModelAndView:包含模型和视图信息
  • void:直接写 response
  • ResponseEntity:包含完备响应(状态码、头、体)
  • @ResponseBody:直接返回数据
10. Spring MVC 中 @RequestMapping 注解都有哪些属性?

重要属性:

  • value/path:映射路径
  • method:哀求方法(GET/POST等)
  • params:哀求参数条件
  • headers:哀求头条件
  • consumes:哀求内容类型
  • produces:响应内容类型
示例:
  1. @RequestMapping(
  2.     value = "/users/{id}",
  3.     method = RequestMethod.GET,
  4.     produces = MediaType.APPLICATION_JSON_VALUE
  5. )
  6. public User getUser(@PathVariable Long id) {
  7.     // ...
  8. }
复制代码
11. Spring MVC 控制器是单例的吗?

答案:默认是单例的,所有哀求共享同一个控制器实例。因此控制器应克制使用非线程安全的成员变量。
12. RequestMethod 可以同时支持POST和GET哀求访问吗?

答案:可以,通过 method 属性指定多个哀求方法:
  1. @RequestMapping(
  2.     value = "/users",
  3.     method = {RequestMethod.GET, RequestMethod.POST}
  4. )
  5. public String handleRequest() {
  6.     // ...
  7. }
复制代码
13. Spring MVC 中文件上传有哪些需要留意事项?

留意事项:

  • 设置 MultipartResolver
  • 表单 enctype=“multipart/form-data”
  • 使用 @RequestParam MultipartFile 吸收文件
  • 限定文件大小
  • 处理文件名安全
示例:
  1. @PostMapping("/upload")
  2. public String upload(@RequestParam("file") MultipartFile file) {
  3.     if (!file.isEmpty()) {
  4.         // 处理文件
  5.     }
  6.     return "redirect:/success";
  7. }
复制代码
14. Spring MVC 和 Struts2 有哪些区别?

答案:
特性Spring MVCStruts2设计基于方法基于类性能更高较低拦截器HandlerInterceptorInterceptor依赖注入原生支持需整合REST支持完善有限15. Spring MVC 中 @RequestMapping 注解用在类上有什么作用?

答案:为控制器中的所有方法提供同一的路径前缀,减少重复路径界说。
示例:
  1. @Controller
  2. @RequestMapping("/users")
  3. public class UserController {
  4.    
  5.     @GetMapping("/list")  // 实际路径:/users/list
  6.     public String list() {
  7.         // ...
  8.     }
  9. }
复制代码
16. Spring MVC 中 @PathVariable 和 @RequestParam 有哪些区别?

答案:
特性@PathVariable@RequestParam泉源URL 路径哀求参数必须性默认必须可选(required=false)格式/users/{id}/users?id=123多值支持不支持支持(数组/List)17. Spring MVC 中如何进行非常处理?

解决方案:

  • 使用 @ExceptionHandler
  • 实现 HandlerExceptionResolver
  • 使用 @ControllerAdvice
  • 设置 SimpleMappingExceptionResolver
示例:
  1. @ControllerAdvice
  2. public class GlobalExceptionHandler {
  3.    
  4.     @ExceptionHandler(Exception.class)
  5.     public ResponseEntity<String> handleException(Exception e) {
  6.         return ResponseEntity.status(500).body(e.getMessage());
  7.     }
  8. }
复制代码
18. Spring MVC 如何将 Model 中数据存放到 Session?

解决方案:

  • 使用 @SessionAttributes
  • 直接操作 HttpSession
示例:
  1. @Controller
  2. @SessionAttributes("user")
  3. public class UserController {
  4.    
  5.     @PostMapping("/login")
  6.     public String login(@ModelAttribute User user, Model model) {
  7.         model.addAttribute("user", user);
  8.         return "redirect:/home";
  9.     }
  10. }
复制代码
19. Spring MVC 如何与 Ajax 相互调用?

解决方案:

  • 使用 @ResponseBody 或 @RestController
  • 返回 JSON/XML 数据
  • 前端使用 jQuery/Axios 等发送哀求
示例:
  1. @RestController
  2. @RequestMapping("/api")
  3. public class ApiController {
  4.    
  5.     @GetMapping("/users")
  6.     public List<User> getUsers() {
  7.         return userService.findAll();
  8.     }
  9. }
复制代码
20. Spring MVC 中如何拦截 get 方式哀求?

解决方案:

  • 使用拦截器
  • 在 @RequestMapping 指定 method=GET
示例:
  1. @GetMapping("/users")
  2. public String getUsers() {
  3.     // 只拦截GET请求
  4. }
复制代码
21. Spring MVC 控制器注解一般适用什么?可以适用什么替代?

答案:

  • 重要注解:@Controller 或 @RestController
  • 替代方案:

    • 实现 Controller 接口(传统方式)
    • 使用 @Component + @RequestMapping(不保举)

22. Spring MVC 中拦截器如何使用?

答案:

  • 实现 HandlerInterceptor 接口
  • 注册拦截器
示例:
  1. public class AuthInterceptor implements HandlerInterceptor {
  2.    
  3.     @Override
  4.     public boolean preHandle(HttpServletRequest request,
  5.                            HttpServletResponse response,
  6.                            Object handler) throws Exception {
  7.         // 验证逻辑
  8.         return true; // 继续执行
  9.     }
  10. }
  11. @Configuration
  12. public class WebConfig implements WebMvcConfigurer {
  13.    
  14.     @Override
  15.     public void addInterceptors(InterceptorRegistry registry) {
  16.         registry.addInterceptor(new AuthInterceptor())
  17.                 .addPathPatterns("/**")
  18.                 .excludePathPatterns("/login");
  19.     }
  20. }
复制代码
23. Spring MVC 中如何实现拦截器?

答案:见第22题答案。
24. 说一说 Spring MVC 注解原理?

答案:Spring MVC 注解基于 Java 反射和动态代理实现:

  • 启动时扫描带有注解的类
  • 解析注解信息生成元数据
  • 哀求时通过 HandlerMapping 匹配处理器
  • 通过 HandlerAdapter 执行方法
  • 使用 HttpMessageConverter 处理参数和返回值
25. Spring MVC 中日期类型参数如何吸收?

解决方案:

  • 使用 @DateTimeFormat
  • 自界说 Converter/Formatter
  • 设置全局日期格式
示例:
  1. @GetMapping("/events")
  2. public String getEvents(@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date date) {
  3.     // ...
  4. }
复制代码
26. 说一说对 RESTful 的理解及项目中的使用?

答案:
RESTful 原则:

  • 资源标识(URI)
  • 同一接口(HTTP方法)
  • 无状态
  • 可缓存
  • 分层体系
项目应用:
  1. @RestController
  2. @RequestMapping("/api/users")
  3. public class UserRestController {
  4.    
  5.     @GetMapping("/{id}")
  6.     public User getUser(@PathVariable Long id) {
  7.         // GET /api/users/1
  8.     }
  9.    
  10.     @PostMapping
  11.     public User createUser(@RequestBody User user) {
  12.         // POST /api/users
  13.     }
  14. }
复制代码
27. Spring MVC 常用的注解有哪些?

答案:见第2题答案。
28. Spring MVC模块的作用是什么?

答案:提供基于 MVC 架构的 Web 应用开发支持,包罗:

  • 哀求路由
  • 参数绑定
  • 视图解析
  • 非常处理
  • 数据验证
  • 文件上传
29. 说一说 Spring MVC 都有哪些组件?

核心组件:

  • DispatcherServlet:前端控制器
  • HandlerMapping:哀求映射
  • HandlerAdapter:处理器适配器
  • ViewResolver:视图解析器
  • HandlerInterceptor:拦截器
  • MultipartResolver:文件上传解析器
  • LocaleResolver:国际化解析器
30. 简朴先容一下 WebApplicationContext?

答案:WebApplicationContext 是 ApplicationContext 的扩展,专为 Web 应用设计,提供:

  • 访问 ServletContext
  • 主题解析
  • 多设置文件支持
  • 与 Servlet API 集成
31. Spring 中 BeanFactory 与 ApplicationContext 的作用有哪些?

答案:

  • BeanFactory:底子 IoC 功能
  • ApplicationContext:

    • 继承 BeanFactory 所有功能
    • 提供消息资源处理
    • 变乱发布
    • 与 Web 情况集成
    • 更方便的资源访问

32. handler method 参数绑定常用注解,处理 Request 内容部分分为哪四类?

答案:
常用注解:

  • @RequestParam
  • @PathVariable
  • @RequestBody
  • @ModelAttribute
Request 内容分类:

  • URL 参数
  • 路径变量
  • 哀求体
  • 哀求头
33. Spring MVC 框架的特点都有哪些?

答案:

  • 清晰的 MVC 分层
  • 强盛的注解支持
  • 灵活的视图技能
  • 与 Spring 集成
  • REST 支持
  • 可扩展设计
  • 国际化支持
  • 主题支持
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表