@RequestMapping註解

該項目的整體文件圖:



------>項目源碼:百度網盤極速下載

1.在Web.xml中配置前端控制器DispatcherServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ModelTest</display-name>
<!-- 定義Spring MVC的前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- 讓Spring MVC的前端控制器攔截所有請求 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!-- 編碼過濾器 -->
  <filter>
		<filter-name>characterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
 </filter>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

2.配置Spring MVC的Controller

   springmvc-config.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: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-4.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd     
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
        
    <!-- spring可以自動去掃描base-pack下面的包或者子包下面的java文件,如果掃描到有Spring的相關注解的類,則把這些類註冊爲Spring的bean -->
    <context:component-scan base-package="org.fkit.controller"/>
    
    <!-- 視圖解析器  --> 
     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前綴 -->
        <property name="prefix">
            <value>/WEB-INF/content/</value>
        </property>
        <!-- 後綴 -->
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
</beans>
  

3.前端頁面(View)

 index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試@ModelAttribute</title>
</head>
<body>
<h3>測試@ModelAttribute的不同用法</h3>
<a href="loginForm1">測試Model</a><br><br>
<a href="loginForm2">測試ModelMap</a><br><br>
<a href="loginForm3">測試ModelAndView</a><br><br>
</body>
</html>

loginForm1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試Model</title>
</head>
<body>
<h3>測試Model</h3>
<form action="login1" method="post">
     <table>
         <tr>
         	<td><label>登錄名: </label></td>
             <td><input type="text" id="loginname" name="loginname" ></td>
         </tr>
         <tr>
         	<td><label>密碼: </label></td>
             <td><input type="password" id="password" name="password" ></td>
         </tr>
         <tr>
             <td><input id="submit" type="submit" value="登錄"></td>
         </tr>
     </table>
</form>
</body>
</html>

loginForm2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試ModelMap</title>
</head>
<body>
<h3>測試ModelMap</h3>
<form action="login2" method="post">
     <table>
         <tr>
         	<td><label>登錄名: </label></td>
             <td><input type="text" id="loginname" name="loginname" ></td>
         </tr>
         <tr>
         	<td><label>密碼: </label></td>
             <td><input type="password" id="password" name="password"></td>
         </tr>
         <tr>
             <td><input id="submit" type="submit" value="登錄"></td>
         </tr>
     </table>
</form>
</body>
</html>


loginForm3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試ModelAndView</title>
</head>
<body>
<h3>測試ModelAndView</h3>
<form action="login3" method="post">
     <table>
         <tr>
         	<td><label>登錄名: </label></td>
             <td><input type="text" id="loginname" name="loginname" ></td>
         </tr>
         <tr>
         	<td><label>密碼: </label></td>
             <td><input type="password" id="password" name="password"></td>
         </tr>
         <tr>
             <td><input id="submit" type="submit" value="登錄"></td>
         </tr>
     </table>
</form>
</body>
</html>

result1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試@ModelAttribute(value="")註釋返回具體類的方法</title>
</head>
<body>
訪問request作用範圍域中的model對象:${requestScope.user.loginname }<br>
訪問request作用範圍域中的model對象:${requestScope.user.password }<br>
訪問request作用範圍域中的model對象:${requestScope.user.username }<br>
<br>
</body>
</html>

result2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試@ModelAttribute註釋void返回值的方法</title>
</head>
<body>
訪問request作用範圍域中的Model對象:${requestScope.user.loginname }<br>
訪問request作用範圍域中的Model對象:${requestScope.user.password }<br>
訪問request作用範圍域中的Model對象:${requestScope.user.username }<br>
<br>
</body>
</html>

result3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試@ModelAttribute註釋返回具體類的方法</title>
</head>
<body>
訪問request作用範圍域中的Model對象:${requestScope.user.loginname }<br>
訪問request作用範圍域中的Model對象:${requestScope.user.password }<br>
訪問request作用範圍域中的Model對象:${requestScope.user.username }<br>
<br>
</body>
</html>

4.後端部分

   User.java

