Spring MVC之DispatcherServlet_动力节点Java学院整理
概述
Spring MVC 是 Spring Framework 的一个模块,它使用了模型-视图-控制器(MVC)架构模式,使 Web 架构上变得更加清晰。Spring MVC 需要一个前端控制器来作为入口点,这个控制器称为 DispatcherServlet
。
在本文中,我们将对 Spring MVC 的 DispatcherServlet
进行详细讲解。
DispatcherServlet 认识
DispatcherServlet
是 Spring MVC 的核心组件之一,是前置控制器,负责请求的转发、请求参数的解析和视图的渲染。它起到了桥梁的作用,将所有请求和处理分派给其他 Spring MVC 组件(例如处理器映射器和视图解析器)进行处理。
DispatcherServlet 原理
当客户端发来请求之后,DispatcherServlet
会按照指定的规则,将请求转发给对应的控制器进行处理,处理完成后再通过 ViewResolver
渲染结果视图,并将结果返回给客户端。
具体流程如下:
- 客户端发起请求,请求被
DispatcherServlet
捕获。 DispatcherServlet
根据请求 URL 调用HandlerMapping
获得匹配的处理器Controller
以及处理器拦截器HandlerInterceptor
。DispatcherServlet
调用HandlerAdapter
执行处理器Controller
。Controller
执行完毕后返回ModelAndView
。DispatcherServlet
进行视图解析ViewResolver
,将结果视图渲染后返回给客户端。
DispatcherServlet 配置
在 Spring MVC 中配置 DispatcherServlet
主要有两种方式:
- 使用
web.xml
进行配置。
<web-app>
<servlet>
<servlet-name>dispatcherServletConfig</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServletConfig</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- 使用 Java 配置。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.web.controller")
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
registry.viewResolver(viewResolver);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
示例一:简单的 HelloWorld
- 创建一个名为
HelloWorldController.java
的类:
@Controller
public class HelloWorldController {
@RequestMapping("/")
public String hello() {
return "hello";
}
}
- 在 webapp/WEB-INF/views/ 目录下创建一个名为
hello.jsp
的 JSP 页面:
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h2>Hello, World!</h2>
</body>
</html>
- 配置
DispatcherServlet
。使用 Java 配置方式,在WebConfig
类的configureDefaultServletHandling()
方法中添加如下代码:
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("hello");
}
访问 http://localhost:8080/
将打印出 Hello, World!
。
示例二:数据传递
- 创建一个名为
DataModelController.java
的类:
@Controller
public class DataModelController {
@RequestMapping("/user")
public String userInfo(Map<String, Object> model) {
User user = new User();
user.setUsername("Alice");
user.setAge(20);
model.put("user", user);
return "user";
}
}
- 在 webapp/WEB-INF/views/ 目录下创建一个名为
user.jsp
的 JSP 页面:
<!DOCTYPE html>
<html>
<head>
<title>User Info</title>
</head>
<body>
<h2>User Info</h2>
<ul>
<li>Username: ${user.username}</li>
<li>Age: ${user.age}</li>
</ul>
</body>
</html>
- 配置
DispatcherServlet
。使用 Java 配置方式,在WebConfig
类的configureDefaultServletHandling()
方法中添加如下代码:
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
registry.viewResolver(viewResolver);
}
访问 http://localhost:8080/user
将打印出用户信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC之DispatcherServlet_动力节点Java学院整理 - Python技术站