项目需要用到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 ,参考来自网络……#