Spring MVC的面试知识点

1、Spring MVC的入口是什么?

Spring MVC的入口是DispatcherServlet。这个Servlet是Spring MVC框架的关键组件,负责接收所有来自客户端的请求,并将其分派给适当的Controller对象进行处理。在Spring MVC框架中,所有的请求都会经过DispatcherServlet,它扮演着前端控制器的角色。

2、Spring MVC如何实现前后端分离?

Spring MVC通过前后端分离架构实现前端和后端的分离。前后端分离的主要方式是通过RESTful API将后端数据以JSON格式传递给前端。前端发送请求到后端,后端接收到请求后调用相应的Controller进行处理,然后将处理结果封装成JSON格式的数据返回给前端。前端拿到后端返回的JSON数据后,通过JavaScript等前端技术进行解析并展示在页面上。因此,Spring MVC通过前后端分离架构实现了前端和后端的完全分离,前后端之间只通过JSON数据进行交互。

3、Spring MVC有哪些角色?

控制器(Controller):Controller是Spring MVC的核心,负责处理用户的请求并返回一个相应的视图。

验证器(Validator):验证器用于验证用户输入数据的合法性。

命令对象(Command Object):这是用于封装请求参数的对象。

表单对象(Form Object):这是用于处理表单提交的对象。

分发器(DispatcherServlet):作为前端控制器,它负责接收所有的HTTP请求,并将它们分派给适当的后端控制器处理。

处理器映射(Handler Mapping):它负责将请求映射到相应的处理器(Controller)。

视图解析器(View Resolver):它负责解析视图名称,并返回一个具体的视图实现。

模型对象(Model Object):这是用于封装应用程序数据的对象。

4、Spring MVC如何处理异常?

Spring MVC可以使用以下几种方式处理异常:

1.使用@ControllerAdvice和@ExceptionHandler注解。@ControllerAdvice注解可以应用在类上,用于对全局异常进行处理,而@ExceptionHandler注解则可以应用在方法上,用于对特定异常进行处理。

2.使用SimpleMappingExceptionResolver。这是Spring MVC提供的一个异常处理器,可以映射全局异常和特定的异常。

3.自定义异常处理器。可以实现HandlerExceptionResolver接口自定义异常处理器,对特定异常进行处理。

5、Spring MVC可以支持哪些视图技术?

Spring MVC支持多种视图技术,包括但不限于以下几种:

1.JSP:Java Server Pages是一种动态网页技术标准,可以通过JSP来生成HTML页面。

2.Thymeleaf:一种Java模板引擎,可以用于在服务器端渲染HTML页面。

3.FreeMarker:一种通用化的模板引擎,可以用于生成各种文本格式的输出。

4.Velocity:一种基于Java的模板引擎,可以用于生成各种文本格式的输出。

5.Excel:Spring MVC还可以将数据以Excel格式输出,供用户下载。

6、Spring MVC和Spring框架如何实现无缝连接?

Spring MVC是Spring框架的一个子框架,它负责实现Web层的开发,与Spring框架的其他模块一起实现无缝连接。

1.Spring MVC依赖于Spring的核心功能,例如IoC容器和AOP功能。IoC容器负责管理对象的创建和生命周期,AOP则提供了面向切面的编程能力,为Spring MVC提供了很多便利。

2.Spring MVC使用了Spring的注解和XML配置,可以很方便地与Spring框架的其他模块集成。例如,可以使用@Autowired注解实现依赖注入,使用@ComponentScan注解来自动扫描和注册Bean。

3.Spring MVC还提供了许多便捷的功能,例如表单验证、文件上传等。这些功能可以与Spring框架的其他模块无缝集成,提高了开发效率。总之,Spring MVC通过依赖于Spring框架的其他模块,使用其提供的注解和XML配置,以及提供便捷的功能,实现了与Spring框架的无缝连接。

7、Spring MVC的控制器注解是什么?

在Spring MVC中,控制器层的注解是@Controller。这个注解通常被用于声明一个类是Spring MVC的控制器,即该类负责处理由DispatcherServlet分发的请求,并将用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返回给对应的View进行展示。需要注意的是,在Spring MVC中,声明控制器Bean时,只能使用@Controller注解,而不能使用@Service、@Repository或@Component等注解。

8、如何将请求映射到特定的方法?

