SpringMVC入門之Annotation篇

轉自:http://blog.csdn.net/jadyer/article/details/7574643

 

首先是Web.xml

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


然後是SpringMVC的配置文件jadyer-servlet.xml

  1. <?xmlversion="1.0"encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc" 
  5.     xmlns:context="http://www.springframework.org/schema/context" 
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  8.                         http://www.springframework.org/schema/mvc 
  9.                         http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 
  10.                         http://www.springframework.org/schema/context  
  11.                         http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
  12.     <!-- 啓動Spring的組件自動掃描機制。Spring會自動掃描base-package指定的包中的類和子包裏面類 --> 
  13.     <!-- 此處可參考我的文章http://blog.csdn.net/jadyer/article/details/6038604 --> 
  14.     <context:component-scanbase-package="com.jadyer"/> 
  15.      
  16.     <!-- 啓動SpringMVC的註解功能,它會自動註冊HandlerMapping、HandlerAdapter、ExceptionResolver的相關實例 --> 
  17.     <mvc:annotation-driven/> 
  18.      
  19.     <!-- 由於web.xml中設置是:由SpringMVC攔截所有請求,於是在讀取靜態資源文件的時候就會受到影響(說白了就是讀不到) --> 
  20.     <!-- 經過下面的配置,該標籤的作用就是:所有頁面中引用"/css/**"的資源,都會從"/resources/styles/"裏面進行查找 --> 
  21.     <!-- 我們可以訪問http://IP:8080/xxx/css/my.css和http://IP:8080/xxx/resources/styles/my.css對比出來 --> 
  22.     <mvc:resourcesmapping="/css/**"location="/resources/styles/"/> 
  23.      
  24.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  25.         <!-- viewClass屬性可以用來指定前臺在解析數據時,所允許採用的手段。實際上其默認值就是JstlView --> 
  26.         <!-- 將來有需要的話,就可以在這裏把JstlView改成其它的,如FreeMarkerView,VelocityView,TilesView --> 
  27.         <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> --> 
  28.  
  29.         <!-- 若Controller的方法返回"user/addSuccess",則SpringMVC自動找/WEB-INF/jsp/user/addSuccess.jsp --> 
  30.         <propertyname="prefix"value="/WEB-INF/jsp/"/> 
  31.         <propertyname="suffix"value=".jsp"/> 
  32.     </bean> 
  33. </beans> 
<?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:mvc="http://www.springframework.org/schema/mvc"
	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/mvc
						http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
						http://www.springframework.org/schema/context 
						http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<!-- 啓動Spring的組件自動掃描機制。Spring會自動掃描base-package指定的包中的類和子包裏面類 -->
	<!-- 此處可參考我的文章http://blog.csdn.net/jadyer/article/details/6038604 -->
	<context:component-scan base-package="com.jadyer"/>
	
	<!-- 啓動SpringMVC的註解功能,它會自動註冊HandlerMapping、HandlerAdapter、ExceptionResolver的相關實例 -->
	<mvc:annotation-driven/>
	
	<!-- 由於web.xml中設置是:由SpringMVC攔截所有請求,於是在讀取靜態資源文件的時候就會受到影響(說白了就是讀不到) -->
	<!-- 經過下面的配置,該標籤的作用就是:所有頁面中引用"/css/**"的資源,都會從"/resources/styles/"裏面進行查找 -->
	<!-- 我們可以訪問http://IP:8080/xxx/css/my.css和http://IP:8080/xxx/resources/styles/my.css對比出來 -->
	<mvc:resources mapping="/css/**" location="/resources/styles/"/>
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- viewClass屬性可以用來指定前臺在解析數據時,所允許採用的手段。實際上其默認值就是JstlView -->
		<!-- 將來有需要的話,就可以在這裏把JstlView改成其它的,如FreeMarkerView,VelocityView,TilesView -->
		<!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->

		<!-- 若Controller的方法返回"user/addSuccess",則SpringMVC自動找/WEB-INF/jsp/user/addSuccess.jsp -->
		<property name="prefix" value="/WEB-INF/jsp/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
</beans>


