springmvc热点面试题开胃菜
- 电脑硬件
- 2025-09-21 17:42:01

1. Spring MVC的核心组件有哪些?它们的作用是什么?
答案: Spring MVC的核心组件包括以下部分,每个组件都有其特定的作用:
DispatcherServlet:
前端控制器,是Spring MVC的核心。它负责接收所有HTTP请求,并将请求分发给合适的处理器(Controller)。它会根据请求信息查找合适的处理器,并调用处理器的相应方法处理请求。HandlerMapping(处理器映射器):
用于将请求映射到具体的处理器(Controller)。它根据请求的URL、HTTP方法等信息,找到对应的处理器方法。常见的实现类包括RequestMappingHandlerMapping,它基于@RequestMapping注解进行映射。Controller(处理器):
用于处理具体的业务逻辑。通常是一个带有@Controller注解的类,其中的方法通过@RequestMapping等注解映射到特定的请求路径。示例:@Controller public class MyController { @RequestMapping("/hello") public String hello(Model model) { model.addAttribute("message", "Hello, Spring MVC!"); return "hello"; } }HandlerAdapter(处理器适配器):
用于执行处理器中的具体方法。它会根据处理器的类型调用相应的方法,并处理方法的返回值。常见的实现类包括RequestMappingHandlerAdapter,它支持注解驱动的控制器。ViewResolver(视图解析器):
用于将逻辑视图名解析为具体的视图实现。它会根据返回的视图名查找对应的视图模板(如JSP、Thymeleaf等)。示例:@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }View(视图):
用于渲染最终的响应内容。可以是JSP、Thymeleaf、Freemarker等模板引擎,也可以是JSON、XML等格式的响应。Spring MVC的核心组件协同工作,实现了从请求接收、处理到响应的完整流程。DispatcherServlet作为核心,通过HandlerMapping找到处理器,HandlerAdapter执行处理器方法,最后通过ViewResolver渲染视图。
2. 如何在Spring MVC中实现文件上传?答案: 在Spring MVC中实现文件上传需要以下步骤:
添加依赖:
确保项目中包含commons-fileupload依赖(Spring Boot中已包含)。如果使用Maven,可以在pom.xml中添加:<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>配置文件上传解析器:
在Spring配置文件或Java配置类中,添加CommonsMultipartResolver:@Bean public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setMaxUploadSize(10 * 1024 * 1024); // 设置最大上传大小(10MB) return resolver; }创建文件上传的Controller:
使用@RequestParam或@RequestPart注解接收上传的文件:@Controller public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file, Model model) { if (!file.isEmpty()) { try { // 保存文件到指定路径 Path path = Paths.get("uploads/"); Files.copy(file.getInputStream(), path.resolve(file.getOriginalFilename()), StandardCopyOption.REPLACE_EXISTING); model.addAttribute("message", "文件上传成功!"); } catch (IOException e) { model.addAttribute("message", "文件上传失败:" + e.getMessage()); } } else { model.addAttribute("message", "文件为空!"); } return "uploadStatus"; } }创建上传页面(如JSP):
确保表单的enctype属性设置为multipart/form-data:<form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file" /> <button type="submit">上传</button> </form>通过配置CommonsMultipartResolver和使用MultipartFile接口,Spring MVC可以轻松实现文件上传功能。需要注意的是,表单的enctype属性必须设置为multipart/form-data,以便正确传输文件数据。
3. 如何在Spring MVC中实现拦截器(Interceptor)?答案: Spring MVC的拦截器用于在请求处理前后执行特定逻辑,例如权限验证、日志记录等。实现拦截器的步骤如下:
创建拦截器类:
实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类。示例:public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 请求处理前的逻辑 System.out.println("拦截器:请求处理前"); return true; // 返回true继续处理,返回false中断处理 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 请求处理后的逻辑 System.out.println("拦截器:请求处理后"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 请求完成后的逻辑 System.out.println("拦截器:请求完成"); } }注册拦截器:
在Spring配置文件或Java配置类中注册拦截器。示例(Java配置):@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/**") // 拦截所有请求 .excludePathPatterns("/login", "/register"); // 排除登录和注册页面 } }拦截器的执行顺序:
如果有多个拦截器,它们的preHandle方法会按注册顺序执行,而postHandle和afterCompletion方法则按注册的逆序执行。通过实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类,可以创建自定义拦截器。通过InterceptorRegistry注册拦截器,并指定拦截路径和排除路径,可以灵活控制拦截器的作用范围。拦截器常用于权限验证、日志记录、性能监控等场景。
springmvc热点面试题开胃菜由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“springmvc热点面试题开胃菜”