在Spring MVC中,可以使用@RequestMapping注解将请求映射到特定的方法。@RequestMapping注解可以应用在类或方法上,用于指定请求的URL、请求方式、请求参数等信息。当@RequestMapping注解应用在类上时,它指定了请求的URL的初始信息;当@RequestMapping注解应用在方法上时,它指定了请求的URL的具体信息。以下是一些示例:

1.将请求映射到特定的URL:

@Controller
@RequestMapping("/user")
public class UserController {    
	@RequestMapping("/user_name")    
	public String userName() {        
	// 处理请求    
	}}

在这个示例中,请求URL为“/user/user_name”的方法将被映射到“userName”方法上。

2.将请求映射到特定的请求方式:

@Controller
@RequestMapping(value = "/user", method = RequestMethod.GET)
public class UserController {    
	@RequestMapping("/user_name")    
	public String userName() {        
	// 处理请求    
	}
}

在这个示例中,GET请求方式且URL为“/user/user_name”的方法将被映射到“userName”方法上。

3.将请求映射到特定的请求参数:

@Controller
@RequestMapping(value = "/user/{name}", method = RequestMethod.GET)
public class UserController {    
@RequestMapping(value = "/user_name", method = RequestMethod.GET)    

public String userName(@PathVariable String name) {        
// 处理请求,使用name参数    
}}

在这个示例中,GET请求且URL为“/user/{name}/user_name”的方法将被映射到“userName”方法上,其中name参数将被提取并传递给“userName”方法。

9、如何在拦截请求中拦截get方式提交的方法?

在Java的Spring框架中,可以使用Interceptor(拦截器)来拦截并处理GET请求。以下是一个简单的示例:首先,你需要创建一个Interceptor类,实现HandlerInterceptor接口,并重写preHandle方法:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {    
@Override    
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {   
     if (request.getMethod().equals("GET")) { 
                // 在这里处理你的GET请求拦截逻辑           
                 // 例如,你可以在这里记录请求信息、修改请求参数等            
                 return true; // 如果返回true,则继续向下执行,否则中断执行        
      }        
      return false;    
 }    

@Override    
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {       
 // 在处理完请求后,可以在这里进行一些后处理操作    
 }    

@Override    
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        
// 当整个请求结束时,可以在这里进行一些清理操作    
}
}

然后,你需要在Spring配置文件中注册这个Interceptor,并指定需要拦截的URL:

<mvc:interceptors>    
<mvc:interceptor>        
<mvc:mapping path="/**"/>        
<bean class="com.example.MyInterceptor"/>    
</mvc:interceptor></mvc:interceptors>

在这个例子中,MyInterceptor会拦截所有的GET请求,然后在preHandle方法中处理你的逻辑。你可以根据需要修改这个方法中的代码。如果你只想拦截特定的GET请求,那么你可以在URL映射中使用更具体的路径。

10、Spring MVC中数据存储的位置是什么?

在Spring MVC中,数据的存储位置可以根据具体需求而有所不同,但通常情况下,数据会存储在以下位置:SessionFlashMapManager(默认FlashMapManager):数据默认存储在session中。CookieFlashMapManager:数据存储在客户端的cookie中。需要注意的是,FlashMap是Spring MVC中用于存储临时数据的,这些数据通常只会在当前请求的生命周期内存在,一旦请求处理完毕,这些数据就会被清除。因此,FlashMap适用于存储需要在当前请求生命周期内存在,但不需要但不需要持久化的数据。如果需要持久化数据,可以考虑将数据存储在数据库或其他持久化存储介质中。

11、Spring MVC请求流程

1.用户向DispatcherServlet发送请求。

2.DispatcherServlet将请求转发给HandlerMapping,由它根据请求寻找对应的处理器(Handler)。

3.HandlerMapping找到处理器后,将包含处理器的chain返回给DispatcherServlet。

4.DispatcherServlet将需要执行的处理器发送给HandlerAdapter。

5.HandlerAdapter通过后台控制器(Handler)调用对应的控制器(Controller)。

6.Controller执行完成后返回ModelAndView。

7.HandlerAdapter将Controller执行的结果ModelAndView返回给DispatcherServlet。

8.DispatcherServlet将ModelAndView传递给ViewResolver进行视图渲染。

你可能感兴趣的:(Java,Java面试题,java)