javascript
Spring之SpringMVC(四)
1.Spring MVC概述
Spring MVC基于MVC模式實現,能夠構建一個像Spring一樣的靈活和松耦合的web應用程序。
2.Spring的工作流程
上面是一個請求的流程:
1.請求的第一站是DispatcherServlet,所以Spring容器首先必須先在配置中加載DispatcherServlet的bean。DispatcherServlet就是前端控制器。
2.DispatcherServlet任務是將請求轉發到HandlerAdapter(控制器)中,但是該轉發到哪個控制器呢?它會根據它攜帶的url在HandlerMapping(處理器映射)中找到這個控制器。
3.找到了這個控制器,于是DispatcherServlet攜帶請求和對應參數發給這個控制器,說:“交給你了,兄弟!”
4.控制器進行處理。
5.控制器處理完,把數據打包,連同模型和視圖名一同發回給DispatcherServlet,就是說:“我搞定了,拿去!”
6.上面說到返回一個視圖名,但是怎么找到對應的頁面呢?這時候就有了ViewResolver(試圖解析器),例如視圖名為‘login’,ViewResolver會把他解析成“localhost:8080/project/login.html”
7.有了返回的數據模型和對應的解析視圖,于是對應視圖,也就是localhost:8080/project/login.html就能把數據渲染出來。
3.DispatcherServlet的配置
DispatcherServlet可以通過web.xml進行配置,但是,由于Spring3.1功能的增強,同時為了更好地了解DispatcherServlet,將采用java將DispatcherServlet配置到servlet容器中。
下面就是Java實現的配置DispatcherServlet
- a protected String[] getServletMappings()這個方法會將一個或多個路徑映射到DispatcherServlet上,他映射的是“/”,表示處理進入應用的所有請求。
剩下兩個函數,需要了解兩個“應用上下文”,SpringWeb中有兩個應用上下文,DispatcherServlet和ContextLoaderListener加載的上下文。
DispatcherServlet加載控制器,視圖解析器,以及處理器映射的bean。
ContextLoaderListener加載應用中的其他bean,例如后端的中間層和數據層。
b.protected Class<?>[] getServletConfigClasses()方法返回帶有@Configuration注解的類用來定義DispatcherServlet應用上下文的bean。
c.protected Class<?>[] getRootConfigClasses()返回帶有@Configuration注解的類用來定義ContextLoaderListener應用上下文的bean。
讓我們來簡單看一下RootConfig和WebConfig是什么?
@Configuration @EnableWebMvc @ComponentScan("spitter.web") public class WebConfig extends WebMvcConfigurerAdapter{@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver resolver = new InternalResourceViewResolver();resolver.setPrefix("/WEB-INF/views");resolver.setSuffix(".jsp");resolver.setExposeContextBeanAsAttributes(true);return resolver;}@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();} } @Configuration @ComponentScan(basePackages={"spittr"},excludeFilters= {@Filter(type = FilterType.ANNOTATION , value=EnableWebMvc.class)}) public class RootConfig { }我們已經配置好了DispatcherServlet,啟用了基本的SpringMVC組件,下面就是使用SpringMVC控制器去處理web請求。
@Controller @RequestMapping(value = "/hello") public class HelloController {@RequestMapping(value = "/show",method = RequestMethod.GET)public String showUser(@RequestParam("user_id") long user_id , Model model)model.addAttribute(userRespository.findOne(user_id));return "user";} }如圖請求是xxxx/hello/show 參數是user_id
返回結果是model,儲存user信息,渲染視圖是user.jsp
當然,在控制器中,可以進行很復雜的處理操作,這些操作可以被一層層封裝起來,達到良好的項目質量。
總結
以上是生活随笔為你收集整理的Spring之SpringMVC(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring之面向切面编程AOP(三)
- 下一篇: gradle idea java ssm