马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
摘要:
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:参数校验
示例:- @RestController
- @RequestMapping("/users")
- public class UserController {
-
- @GetMapping("/{id}")
- public User getUser(@PathVariable Long id) {
- // ...
- }
-
- @PostMapping
- public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
- // ...
- }
- }
复制代码 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
示例:- @Configuration
- public class WebConfig implements WebMvcConfigurer {
-
- @Bean
- public Filter characterEncodingFilter() {
- CharacterEncodingFilter filter = new CharacterEncodingFilter();
- filter.setEncoding("UTF-8");
- filter.setForceEncoding(true);
- return filter;
- }
- }
复制代码 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. 如何开启注解处理器和适配器?
答案:
- @Configuration
- @EnableWebMvc
- public class WebConfig implements WebMvcConfigurer {
- // ...
- }
复制代码 8. Spring MVC 如何设置重定向和转发?
示例:- @Controller
- public class RedirectController {
-
- // 转发
- @GetMapping("/forward")
- public String forward() {
- return "forward:/target";
- }
-
- // 重定向
- @GetMapping("/redirect")
- public String redirect() {
- return "redirect:/target";
- }
- }
复制代码 9. Spring MVC 中函数的返回值是什么?
答案:
- String:视图名称
- ModelAndView:包含模型和视图信息
- void:直接写 response
- ResponseEntity:包含完备响应(状态码、头、体)
- @ResponseBody:直接返回数据
10. Spring MVC 中 @RequestMapping 注解都有哪些属性?
重要属性:
- value/path:映射路径
- method:哀求方法(GET/POST等)
- params:哀求参数条件
- headers:哀求头条件
- consumes:哀求内容类型
- produces:响应内容类型
示例:- @RequestMapping(
- value = "/users/{id}",
- method = RequestMethod.GET,
- produces = MediaType.APPLICATION_JSON_VALUE
- )
- public User getUser(@PathVariable Long id) {
- // ...
- }
复制代码 11. Spring MVC 控制器是单例的吗?
答案:默认是单例的,所有哀求共享同一个控制器实例。因此控制器应克制使用非线程安全的成员变量。
12. RequestMethod 可以同时支持POST和GET哀求访问吗?
答案:可以,通过 method 属性指定多个哀求方法:- @RequestMapping(
- value = "/users",
- method = {RequestMethod.GET, RequestMethod.POST}
- )
- public String handleRequest() {
- // ...
- }
复制代码 13. Spring MVC 中文件上传有哪些需要留意事项?
留意事项:
- 设置 MultipartResolver
- 表单 enctype=“multipart/form-data”
- 使用 @RequestParam MultipartFile 吸收文件
- 限定文件大小
- 处理文件名安全
示例:- @PostMapping("/upload")
- public String upload(@RequestParam("file") MultipartFile file) {
- if (!file.isEmpty()) {
- // 处理文件
- }
- return "redirect:/success";
- }
复制代码 14. Spring MVC 和 Struts2 有哪些区别?
答案:
特性Spring MVCStruts2设计基于方法基于类性能更高较低拦截器HandlerInterceptorInterceptor依赖注入原生支持需整合REST支持完善有限15. Spring MVC 中 @RequestMapping 注解用在类上有什么作用?
答案:为控制器中的所有方法提供同一的路径前缀,减少重复路径界说。
示例:- @Controller
- @RequestMapping("/users")
- public class UserController {
-
- @GetMapping("/list") // 实际路径:/users/list
- public String list() {
- // ...
- }
- }
复制代码 16. Spring MVC 中 @PathVariable 和 @RequestParam 有哪些区别?
答案:
特性@PathVariable@RequestParam泉源URL 路径哀求参数必须性默认必须可选(required=false)格式/users/{id}/users?id=123多值支持不支持支持(数组/List)17. Spring MVC 中如何进行非常处理?
解决方案:
- 使用 @ExceptionHandler
- 实现 HandlerExceptionResolver
- 使用 @ControllerAdvice
- 设置 SimpleMappingExceptionResolver
示例:- @ControllerAdvice
- public class GlobalExceptionHandler {
-
- @ExceptionHandler(Exception.class)
- public ResponseEntity<String> handleException(Exception e) {
- return ResponseEntity.status(500).body(e.getMessage());
- }
- }
复制代码 18. Spring MVC 如何将 Model 中数据存放到 Session?
解决方案:
- 使用 @SessionAttributes
- 直接操作 HttpSession
示例:- @Controller
- @SessionAttributes("user")
- public class UserController {
-
- @PostMapping("/login")
- public String login(@ModelAttribute User user, Model model) {
- model.addAttribute("user", user);
- return "redirect:/home";
- }
- }
复制代码 19. Spring MVC 如何与 Ajax 相互调用?
解决方案:
- 使用 @ResponseBody 或 @RestController
- 返回 JSON/XML 数据
- 前端使用 jQuery/Axios 等发送哀求
示例:- @RestController
- @RequestMapping("/api")
- public class ApiController {
-
- @GetMapping("/users")
- public List<User> getUsers() {
- return userService.findAll();
- }
- }
复制代码 20. Spring MVC 中如何拦截 get 方式哀求?
解决方案:
- 使用拦截器
- 在 @RequestMapping 指定 method=GET
示例:- @GetMapping("/users")
- public String getUsers() {
- // 只拦截GET请求
- }
复制代码 21. Spring MVC 控制器注解一般适用什么?可以适用什么替代?
答案:
- 重要注解:@Controller 或 @RestController
- 替代方案:
- 实现 Controller 接口(传统方式)
- 使用 @Component + @RequestMapping(不保举)
22. Spring MVC 中拦截器如何使用?
答案:
- 实现 HandlerInterceptor 接口
- 注册拦截器
示例:- public class AuthInterceptor 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 AuthInterceptor())
- .addPathPatterns("/**")
- .excludePathPatterns("/login");
- }
- }
复制代码 23. Spring MVC 中如何实现拦截器?
答案:见第22题答案。
24. 说一说 Spring MVC 注解原理?
答案:Spring MVC 注解基于 Java 反射和动态代理实现:
- 启动时扫描带有注解的类
- 解析注解信息生成元数据
- 哀求时通过 HandlerMapping 匹配处理器
- 通过 HandlerAdapter 执行方法
- 使用 HttpMessageConverter 处理参数和返回值
25. Spring MVC 中日期类型参数如何吸收?
解决方案:
- 使用 @DateTimeFormat
- 自界说 Converter/Formatter
- 设置全局日期格式
示例:- @GetMapping("/events")
- public String getEvents(@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date date) {
- // ...
- }
复制代码 26. 说一说对 RESTful 的理解及项目中的使用?
答案:
RESTful 原则:
- 资源标识(URI)
- 同一接口(HTTP方法)
- 无状态
- 可缓存
- 分层体系
项目应用:- @RestController
- @RequestMapping("/api/users")
- public class UserRestController {
-
- @GetMapping("/{id}")
- public User getUser(@PathVariable Long id) {
- // GET /api/users/1
- }
-
- @PostMapping
- public User createUser(@RequestBody User user) {
- // POST /api/users
- }
- }
复制代码 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 内容分类:
33. Spring MVC 框架的特点都有哪些?
答案:
- 清晰的 MVC 分层
- 强盛的注解支持
- 灵活的视图技能
- 与 Spring 集成
- REST 支持
- 可扩展设计
- 国际化支持
- 主题支持
|