package org.fkit.domain;

import java.io.Serializable;

//域對象,實現序列化接口
public class User implements Serializable {
	private String loginname;
	private String password;
	private String username;
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(String loginname, String password, String username) {
		super();
		this.loginname = loginname;
		this.password = password;
		this.username = username;
	}
	public String getLoginname() {
		return loginname;
	}
	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "User [loginname=" + loginname + ", password=" + password + ", username=" + username + "]";
	}
}

FormController.java

package org.fkit.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

// Controller註解用於指示該類是一個控制器,可以同時處理多個請求動作
@Controller
public class FormController{

	@RequestMapping(value="/{formName}")
	 public String loginForm(@PathVariable String formName)//處理請求路徑的註解
	{
		// 動態跳轉頁面
		return formName;
	}

}

User1Controller.java

package org.fkit.controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

//Controller註解用於指示該類是一個控制器,可以同時處理多個請求動作
@Controller
public class User1Controller {

	private static final Log logger = LogFactory.getLog(User1Controller.class);
	// @ModelAttribute修飾的方法會先於login調用,該方法用於接收前臺jsp頁面傳入的參數
	@ModelAttribute
	public void userModel(String loginname,String password,Model model){
		logger.info("userModel");
		// 創建User對象存儲jsp頁面傳入的參數
		User user=new User();
		user.setLoginname(loginname);
		user.setPassword(password);
		// 將User對象添加到Model當中
		model.addAttribute("user", user);
	}
	
	/*
	 * Model的使用,可以向方法中的Model添加對象
	 */
	@RequestMapping(value="/login1") 
	public String login(Model model){
		logger.info("login");
		// 從Model當中取出之前存入的名爲user的對象
		User user=(User) model.asMap().get("user");
		System.out.println(user);
		// 設置user對象的username屬性
		user.setUsername("測試");
		return "result1";
	}
		
}

User2Controller.java

package org.fkit.controller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

// Controller註解用於指示該類是一個控制器,可以同時處理多個請求動作
@Controller
public class User2Controller{
	private static final Log logger = LogFactory.getLog(User2Controller.class);
	
	@ModelAttribute
	public void userMode2(String loginname,String password,
			 ModelMap modelMap){
		logger.info("userMode2");
		// 創建User對象存儲jsp頁面傳入的參數
		User user = new User();
		user.setLoginname(loginname);
		user.setPassword(password);
		// 將User對象添加到ModelMap當中
		modelMap.addAttribute("user", user);
	}
    /*
     * ModelMap的使用,都是往方法裏添加對象
     */
	@RequestMapping(value="/login2")
	 public String login2(ModelMap modelMap){
		logger.info("login2");
		// 從ModelMap當中取出之前存入的名爲user的對象
		User user = (User) modelMap.get("user");
		System.out.println(user);
		// 設置user對象的username屬性
		user.setUsername("測試");
		return "result2";
	}
	
	

}

User3Controller.java

package org.fkit.controller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//Controller註解用於指示該類是一個控制器,可以同時處理多個請求動作
@Controller
public class User3Controller {

	private static final Log logger = LogFactory.getLog(User3Controller.class);
	
	@ModelAttribute
	public void userModel3(String loginname,String password,ModelAndView mv){
		logger.info("userMode3");
		User user = new User();
		user.setLoginname(loginname);
		user.setPassword(password);
		// 將User對象添加到ModelAndView的Model當中
	    mv.addObject("user", user);
	}
	
	/*
	 * ModelAndView的使用,其返回值即包含模型數據信息,也包含視圖信息,其代碼功能和Model基本一致
	 */
	@RequestMapping(value="/login3")
	public ModelAndView login3(ModelAndView mv){
		// 從ModelAndView的Model當中取出之前存入的名爲user的對象
		User user=(User) mv.getModel().get("user");
		System.out.println(user);
		// 設置user對象的username屬性
		user.setUsername("測試");
		// 設置返回的視圖名稱
		mv.setViewName("result3");
		return mv;
	}
}

運行截圖:








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