轉自:http://blog.csdn.net/jadyer/article/details/7574643
首先是Web.xml
- <?xmlversion="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>
<?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
- <?xmlversion="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-scanbase-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:resourcesmapping="/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 -->
- <propertyname="prefix"value="/WEB-INF/jsp/"/>
- <propertyname="suffix"value=".jsp"/>
- </bean>
- </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
- <%@ 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:whentest="${aaa_name=='aaa_jadyer'}">
- From:/mydemo/sayaaa
- </c:when>
- <c:whentest="${bbb_name=='bbb_jadyer'}">
- From:/mydemo/saybbb${sessionScope.loginUser}
- </c:when>
- <c:otherwise>
- From:others
- </c:otherwise>
- </c:choose>
- <br/>
- ${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
- body{
- font-size:30px;
- }
body{
font-size:30px;
}
最後是最爲核心的UserController.java
- package com.jadyer.controller;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.SessionAttributes;
- import org.springframework.web.servlet.mvc.support.RedirectAttributes;
- import org.springframework.web.servlet.view.InternalResourceViewResolver;
- /**
- * UserController
- * @author http://blog.csdn.net/jadyer
- * @create Apr 20, 2012 1:23:29 AM
- */
- @Controller //指明這是一個Controller
- @RequestMapping(value="/mydemo")//類似於命名空間,即訪問該Controller時必須加上"/mydemo"在前面
- //只要下面的方法中執行model.addAttribute("loginUser","jadyer")那麼"loginUser"便被自動放到HttpSession
- @SessionAttributes("loginUser")
- public class UserController {
- /**
- * @see 如果在類上指定@RequestMapping並給了值,而在方法上指定@RequestMapping但不給值
- * @see 這時,以下的兩種請求方式,都會被分發到該方法上
- * @see 第一種:'http://127.0.0.1:8088/SpringMVC_study/mydemo'
- * @see 第二種:'http://127.0.0.1:8088/SpringMVC_study/mydemo/'
- * @see 但,如果我們在某個方法上明確指定了@RequestMapping(value="/"),則第二種請求會被分發到該方法上
- */
- @RequestMapping
- public String login(){
- System.out.println("login() is invoked");
- return "addSuccess";
- }
- @RequestMapping(value={"/","/add"})//即訪問"/mydemo/"或者"/mydemo/add",便自動訪問該方法
- public String addUser(){
- System.out.println("addUser() is invoked");
- return "addSuccess";//return邏輯視圖
- }
- /**
- * 簡述如何接收前臺參數,以及@RequestParam的使用
- */
- //這裏@RequestParam("userID")表明在訪問該方法時,必須傳個參數過來,並且參數名必須是int型的userID
- //以下三種情況會導致服務器返回HTTP Status 400
- //1)沒有傳任何參數2)傳的參數中沒有名爲userID的參數3)傳了userID參數但其參數值無法轉換爲int型
- @RequestMapping(value={"/delete"})
- public String deleteUser(@RequestParam("userID")int userID){
- System.out.println("===============" + userID);
- return "addSuccess";
- }
- //這裏@RequestParam表明在訪問該方法時,至少要把userName參數傳過來,否則服務器返回HTTP Status 400
- @RequestMapping("/edit")
- public String editUser(@RequestParam String userName){
- System.out.println("===============" + userName);
- return "addSuccess";
- }
- //這種情況下,無論傳不傳userName參數,都可以訪問到該方法。如果沒有傳userName,則打印出來的值就是null
- //這裏method=RequestMethod.GET用於指定需要以GET方式訪問該方法,注意兩個以上屬性時就要明確value值了
- @RequestMapping(value="/modify", method=RequestMethod.GET)
- public String modifyUser(String userName){
- System.out.println("===============" + userName);
- return "addSuccess";
- }
- /**
- * 簡述如何返回參數給前臺,以及前臺如何獲取參數
- */
- @RequestMapping("/sayaaa")
- public String sayAaa(String userName, Map<String,Object> map){
- map.put("aaa_name","aaa_jadyer"); //此時前臺使用${aaa_name}即可取值
- return "addSuccess";
- }
- @RequestMapping("/saybbb")
- public String sayBbb(String userName, Model model){
- model.addAttribute("bbb_name","bbb_jadyer"); //此時前臺使用${bbb_name}即可取值
- model.addAttribute("loginUser","jadyer");//由於@SessionAttributes,故loginUser會被自動放到HttpSession中
- return "addSuccess";
- }
- @RequestMapping("/sayccc")
- public String sayCcc(String userName, Model model){
- model.addAttribute("ccc_jadyer");//此時默認以Object類型作爲key,即String-->string,故前臺使用${string}即可取值
- return "addSuccess";
- }
- /**
- * 簡述如何獲取javax.servlet.http.HttpServletRequest、HttpServletResponse、HttpSession
- */
- @RequestMapping("/eat")
- public String eat(HttpServletRequest request, HttpServletResponse response, HttpSession session){
- System.out.println("===============" + request.getParameter("myname"));
- System.out.println("===============" + request.getLocalAddr());
- System.out.println("===============" + response.getLocale());
- System.out.println("===============" + session.getId());
- return "addSuccess";
- }
- /**
- * 簡述客戶端跳轉時,傳參的傳遞
- * @see 注意:這種情況下的參數,並不是放到HttpSession中的,不信你可以試一下
- * @see 注意:即先訪問/mydemo/sleep之後,再直接訪問/mydemo/eat
- */
- @RequestMapping("/sleep")
- public String sleep(RedirectAttributes ra){
- ra.addFlashAttribute("redirectName","redirectValue");
- //等同於return "redirect:/mydemo/eat"; //兩種寫法都要寫絕對路徑,而SpringMVC都會爲其自動添加應用上下文
- return InternalResourceViewResolver.REDIRECT_URL_PREFIX +"/mydemo/eat";
- }
- }