做者:gqk前端
Spring 配備構建Web 應用的全功能MVC框架。Spring能夠很便捷地和其餘MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也容許以聲明的方式把請求參數和業務對象綁定。java
spring mvc是一個基於mvc的web框架。spring mvc是spring框架的一個模塊,springmvc和spring無需經過中間整合層進行整合。web
掌握幾個器:前端控制器,處理器映射器,處理器適配器,試圖解析器spring
第一步:發起請求到前端控制器(DispatcherServlet)api
第二步:前端控制器請求HandlerMapping查找Handler能夠根據xml配置、註解進行查找spring-mvc
第三步:處理器映射器HandlerMapping向前端控制器返回Handlertomcat
第四步:前端控制器調用處理器適配器去執行Handlermvc
第五步:處理器適配器去執行Handlerapp
第六步:Handler執行完成給適配器返回ModelAndView框架
第七步:處理器適配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一個底層對象,包括 Model和view
第八步:前端控制器請求視圖解析器去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp)
第九步:視圖解析器向前端控制器返回View
第十步:前端控制器進行視圖渲染。視圖渲染將模型數據(在ModelAndView對象中)填充到request域
第十一步:前端控制器向用戶響應結果
SpringMVC中的組件:
建立好後咱們須要手動去建立一些目錄:手動建webapp的目錄
選擇 facets,點擊+號, 選擇 web
添加web.xml成功:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation配置springmvc加載的配置文件(配置處理器映射器、適配器等等) 若不配置,默認加載WEB-INF/servlet名稱-servlet(springmvc-servlet.xml) --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 第一種:*.action,訪問以.action結尾,由DispatcherServlet進行解析 第二種:/,全部訪問的地址由DispatcherServlet進行解析,對靜態文件的解析須要配置不讓DispatcherServlet進行解析, 使用此種方式和實現RESTful風格的url 第三種:/*,這樣配置不對,使用這種配置,最終要轉發到一個jsp頁面時,仍然會由DispatcherServlet解析jsp地址, 不能根據jsp頁面找到handler,會報錯 --> <url-pattern>*.action</url-pattern> </servlet-mapping> </web-app>
注意:
javax.servlet.http.HttpServletRequest httpServletRequest可能會報錯 解決方法下面看(沒有servlet的jar)
package com.gqk.controller; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import java.util.Date; public class HelloHandler implements Controller { public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv = new ModelAndView(); mv.setViewName("index"); mv.addObject("date",new Date()); return mv; } }
右鍵項目->open module setting,以下圖所示
.libraries-> + ->Java->選擇路徑(tomcat安裝目錄下lib->tomcat-api.jar)
選擇對應的jar
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean name="/hello.action" class="com.gqk.controller.HelloHandler"/>
<!-- 處理器映射器
將bean的name做爲url進行查找,須要在配置Handler時指定beanname(就是url)
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 視圖解析器
解析jsp
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置jsp路徑的前綴 -->
<property name="prefix" value="/"/>
<!-- 配置jsp路徑的後綴 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
啓動tomcat訪問
http://localhost:8086/hello.action