Spring MVC是一个基于Java语言的Web框架,是Spring Framework的一部分。它提供了用于构建Web应用程序的基本架构,通过与其他Spring框架组件集成,使开发Web应用程序更加容易。
一、DispatcherServlet
DispatcherServlet是Spring MVC的核心。它是一个Servlet,用于拦截并处理所有用户请求。当请求到达DispatcherServlet时,它会将请求路由到相应的控制器,并将响应返回给用户。DispatcherServlet可以通过Java配置或XML配置进行配置。
Java配置:
@Configuration
@EnableWebMvc
public class AppConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
XML配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
二、HandlerMapping
HandlerMapping是Spring MVC的另一个核心组件,它的作用是将请求映射到相应的控制器。当请求到达DispatcherServlet时,DispatcherServlet将委托HandlerMapping来寻找相应的处理程序,处理程序可以是Controller方法、Servlet、后端服务等。
Java配置:
@Configuration
@EnableWebMvc
public class AppConfig implements WebMvcConfigurer {
@Autowired
private MyController myController;
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false).favorParameter(true).parameterName("mediaType").ignoreAcceptHeader(true).useJaf(false)
.defaultContentType(MediaType.APPLICATION_JSON).mediaType("html", MediaType.TEXT_HTML)
.mediaType("json", MediaType.APPLICATION_JSON);
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new MyArgumentResolver());
}
@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
returnValueHandlers.add(new MyReturnValueHandler());
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new MyMessageConverter());
}
@Bean
public HandlerMapping handlerMapping() {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
Properties mappings = new Properties();
mappings.put("/hello", myController);
mapping.setMappings(mappings);
return mapping;
}
// Other beans...
}
XML配置:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<mvc:annotation-driven/>
<mvc:view-controller path="/" view-name="index"/>
<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:interceptors>
<bean class="com.example.MyInterceptor"/>
</mvc:interceptors>
<mvc:path-matching suffix-pattern="false"/>
<mvc:content-negotiation favor-parameter="true" parameter-name="mediaType" ignore-accept-header="true">
<mvc:default-content-type value="application/json"/>
<mvc:media-type extension="html" type="text/html"/>
<mvc:media-type extension="json" type="application/json"/>
</mvc:content-negotiation>
<mvc:argument-resolvers>
<bean class="com.example.MyArgumentResolver"/>
</mvc:argument-resolvers>
<mvc:return-value-handlers>
<bean class="com.example.MyReturnValueHandler"/>
</mvc:return-value-handlers>
<mvc:message-converters>
<bean class="com.example.MyMessageConverter"/>
</mvc:message-converters>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean name="/hello" class="com.example.MyController"/>
</beans>
三、Controller
Controller是处理客户端请求并返回对应响应的组件。它包含一个或多个处理程序方法,每个方法都由 @RequestMapping注释进行标记,以指示它们应该处理哪些URL和HTTP方法。
Java配置:
@Controller
public class MyController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello";
}
}
XML配置:
<bean name="/hello" class="com.example.MyController"/>
四、ViewResolvers
ViewResolvers负责将字符串形式的视图名解析为实际的视图。Spring框架提供了多个实现,包括 InternalResourceViewResolver(用于JSP视图)、TilesViewResolver(用于Tiles视图)和 FreeMarkerViewResolver(用于FreeMarker视图)等
Java配置:
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
XML配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean>
原创文章,作者:TRIMK,如若转载,请注明出处:https://www.506064.com/n/373526.html
微信扫一扫
支付宝扫一扫