Spring3 MVC annotation 案例

項目需要用到Spring3.0的MVC和annotation,以前也接觸過Spring,不過僅限於自己學習Spring的AOP和IoC,第一次聽到Spring的MVC確實有點手足無措。網上參考了幾個小案例,整了一下午,終於明白了點。分享一下。

這個Demo中,index.jsp裏面有4個鏈接,分別對應Controller類中的四個方法。第一個與第二個方法同樣Mapping的是一個簡單的路徑,分別return一個ModelAndView和String。第三個方法Mapping一個帶參數的鏈接,第四個方法Mapping一個帶路徑變量和參數的鏈接。在方法中做處理後返回要展示的頁面和數據。

1)新建一個Dynamic Web Project——SpringMVCDemo

2)引入jar包。包括spring中dist目錄下的所有jar包,以及jstl.jar,standard.jar包(JSP頁面中的for each標籤要用到)和commons-logging-1.1.1.jar包。

3)配置web.xml文件,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns: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">

	<servlet>
		<servlet-name>springMVCDemo</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>springMVCDemo</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

4)在web.xml所在路徑下新建springMVCDemo-servlet.xml,名字中的springMVCDemo是web.xml中配置的servlet-name,所以這個xml文件的名字是固定的。內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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.0.xsd
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<mvc:annotation-driven />

	<!-- 註釋資源掃描包路徑 -->
	<context:component-scan base-package="org.spring.wayne.controller" />

	<bean
		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />

	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

	<!-- 對模型視圖名稱的解析,即在模型視圖名稱添加前後綴,在requestmapping輸入的地址後自動調用該類進行視圖解析 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" /><!-- 跳轉頁面的前綴路徑 
			如 /web-inf/jsp/ -->
		<property name="suffix" value=".jsp"></property><!-- 跳轉頁面後綴 如 helloWorld.jsp -->
	</bean>
</beans>

5)新建一個POJO類User.java,內容如下:

package org.spring.wayne.model;

public class User {
	private String name;
	private int age;

	public User() {

	}

	public User(String name, int age) {
		this.age = age;
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

6)編寫Controller類DemoController.java,內容如下:

package org.spring.wayne.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.spring.wayne.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class DemoController {

	@RequestMapping("/getmav")
	public ModelAndView getInfo() {
		ModelAndView mav = new ModelAndView();
		// 傳String
		mav.addObject("title", "Return ModelAndView");
		// 傳Object
		User user = new User("wayne", 24);
		mav.addObject("user", user);
		// 傳List
		List<User> list = new ArrayList<User>();
		list.add(new User("wayne1", 12));
		list.add(new User("wayne2", 24));
		list.add(new User("wayne3", 34));
		list.add(new User("wayne4", 45));
		mav.addObject("list", list);
		// 傳Map
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", "wayne");
		map.put("age", "24");
		mav.addObject("map", map);

		mav.setViewName("result");
		return mav;
	}

	@RequestMapping("/string")
	public String getInfo(Model model) {
		// 傳String
		model.addAttribute("title", "Return String");
		// 傳Object
		User user = new User("wayne", 24);
		model.addAttribute("user", user);
		// 傳List
		List<User> list = new ArrayList<User>();
		list.add(new User("wayne1", 12));
		list.add(new User("wayne2", 24));
		list.add(new User("wayne3", 34));
		list.add(new User("wayne4", 45));
		model.addAttribute("list", list);
		// 傳Map
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", "wayne");
		map.put("age", "24");
		model.addAttribute("map", map);

		return "result";
	}

	@RequestMapping("/strparam")
	public String getInfo(@RequestParam("name") String name,
			@RequestParam("age") String age, Model model) {
		// 傳String
		model.addAttribute("title", "Return String @RequestParam");
		// 傳Object
		User user = new User(name, Integer.valueOf(age));
		model.addAttribute("user", user);
		// 傳List
		List<User> list = new ArrayList<User>();
		list.add(new User(name, Integer.valueOf(age)));
		list.add(new User(name, Integer.valueOf(age)));
		list.add(new User(name, Integer.valueOf(age)));
		list.add(new User(name, Integer.valueOf(age)));
		model.addAttribute("list", list);
		// 傳Map
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", "wayne");
		map.put("age", "24");
		model.addAttribute("map", map);

		return "result";
	}

	@RequestMapping("/strparam/{name}")
	public String getInfor(@PathVariable("name") String name,
			@RequestParam("age") String age, Model model) {
		// 傳String
		model.addAttribute("title", "Return String @PathVariable");
		// 傳Object
		User user = new User(name, Integer.valueOf(age));
		model.addAttribute("user", user);
		// 傳List
		List<User> list = new ArrayList<User>();
		list.add(new User(name, Integer.valueOf(age)));
		list.add(new User(name, Integer.valueOf(age)));
		list.add(new User(name, Integer.valueOf(age)));
		list.add(new User(name, Integer.valueOf(age)));
		model.addAttribute("list", list);
		// 傳Map
		Map<String, String> map = new HashMap<String, String>();
		map.put("name", name);
		map.put("age", age);
		model.addAttribute("map", map);

		return "result";
	}
}

7)編寫JSP頁面,WebContent目錄下的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>Insert title here</title>
</head>
<body>
	<a href="http://localhost:9090/SpringMVCDemo/getmav">http://localhost:9090/SpringMVCDemo/getmav</a>
	<br />
	<a href="http://localhost:9090/SpringMVCDemo/string">http://localhost:9090/SpringMVCDemo/string</a>
	<br />
	<a
		href="http://localhost:9090/SpringMVCDemo/strparam?name=wayne&age=24">http://localhost:9090/SpringMVCDemo/strparam?name=wayne&age=24</a>
	<br />
	<a
		href="http://localhost:9090/SpringMVCDemo/strparam/name=wayne?age=24">http://localhost:9090/SpringMVCDemo/strparam/name=wayne?age=24</a>
</body>
</html>

WebContent/WEB-INF/jsp路徑(該路徑爲springMVCDemo-servlet.xml文件中id爲viewResolver的prefix屬性所配置)下的result.jsp的內容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>Insert title here</title>
</head>
<body>
	This is the result page .
	<br /> Title: ${title}
	<br /> Object:
	<br /> Name: ${user.name}   Age: ${user.age}
	<br /> List:
	<br />
	<c:forEach var="u" items="${list }">
	Name: ${u.name }  
	Age: ${u.age }<br />
	</c:forEach>
	Map:
	<br /> Name: ${map.name }  Age: ${map.age}
	<br />
</body>
</html>

Demo已經完成,運行如下圖所示:

打開tomcat,在瀏覽器中輸入http://localhost:9090/SpringMVCDemo/index.jsp後如圖所示:


依次打開瀏覽器中的鏈接,運行結果如下圖所示:

這就是一個完整的簡單的Spring MVC Demo ,參考來自網絡……#


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