1. 程式人生 > >spring3.1.1 mvc使用註解搭建hello world

spring3.1.1 mvc使用註解搭建hello world

使用spring3.1.1中的mvc搭建專案,寫一個hello world出來。

看了兩天官方文件,不管好壞,就是組織的比較零散,不能有序的給人一個專案基本的輪廓。而且裡面的例子也不是最佳實踐。

開發工具是Eclipse 3.7,伺服器是tomcat7,用的是jee3.0標準,新建一個 Dynamic Web Project,隨便命名為cms。

然後往classpath中加入最基本的jar包(最簡單自然是把spring下的所有包都匯入),其實就是把spring的jar包複製到專案下的WEB-INF/lib目錄即可(偶爾有意外者,可再去配置buildpath,手動加入jar包),篩選後的基本jar包如圖所示:

相關jar包新增完畢後,開始做基礎配置,首先修改web.xml(上圖也可以看見)檔案如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"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">
  3. <display-name>cms</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.html</welcome-file>
  6. <welcome-file>index.jsp</welcome-file>
  7. </welcome-file-list>
  8. <servlet>
  9. <servlet-name>cms</servlet-name>
  10. <servlet-class>
    org.springframework.web.servlet.DispatcherServlet</servlet-class>
  11. <load-on-startup>1</load-on-startup>
  12. </servlet>
  13. <servlet-mapping>
  14. <servlet-name>cms</servlet-name>
  15. <url-pattern>/</url-pattern>
  16. </servlet-mapping>
  17. </web-app>

就是配置一個DispatcherServlet,其url-pattern是/,而不是/*,需要注意這點。/表示DispatcherServlet為當前預設servlet,凡是在web.xml檔案中找不到匹配的<servlet-mapping>元素的URL,它們的訪問請求都將交給預設Servlet處理。而/*會處理所有的請求,不管有沒有其他的<servlet-mapping>匹配。舉例說,如果在根目錄有這樣一個檔案/a.html,那麼訪問 http://localhost/a.html,使用配置/,則不會被spring mvc處理,直接訪問到a.html,如果使用配置/*,那麼spring mvc就會進行處理,沒有相應handler,則會報錯。這樣可以避免靜態檔案,樣式檔案,圖片,js檔案等被spring mvc處理,而出現找不到的情況。

web.xml配置完成,根據spring mvc預設的約定,還需在WEB-INF目錄下新建一個cms-serlvet.xml ,命名不是隨意的,而是根據DispatcherServlet在web.xml中所對應的servlet-name來命名(跟專案名無關,雖然所建專案名也是cms),結構為 [servlet-name]-servlet.xml。

cms-servlet.xml配置基於Annotation(註解)的方式,內容如下,

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  12. http://www.springframework.org/schema/context
  13. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  14. <context:component-scanbase-package="com.cssor.controller"/>
  15. <mvc:annotation-driven/>
  16. <beanclass="org.springframework.web.servlet.view.UrlBasedViewResolver">
  17. <propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>
  18. <propertyname="prefix"value="/WEB-INF/view/"/>
  19. <propertyname="suffix"value=".jsp"/>
  20. </bean>
  21. </beans>

其中jsp檔案是放在 /WEB-INF/view/目錄下,context:component-scan定義了spring自動掃描基礎包路徑,該包下的類會被srping自動掃描管理,基於annotation。mvc:annotation-driven啟動註解驅動的mvc。

配置都完成,開始寫Controller,新建一個類,Main.java,內容如下:

  1. package com.cssor.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.servlet.ModelAndView;
  5. @Controller
  6. publicclassMain{
  7. @RequestMapping(value="/hello")
  8. publicModelAndView handleRequest(){
  9. ModelAndView mav =newModelAndView("hello");
  10. mav.addObject("what","Hello World!");
  11. return mav;
  12. }
  13. }

然後在上文配置過的檢視指定目錄/WEB-INF/view/下建立hello.jsp,注意jsp檔名是跟上文中Main.classs所寫的 new ModelAndView(“hello”)是對應關係,可不是亂起的,是同名關係。hello.jsp內容如:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <htmllang="zh-CN">
  5. <head>
  6. <metacharset="UTF-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <h2>${what }</h2>
  11. </body>
  12. </html>

然後部署專案到tomcat,啟動tomcat,訪問 http://localhost/hello,就可以看到輸出了。至此,基本環境算是搭好了。

參考:http://starscream.iteye.com/blog/1058693

http://hi.baidu.com/С%B6%BE%B3%E6q/blog/item/42cce919a656f80934fa4110.html。