SpringMVC一路總結(一)


      SpringMVC聽聞已久,早在去年就被學長問到關於SpringMVC的基礎知識,當時也沒在意。主要是工作中也沒有用到關於SpringMVC的技術,因此免於沒有時間和精力的借口就沒有接觸和學習SpringMVC。

      一心以為SpringMVC和Spring的作用相當,也是MVC框架的一部分,此時我說的MVC中的一部分並不是替換Struts的Control那部分,而是和Spring一樣的工廠管理類同等等。如今才發現技術不過關就會鬧笑話,真心感覺技術這種東西,越學就越感覺需要學習的東西很多。靜下心來,用一顆誠實的心面對未知,勇於挑戰,好好學習。

      關於MVC框架的結構以及說明不是本文的重點。我相信既然看到SpringMVC了,肯定對MVC框架有了一定的認識。因此,此時,不再贅述關於MVC框架的基礎知識。本人僅總結自己學習SpringMVC過程中的點點滴滴,用以激勵自己的奮斗,銘記自己的成長,為新手朋友提供一個快速入門的案例。本博文為本人學習的總結,請尊重勞動成果。歡迎轉載,請保留博文出處:http://www.cnblogs.com/itred ;本人郵箱: it_red@sina.com 。

                                     一定要明白的理論                                

     Spring 的 Web MVC 框架是圍繞 DispatcherServlet 設計的,它把請求分派給處理程序,同時帶有可配置的處理程序映射、視圖解析、本地語言、主題解析以及上載文件支持。默認的處理程序是基於Controller 接口和RequestMapping,提供廣泛靈活的處理方法。Spring 提供了一個控制器層次結構,可以派生子類。

     其實關於SpringMVC的好處,我覺得也沒什么必要在這里過多的賣弄,這樣說吧。SpringMVC可以實現Struts中的控制功能,SpringMVC就是利用效率高的servlet,雖然沒有了struts中的過濾器了,但是它也可以實現自己的過濾功能;而且,在現在三大框架更多地應用到企業級應用中,越來越多的企業直接選擇SpringMVC作為控制器,因為它不再需要額外的加入其它jar包,如果用struts的話,需要加入另外一些包,而SpringMVC可以和Spring共用jar包,也不知道這樣說對不對,但是方便理解。

    下圖是直接取自Spring JAR包中的API文檔,即:官方資料對於SpringMVC的闡述,本人認為沒有哪個版本可以比這個更加好了。

 

   本人並非是在寫廢話,把官方理論搬過來就行,只是為了入門做一些簡單的功課。這樣,在理解后面的代碼時才更加輕松。

                                   案例走起                                          

一.Demo1

  1. 新建一個web工程,下載Spring的完整包,解壓縮並且將libs目錄下的jar包拷貝到lib目錄下,進行build path; 因為這里只是需要jar包,可以不用拷貝doc和source包。具體操作也可以參看Spring包下的docs中的文檔,本人測試用的版本是3.2;jdk版本是1.6
  2. 因為SpringMVC是圍繞DispatcherServlet來的,所以需要將這個加入到web.xml中;首先對項目中的web.xml進行添加,源碼如下:
 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
       <servlet-name>SpringMVC</servlet-name>
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
       <servlet-name>SpringMVC</servlet-name>
       <url-pattern>/</url-pattern>
    </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

   注意:這里的servlet-name中的值必須要引起高度重視,因為這里的值需要和SpringMVC的另一個配置文件匹配。比如說,這里的servlet-name是SpringMVC,新建的一個配置文件的格式就必須是: ServletName-servlet.xml  ,即這里的名稱為:SpringMVC-servlet.xml 。

  3. 因為采用的是默認模式,所以該文件必須放在WEB-INF目錄下,即新建一個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"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.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-3.0.xsd">
    <context:component-scan base-package="org.springframework.samples.petclinic.web" />
    <bean name="/he" class="com.red.controller.HelloController"></bean>     <!--name="/he"這個就是在瀏覽器中的訪問路徑-->
    <bean id="viewResolver"
   class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/"></property>     <!--這個是目錄約定-->
       <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

 

