springMVC處理請求流程
1.客戶端發起一個http請求
2.該請求被springMVC的DispacherServlet(控制器)進行攔截匹配,匹配到了委託給HandleRequest(處理器)
3.處理器會調用HandlerMapping與HandlerAdapter兩個類,起一個映射做用,映射到Controller中的方法上。
4.一旦映射到,就執行Controller中該路徑對應的方法。
5.Controller層只是起控制做用,實際的業務交給Service的實現層處理。
6.實現層處理完業務,將結果返回給處理器,返回一個叫modAndView的對象,控制器會調用一個視圖渲染器(傳參:model),視圖渲染器會返回給控制器所須要的格式數據(jsp、json等)。
6.控制器直接將格式數據返回給請求端。
示例1
web.xml配置html
<!-- 工程映射 --> <servlet> <servlet-name>ssm</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ssm</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
spring-config.xml是mvc的配置文件web
<!-- 掃描包 --> <context:component-scan base-package="com.test.spring"></context:component-scan> <!-- 視圖渲染器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>
controller配置spring
/** * 測試mvc */ @RequestMapping(value="/hello",method= RequestMethod.GET) public ModelAndView hello(HttpServletRequest req,HttpServletResponse resp){ ModelAndView mav = new ModelAndView(); //封裝要顯示的視圖中的數據 mav.addObject("msg","hello springmvc"); //視圖名,該視圖是/WEB-INF/jsp/hello.jsp mav.setViewName("hello"); return mav; }
/WEB-INF下新建jsp文件夾,在jsp下新建hello.jspjson
<html> <body> <h2>Hello World!</h2> <h4>${msg}</h4> </body> </html>
注意:在如上web.xml中,若是配置成這樣的話mvc
<url-pattern>/*</url-pattern>
在請求的時候會出現以下錯誤app
Did not find handler method for [/WEB-INF/jsp/hello.jsp] No mapping found for HTTP request with URI [/ssm/WEB-INF/jsp/hello.jsp] in DispatcherServlet with name 'ssm'