接下來是用於響應請求結果的//WEB-INF//jsp//addSuccess.jsp

  1. <%@ page language="java"pageEncoding="UTF-8"%> 
  2. <%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core"%> 
  3.  
  4. <link rel="stylesheet"type="text/css"href="<%=request.getContextPath()%>/css/my.css"> 
  5.  
  6. welcome: ${aaa_name}、${bbb_name}、${string} 
  7. <br/> 
  8. <c:choose> 
  9.     <c:whentest="${aaa_name=='aaa_jadyer'}"> 
  10.         From:/mydemo/sayaaa 
  11.     </c:when> 
  12.     <c:whentest="${bbb_name=='bbb_jadyer'}"> 
  13.         From:/mydemo/saybbb${sessionScope.loginUser} 
  14.     </c:when> 
  15.     <c:otherwise> 
  16.         From:others 
  17.     </c:otherwise> 
  18. </c:choose> 
  19. <br/> 
  20. ${redirectName} 
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/my.css">

welcome: ${aaa_name}、${bbb_name}、${string}
<br/>
<c:choose>
	<c:when test="${aaa_name=='aaa_jadyer'}">
		From:/mydemo/sayaaa
	</c:when>
	<c:when test="${bbb_name=='bbb_jadyer'}">
		From:/mydemo/saybbb${sessionScope.loginUser}
	</c:when>
	<c:otherwise>
		From:others
	</c:otherwise>
</c:choose>
<br/>
${redirectName}