到這里,SpringMVC的配置文件就算配置全了,但是如果要測試這樣的環境是否合適我們的開發環境,就還需要進行編碼設置控制器。

  4. 作為第一個入門程序,顯然理解清楚過程遠比實現復雜邏輯更有用。在這里的控制器編寫中,我們只需要實現一個接口方法就行。這個接口就是Controller;實現的方法是handleRequest;這里又會接觸到一個新的東西----ModelAndView。這個就是返回的一個視圖,也是可以傳遞參數的,在Demo2中會具體實現。這里只是實現跳轉到一個hello.jsp的頁面。

在這里的配置中,你不會看到.jsp跟在頁面后面,因為在配置文件中已經將其獨立出來,頁面以后綴為.jsp的,因此,這里的視圖不會僅僅局限於jsp。

控制器源碼如下:

 

package com.red.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

         public ModelAndView handleRequest(HttpServletRequest request,
                            HttpServletResponse response) throws Exception {
                   System.out.println("This is the first example about SpringMVC.");
                   return new ModelAndView("/hello");   //實際上就是跳轉到hello.jsp頁面
         }
} 

  這里,案例一就已經實現了。運行程序,才瀏覽器中輸入:http://localhost:8080/20150505_SpringMVC01/he

控制台輸出:

   

瀏覽器中的顯示:

   

二.Demo2

  案例二在案例一的基礎上進行了進一步的修改,將配置文件獨立出來,因為在實際的項目開發過程中,都不會將一些特殊的配置文件進行默認處理,那樣看起來很無序,維護起來也存在一定的困難。

  1. 在src目錄下,新建包com/red/config
  2. 將SpringMVC-servlet.xml復制到該目錄下
  3. 在web.xml中的servlet中加入如下代碼:
    <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>classpath*:com/red/config/SpringMVC-servlet.xml</param-value>
    </init-param>

這樣配置之后就可以任意指定config文件了。根據自己的實際項目要求做。

  4. 在完成配置文件移位后,接下來需要做的就是往頁面上傳遞參數,即從控制器中拿到參數往頁面上傳。查看源碼就會知道ModelAndView的構造方法有很多,這里貼出一些。

     

參數可以根據需要進行選擇,這里用的有第7個。參數ViewName表示jsp頁面,modelname表示參數名稱,頁面上取,modelObject就是傳遞的值。

源碼如下:

package com.red.controller;

import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

         public ModelAndView handleRequest(HttpServletRequest request,
                            HttpServletResponse response) throws Exception {
                   System.out.println("This is the second example about SpringMVC.");
                   String firstParam = "第一個字符串參數";
                   Map<String, Object> map = new HashMap<String, Object>();
                   map.put("prm1", "map中的第一個");
                   map.put("prm2", "map中的第二個");
                   map.put("prm3", "map中的第三個");
                   // return new ModelAndView("/hello", "prm", firstParam);//字符串用
                   return new ModelAndView("/hello", "prm", map);
         }
 }

 

實現效果如下:

   

                                  總結                                            

      到這里,第一部分的SpringMVC入門就已經完成了。就像struts入門一樣簡單,對於技術這種東西,我始終堅信,入門並不難,難得是能夠靜下心來去分析,去思考這樣做的原因,這樣做的好處,為什么會選擇這個技術來實現。因此,思考遠比copy and copy 更加重要!

     本文所涉及到的源碼等供菜鳥朋友學習:

        Demo1      Demo2       Spring完整JAR包(訪問密碼 d498)

 

           感謝奮斗中的自己!

 

 郵箱:it_red@sina.com
  個人博客: http://itred.cnblogs.com
 版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但請在文章顯眼位置標明文章出處。未經本人書面同意,將其作為他用,本人保留追究責任的所有權利。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM