SpringMVC第一天

1      SpringMVC第一天筆記

 

學習過的mvc框架:Struts2前端

 

springMVC就是相似於Struts2的mvc框架,屬於SpringFrameWork的後續產品。web

 

 

 

 

 

 

2      爲何學SpringMVC?

SpringMVC與Struts2區別spring

對比項目數據庫

SrpingMVCapache

Struts2json

優點瀏覽器

國內市場狀況spring-mvc

有大量用戶,通常新項目啓動都會選用springmvctomcat

有部分老用戶,老項目組,因爲習慣了,一直在使用。安全

國內狀況,springmvc的使用率已經超過Struts2

框架入口

基於servlet

基於filter

本質上沒太大優點之分,只是配置方式不同

框架設計思想

控制器基於方法級別的攔截,處理器設計爲單實例

控制器基於類級別的攔截, 處理器設計爲多實例

因爲設計自己緣由,形成了Struts2,一般來說只能設計爲多實例模式,相比於springmvc設計爲單實例模式,Struts2會消耗更多的服務器內存。

參數傳遞

參數經過方法入參傳遞

參數經過類的成員變量傳遞

Struts2經過成員變量傳遞參數,致使了參數線程不安全,有可能引起併發的問題。

與spring整合

與spring同一家公司,能夠與spring無縫整合

須要整合包

Springmvc能夠更輕鬆與spring整合

 

 

 

3      SpringMVC入門

 

3.1    開發環境

Jdkjdk1.7

Eclipsemars

Tomcatapache-tomcat-7

spring4.2.4

3.2    開發步驟

3.2.1  建立Dynamic web項目

起的項目名字:01-springmvc

3.2.2  導入springmvc的jar包

3.2.3  編寫TestController類

@Controller

public class HelloController {

 

    @RequestMapping("hello")

    public ModelAndView hello(){

       System.out.println("hello springmvc....");

       //建立ModelAndView對象

       ModelAndView mav = new ModelAndView();

       //設置模型數據

       mav.addObject("msg", "hello springmvc...");

       //設置視圖名字

       mav.setViewName("/WEB-INF/jsp/hello.jsp");

       return mav;

    }

}

 

3.2.4  建立hello.jsp頁面

 

 

3.2.5  建立與配置springmvc.xml核心配置文件

<?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:p="http://www.springframework.org/schema/p"

    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-4.0.xsd

        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

   

    <!-- 配置@Controller處理器,包掃描器 -->

    <context:component-scan base-package="com.itheima.springmvc.controller" />

</beans>

 

 

 

 

3.2.6  在web.xml中配置前端控制器

<!-- 配置前端控制器 -->

  <servlet>

    <servlet-name>springmvc</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!-- 加載springmvc核心配置文件 -->

    <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>

 

3.2.7  啓動項目經過瀏覽器測試

 

3.3    小結-springmvc代碼執行流程

 

 

 

4      完成商品列表加載

 

複製第一個項目01-springmvc,粘貼在本項目目錄下更名:02-springmvc,刪掉web.xml核心控制器的配置,從新配置一次(多練習一次)。

 

 

4.1    新建itemList.jsp到新工程中

4.2    建立Item的pojo

public class Item {

    // 商品id

    private int id;

    // 商品名稱

    private String name;

    // 商品價格

    private double price;

    // 商品建立時間

    private Date createtime;

    // 商品描述

    private String detail;

 

建立帶參數的構造器

set/get。。。

}

 

 

 

4.3    編寫ItemController

@Controller

public class ItemController {

   

    @RequestMapping("itemList")

    public ModelAndView itemList(){

      

       ModelAndView mav = new ModelAndView();

       List<Items> itemList = new ArrayList<Items>();

       itemList.add(new Items(1, "冰箱", 1999.0, new Date(), "質量不錯"));

       itemList.add(new Items(2, "冰箱2", 1999.0, new Date(), "質量不錯2"));

       itemList.add(new Items(3, "冰箱3", 1999.0, new Date(), "質量不錯3"));

       itemList.add(new Items(4, "冰箱4", 1999.0, new Date(), "質量不錯4"));

       itemList.add(new Items(5, "冰箱5", 1999.0, new Date(), "質量不錯5"));

       //設置商品數據

       mav.addObject("itemList", itemList);

       //設置視圖名字

       mav.setViewName("/WEB-INF/jsp/itemList.jsp");

       return mav;

    }

 

}

 

 

4.4    啓動項目經過瀏覽器測試

 

 

5      SpringMVC架構

5.1    框架默認加載組件

 

 

 

5.1.1  處理器映射器與處理器適配器

5.1.1.1處理器映射器

從spring3.1版本開始,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成註解式處理器映射。

 

<!-- 配置處理器映射器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

 

5.1.1.2處理器適配器

從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用RequestMappingHandlerAdapter完成註解式處理器適配。

<!-- 處理器適配器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

 

5.1.1.3小結

