第一步:基于浏覽器發送請求給伺服器之後,伺服器啟動通路的web.xml配置前端控制器(DispatcherServlet)
<!-- 配置Spring MVC 前端控制器 -->
<!-- 注冊前端控制器 -->
<servlet>
<servlet-name>frontController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name><!-- 這個名字不能随意寫 -->
<param-value>classpath:spring-configs.xml</param-value>
</init-param>
<!--配置servlet在伺服器啟動時加載(數字越小優先級越高) 配置如下選項以後,tomcat啟動時就會初始化這個servlet, 這個servlet在初始化時會讀取contextConfigLocation
參數對應的配置檔案. -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置前端控制器映射 -->
<servlet-mapping>
<servlet-name>frontController</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
第二步:前端控制器根據請求的url在HandlerMapping中找對應的Controller
在此之前要添加pom.xml檔案的jar包依賴
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>annotations-api</artifactId>
<version>6.0.29</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
</dependencies>
第三步:在SpringMVC-config.xml中添加開啟mvc注解
<mvc-annotation-driven/>
第四步:寫Controller後端控制器
package com.jt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@RequestMapping("testMVC")
@ResponseBody
public String testMVC(){
return "pageMVC";
}
}
在前端控制器直和後端控制器之間還有一個SpringMVC的核心建構是攔截器
寫MVC的攔截器有兩種方式
第一種:寫一個類繼承HandlerInterceptorAdapter,并重寫其方法三個方法,這三個方法的執行順序是不同的,pre方法在前端控制器執行之後後端控制器執行之前執行,post方法在後端控制器執行之後執行,after方法在前端控制器和視圖解析器之間執行
pre方法中需要一個傳回值是boolean類型,該傳回值若是true就是放行,若是false就是攔截住,是以在這裡還可以設定判斷要攔截的條件
package com.jt.intercepter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ibatis.type.IntegerTypeHandler;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class TimeIntercepter extends HandlerInterceptorAdapter{
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("TimeIntercepter.preHandle()");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("TimeIntercepter.postHandle()");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("TimeIntercepter.afterCompletion()");
}
}
第二種:寫一個類實作HandlerInterceptor接口,并實作其方法
然後在SpringMVC-configs.xml配置該攔截器
這裡可以設定的屬性還有許多,例如不攔截的url,就不一一測試
<!-- 配置攔截器對象 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 要攔截的路徑 -->
<mvc:mapping path="/**" />
<!-- 攔截器對象 -->
<bean class="com.jt.intercepter.TimeIntercepter" />
</mvc:interceptor>
</mvc:interceptors>
第四步:配置視圖解析器
目前端處理器找到請求的url對應的後端控制器,則得到其傳回值,根據傳回值從視圖解析器裡去加上字首和字尾在我們的web應用中找到對應的web資源、
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="Prefix" vlaue="/WEB-INF/pages/"></property>
<property name="Suffix" value=".jsp"></property>
</bean>
第五步:加上包掃描,将指定的controller交給spring管理
<context:component-scan base-package="com.jt" />
第六步:在項目上右鍵選中屬性為項目添加targetRuntimes運作時環境,再将項目釋出到伺服器中,最後測試一下url
測試url:http://localhost/jt-programer/testMVC.do
測試結果: