2.帶你走進 SpringMVC 的世界

昨天跟大家從宏觀上分享了一下SpringMVC,那今天老師就真正帶大家進入SpringMVC的世界了。

1. 環境的搭建

需要導入spring的jar包,單純的入門springmvc的話不需要導入所有的spring jar包,但是核心包和spring-web/spring-webmvc是一定要導入的,考慮到後面還會和mybatis整合,所以也導入了持久操作的包和aop的包,總共如下:

在這裏插入圖片描述

2. 配置前端控制器DispatcherServlet

前端控制器要配置在WEB-INF/web.xml中,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringMVC_Study</display-name>
<welcome-file-list> 
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置前端控制器DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping> 
</web-app>

從上面的配置中可以看出,和以前學習servlet時候的配置基本上一模一樣,前端控制器就相當於一個servlet,要注意的是,需要我們配置contextConfigLocation。contextConfigLocation是用來加載springmvc的配置文件(配置處理器映射器、適配器等) 的,如果不配置contextConfigLocation,則默認加載的是WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml。所以處理器映射器和處理器適配器都會配在classpath下我們指定的springmvc.xml中。

還有一個要說明的地方就是DispatcherServlet的攔截方式,主要有三種攔截方式,如下:

1. *.action,可以訪問以.action結尾的地址,由DispatcherServlet進行解析。此方法最簡單,不會導致靜態資源(jpg,js,css)被攔截。
2. /,所有訪問的地址都由DispatcherServlet進行解析,此方法可以實現REST風格的url,很多互聯網類型的應用使用這種方式。但是此方法會導致靜態文件(jpg,js,css)被攔截後不能正常顯示,所以對靜態文件的解析需要配置不讓DispatcherServlet進行解析。
3. /*,這樣配置是不對的,使用這種配置,最重要轉發到一個jsp頁面時,仍然會由DispatcherServlet解析jsp地址,不能根據jsp頁面找到Handler,會報錯。

3. 配置處理器適配器HandlerAdapter

因爲處理器Handler要根據適配器的要求來開發,所以我們先配置一下適配器HandlerAdapter,在springmvc.xml中配置:

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

適配器SimpleControllerHandlerAdapter能執行實現了Controller接口的Handler。既然這個適配器能執行實現了Controller接口的Handler,那我們趁熱打鐵,把Handler給寫了。

4. 處理器Handler開發

這裏爲了方便,不涉及到mybatis查詢數據庫,我用靜態數據模擬一下:

public class ItemsController1 implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
    HttpServletResponse response) throws Exception {

        //實際中是調用service查找數據庫,查詢商品列表,這裏直接使用靜態數據來模擬了
        List<Items> itemsList = new ArrayList<Items>();
        //向list中填充靜態數據
        Items items_1 = new Items();
        items_1.setName("聯想筆記本");
        items_1.setPrice(6000f);
        items_1.setDetail("ThinkPad T430 聯想筆記本電腦!");

        Items items_2 = new Items();
        items_2.setName("蘋果手機");
        items_2.setPrice(5000f);
        items_2.setDetail("iPhone6蘋果手機!");

        itemsList.add(items_1);
        itemsList.add(items_2);

        //返回ModelAndView
        ModelAndView modelAndView = new ModelAndView();

        //相當於request的setAttribute,在jsp頁面中通過itemsList取數據
        modelAndView.addObject("itemaList", itemsList);

        //指定視圖
        modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");

        return modelAndView;
    }
}

程序中後面的視圖部分就跟之前學習servlet時差不多,只不過換種寫法而已。

5. 配置處理器

寫好了Handler,我們需要在springmvc.xml中對該Handler進行配置,如下:

<!-- 配置Handler --> 
<bean name="/queryItems.action" class="ssm.controller.ItemsController1" />

先不說這個配置,在下面映射器配完了一起說。

6. 配置處理器映射器

HandlerMapping也是在springmvc.xml中配置,如下:

<!-- 配置處理器映射器
將bean的name作爲url進行查找,需要在配置Handler時指定beanname(就是url)
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

BeanNameUrlHandlerMapping:表示將定義的Bean的name作爲請求的url,需要將編寫的controller在spring容器中進行配置(即上面的Handler配置),且指定bean的name爲請求的url,且必須以.action結尾。所以當請求的地址爲:上下文/queryItems.action時,映射器BeanNameUrlHandlerMapping就會找到這個Handler配置中指定的class,也就是IntemsController1.java去執行,返回ModelAndView。這樣就打通了請求->Handler這條線了。

7. 配置視圖解析器

<!-- 配置視圖解析器 
進行jsp解析,默認使用jstl標籤,classpath下得有jstl的包
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />

這樣就可以解析jsp了。

通過今天的分享,基本上已經走入了springmvc的世界了,接下來就是學習springmvc中其他的知識了,明天繼續給大家分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章