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/zh-hant/n/373526.html