這是我們的樣式文件//resources//styles//my.css

  1. body{ 
  2.     font-size:30px; 
body{
	font-size:30px;
}


最後是最爲核心的UserController.java

  1. package com.jadyer.controller; 
  2.  
  3. import java.util.Map; 
  4.  
  5. import javax.servlet.http.HttpServletRequest; 
  6. import javax.servlet.http.HttpServletResponse; 
  7. import javax.servlet.http.HttpSession; 
  8.  
  9. import org.springframework.stereotype.Controller; 
  10. import org.springframework.ui.Model; 
  11. import org.springframework.web.bind.annotation.RequestMapping; 
  12. import org.springframework.web.bind.annotation.RequestMethod; 
  13. import org.springframework.web.bind.annotation.RequestParam; 
  14. import org.springframework.web.bind.annotation.SessionAttributes; 
  15. import org.springframework.web.servlet.mvc.support.RedirectAttributes; 
  16. import org.springframework.web.servlet.view.InternalResourceViewResolver; 
  17.  
  18. /**
  19. * UserController
  20. * @author http://blog.csdn.net/jadyer
  21. * @create Apr 20, 2012 1:23:29 AM
  22. */ 
  23. @Controller //指明這是一個Controller 
  24. @RequestMapping(value="/mydemo")//類似於命名空間,即訪問該Controller時必須加上"/mydemo"在前面 
  25. //只要下面的方法中執行model.addAttribute("loginUser","jadyer")那麼"loginUser"便被自動放到HttpSession 
  26. @SessionAttributes("loginUser"
  27. public class UserController { 
  28.     /**
  29.      * @see 如果在類上指定@RequestMapping並給了值,而在方法上指定@RequestMapping但不給值
  30.      * @see 這時,以下的兩種請求方式,都會被分發到該方法上
  31.      * @see 第一種:'http://127.0.0.1:8088/SpringMVC_study/mydemo'
  32.      * @see 第二種:'http://127.0.0.1:8088/SpringMVC_study/mydemo/'
  33.      * @see 但,如果我們在某個方法上明確指定了@RequestMapping(value="/"),則第二種請求會被分發到該方法上
  34.      */ 
  35.     @RequestMapping 
  36.     public String login(){ 
  37.         System.out.println("login() is invoked"); 
  38.         return "addSuccess"
  39.     } 
  40.      
  41.     @RequestMapping(value={"/","/add"})//即訪問"/mydemo/"或者"/mydemo/add",便自動訪問該方法 
  42.     public String addUser(){ 
  43.         System.out.println("addUser() is invoked"); 
  44.         return "addSuccess";//return邏輯視圖 
  45.     } 
  46.      
  47.     /**
  48.      * 簡述如何接收前臺參數,以及@RequestParam的使用
  49.      */ 
  50.     //這裏@RequestParam("userID")表明在訪問該方法時,必須傳個參數過來,並且參數名必須是int型的userID 
  51.     //以下三種情況會導致服務器返回HTTP Status 400 
  52.     //1)沒有傳任何參數2)傳的參數中沒有名爲userID的參數3)傳了userID參數但其參數值無法轉換爲int型 
  53.     @RequestMapping(value={"/delete"}) 
  54.     public String deleteUser(@RequestParam("userID")int userID){ 
  55.         System.out.println("===============" + userID); 
  56.         return "addSuccess"
  57.     } 
  58.     //這裏@RequestParam表明在訪問該方法時,至少要把userName參數傳過來,否則服務器返回HTTP Status 400 
  59.     @RequestMapping("/edit"
  60.     public String editUser(@RequestParam String userName){ 
  61.         System.out.println("===============" + userName); 
  62.         return "addSuccess"
  63.     } 
  64.     //這種情況下,無論傳不傳userName參數,都可以訪問到該方法。如果沒有傳userName,則打印出來的值就是null 
  65.     //這裏method=RequestMethod.GET用於指定需要以GET方式訪問該方法,注意兩個以上屬性時就要明確value值了 
  66.     @RequestMapping(value="/modify", method=RequestMethod.GET) 
  67.     public String modifyUser(String userName){ 
  68.         System.out.println("===============" + userName); 
  69.         return "addSuccess"
  70.     } 
  71.      
  72.     /**
  73.      * 簡述如何返回參數給前臺,以及前臺如何獲取參數
  74.      */ 
  75.     @RequestMapping("/sayaaa"
  76.     public String sayAaa(String userName, Map<String,Object> map){ 
  77.         map.put("aaa_name","aaa_jadyer"); //此時前臺使用${aaa_name}即可取值 
  78.         return "addSuccess"
  79.     } 
  80.     @RequestMapping("/saybbb"
  81.     public String sayBbb(String userName, Model model){ 
  82.         model.addAttribute("bbb_name","bbb_jadyer"); //此時前臺使用${bbb_name}即可取值 
  83.         model.addAttribute("loginUser","jadyer");//由於@SessionAttributes,故loginUser會被自動放到HttpSession中 
  84.         return "addSuccess"
  85.     } 
  86.     @RequestMapping("/sayccc"
  87.     public String sayCcc(String userName, Model model){ 
  88.         model.addAttribute("ccc_jadyer");//此時默認以Object類型作爲key,即String-->string,故前臺使用${string}即可取值 
  89.         return "addSuccess"
  90.     } 
  91.      
  92.     /**
  93.      * 簡述如何獲取javax.servlet.http.HttpServletRequest、HttpServletResponse、HttpSession
  94.      */ 
  95.     @RequestMapping("/eat"
  96.     public String eat(HttpServletRequest request, HttpServletResponse response, HttpSession session){ 
  97.         System.out.println("===============" + request.getParameter("myname")); 
  98.         System.out.println("===============" + request.getLocalAddr()); 
  99.         System.out.println("===============" + response.getLocale()); 
  100.         System.out.println("===============" + session.getId()); 
  101.         return "addSuccess"
  102.     } 
  103.      
  104.     /**
  105.      * 簡述客戶端跳轉時,傳參的傳遞
  106.      * @see 注意:這種情況下的參數,並不是放到HttpSession中的,不信你可以試一下
  107.      * @see 注意:即先訪問/mydemo/sleep之後,再直接訪問/mydemo/eat
  108.      */ 
  109.     @RequestMapping("/sleep"
  110.     public String sleep(RedirectAttributes ra){ 
  111.         ra.addFlashAttribute("redirectName","redirectValue"); 
  112.         //等同於return "redirect:/mydemo/eat"; //兩種寫法都要寫絕對路徑,而SpringMVC都會爲其自動添加應用上下文 
  113.         return InternalResourceViewResolver.REDIRECT_URL_PREFIX +"/mydemo/eat"
  114.     } 

 

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