映射器與適配器必需配套使用,若是映射器使用了推薦的RequestMappingHandlerMapping,適配器也必需使用推薦的RequestMappingHandlerAdapter。

 

 

5.1.1.4註解驅動

<!-- 註解驅動配置,代替映射器與適配器的單獨配置,同時支持json響應(推薦使用) -->

    <mvc:annotation-driven />

 

 

 

 

5.1.2  視圖解析器

<!-- 配置視圖解析器 -->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

       <!-- 配置視圖響應的前綴 -->

       <property name="prefix" value="/WEB-INF/jsp/" />

       <!-- 配置視圖響應的後綴 -->

       <property name="suffix" value=".jsp" />

    </bean>

 

 

5.2    總結-springMVC架構

 

 

 

 

 

6      SpringMVC與Mybatis整合

建立Web新工程:03-springmvc-mybatis

  1. 參考思路與我提供的代碼工程,本身動手搭建新工程。
  2. 整合功能主要是把商品列表加載,從數據庫中查出。
  3. Dao開發能夠用Mybatis逆向工程。

 

6.1    思路

Dao層:

一、SqlMapConfig.xml,空文件便可。須要文件頭。

二、applicationContext-dao.xml。

a)       數據庫鏈接池

b)       SqlSessionFactory對象,須要spring和mybatis整合包下的。

c)        配置mapper文件掃描器。

 

Service層:

一、applicationContext-service.xml包掃描器,掃描@service註解的類。

二、applicationContext-trans.xml配置事務。

 

Controller層:

Springmvc.xml

一、包掃描器,掃描@Controller註解的類。

二、配置註解驅動。

三、視圖解析器

 

Web.xml

  1. 配置spring容量監聽器
  2. 配置前端控制器

 

 

7      參數綁定

 

7.1    默認支持的參數類型

基於完成需求:點擊修改商品時,打開商品編輯頁面,展現商品信息

/**

     * 演示springmvc默認參數的傳遞

     * 跳轉修改商品信息頁面

     * @return

     */

    @RequestMapping("itemEdit")

    public ModelAndView itemEdit(HttpServletRequest request,HttpServletResponse response,HttpSession session){

       ModelAndView mav = new ModelAndView();

      

       //request獲取參數

       String id = request.getParameter("id");

       System.out.println("id爲:" + id);

       //其它對象輸出

       System.out.println("response對象:" + response);

       System.out.println("session對象:" + session);

      

       //查詢商品信息

       Item item = itemServices.getItemById(new Integer(id));

       //設置商品數據返回頁面

       mav.addObject("item", item);

       //設置視圖名稱

       mav.setViewName("itemEdit");

       return mav;

    }

 

 

7.2    綁定簡單參數

/**

     * 演示簡單參數傳遞

     * 跳轉修改商品信息頁面

     * @RequestParam用法:入參名字與方法名參數名不一致時使用{

     * value:傳入的參數名,required:是否必填,defaultValue:默認值

     * }

     *

     */

    @RequestMapping("itemEdit")

    public ModelAndView itemEdit(@RequestParam(value="id",required=true,defaultValue="1")Integer ids){

       ModelAndView mav = new ModelAndView();

      

       //查詢商品信息

       Item item = itemServices.getItemById(ids);

       //設置商品數據返回頁面

       mav.addObject("item", item);

       //設置視圖名稱

       mav.setViewName("itemEdit");

       return mav;

    }

 

 

7.3    Model/ModelMap

/**

     * 演示返回String,經過Model/ModelMap返回數據模型

     * 跳轉修改商品信息頁面

     * @param id

     * @return

     */

    @RequestMapping("itemEdit")

    public String itemEdit(@RequestParam("id")Integer ids,Model m,ModelMap model){

      

       //查詢商品信息

       Item item = itemServices.getItemById(ids);

       //經過Model把商品數據返回頁面

       model.addAttribute("item", item);

       //返回String視圖名字

       return "itemEdit";

    }

 

 

7.4    綁定pojo對象

要點:表單提交的name屬性必需與pojo的屬性名稱一致。

 

/**

     * 演示傳遞pojo參數

     * 更新商品信息

     * @return

     */

    @RequestMapping("updateItem")

    public String updateItem(Item item,Model model){

       //更新商品

       itemServices.update(item);

       //返回商品模型

       model.addAttribute("item", item);

       //返回擔任提示

       model.addAttribute("msg", "修改商品成功");

       //返回修改商品頁面

       return "itemEdit";

    }

 

 

7.5    綁定包裝的pojo

要點:經過點(.)傳遞屬性。

 

 

 

 

7.5.1  pojo:

 

 

7.5.2  controller代碼:

/**

     * 演示包裝pojo傳遞

     * @param vo

     * @return

     */

    @RequestMapping("queryItem")

    public String queryItem(QueryVo vo){

       //打印傳入參數

       System.out.println(vo);

       //返回視圖

       return "itemList";

    }

 

7.5.3  jsp修改:

 

相關文章
相關標籤/搜索