1、引入SrpingMVC所使用的Java包:

cglib-nodep-2.1_3.jar、commons-logging.jar、spring-aspects-4.1.7.RELEASE.jar、spring-beans-4.1.7.RELEASE.jar、spring-context-4.1.7.RELEASE.jar

、spring-core-4.1.7.RELEASE.jar、spring-web-4.1.7.RELEASE.jar、spring-webmvc-4.1.7.RELEASE.jar

2、新建Web项目,配置Web.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <display-name>springmvc</display-name>
  4. <!-- 配置Spring -->
  5. <listener>
  6. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  7. </listener>
  8. <!-- 配置SpringMVC的编码格式 -->
  9. <filter>
  10. <filter-name>CharacterEncodingFilter</filter-name>
  11. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  12. <init-param>
  13. <param-name>encoding</param-name>
  14. <param-value>UTF-8</param-value>
  15. </init-param>
  16. </filter>
  17. <filter-mapping>
  18. <filter-name>CharacterEncodingFilter</filter-name>
  19. <url-pattern>/*</url-pattern>
  20. </filter-mapping>
  21. <!-- 加载其他的配置文件 -->
  22. <context-param>
  23. <param-name>contextConfigLocation</param-name>
  24. <param-value>/WEB-INF/spring-servlet.xml</param-value>
  25. </context-param>
  26. <!-- 配置Spring的前置控制器DispatcherServlet -->
  27. <servlet>
  28. <servlet-name>spring</servlet-name>
  29. <servlet-class>
  30. org.springframework.web.servlet.DispatcherServlet
  31. </servlet-class>
  32. <load-on-startup>1</load-on-startup>
  33. </servlet>
  34. <!-- 配置Spring的url后缀 -->
  35. <servlet-mapping>
  36. <servlet-name>spring</servlet-name>
  37. <url-pattern>*.do</url-pattern>
  38. </servlet-mapping>
  39. </web-app>

3、配置spring-servlet.xml

(基中的部分MVC的配置可另外再分一个bean.xml配置,这里为了方便统一放在一个里面):

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-4.1.xsd
  9. http://www.springframework.org/schema/mvc
  10. http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
  11. <!-- controller方法调用规则:通过url中的method参数指定要执行的controller方法-->
  12. <bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
  13. <property name="paramName" value="action" />
  14. <property name="defaultMethodName" value="view" />
  15. </bean>
  16. <!-- 配置MVC的前缀(prefix)和后缀(suffix) -->
  17. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  18. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  19. <!-- <property name="prefix" value="/WEB-INF/" /> -->
  20. <property name="suffix" value=".jsp" />
  21. </bean>
  22. <!-- 以下是 控制器的配置 -->
  23. <bean name="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
  24. <property name="order" value="1" />
  25. <property name="mappings">
  26. <props>
  27. <prop key="user.do">userController</prop>
  28. <prop key="index.do">indexController</prop>
  29. </props>
  30. </property>
  31. </bean>
  32. <bean name="userController" class="cn.raffaello.controller.UserController">
  33. <property name="userIService" ref="userIService"></property>
  34. </bean>
  35. <bean name="indexController" class="cn.raffaello.controller.IndexController" />
  36. <!-- ServiceBean的配置 -->
  37. <bean name="userIService" class="cn.raffaello.service.impl.UserServiceImpl" />
  38. </beans>

4、新建Model,User:

  1. public class User {
  2. private Integer id;
  3. private String name;
  4. public Integer getId() {
  5. return id;
  6. }
  7. public void setId(Integer id) {
  8. this.id = id;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. }

5、新建ServiceBean并实现一个模拟的数据保存添加操作:

  1. public interface UserIService {
  2. void saveOrUpdate(User user);
  3. User getUserById(Integer id);
  4. void delete(Integer id);
  5. List<User> getUsers();
  6. Integer getNewId();
  7. }
  8. public class UserServiceImpl implements UserIService {
  9. private Map<Integer,Object> map=new HashMap<Integer,Object>();
  10. private Map<String,Integer> idCount=new HashMap<String,Integer>();
  11. @Override
  12. public void saveOrUpdate(User user) {
  13. map.put(user.getId(), user);
  14. }
  15. @Override
  16. public User getUserById(Integer id) {
  17. if(map.containsKey(id)){
  18. return (User)map.get(id);
  19. }
  20. return new User();
  21. }
  22. @Override
  23. public void delete(Integer id) {
  24. map.remove(id);
  25. }
  26. @Override
  27. public List<User> getUsers() {
  28. List<User> list=new ArrayList<User>();
  29. for(Integer key : map.keySet()){
  30. list.add((User)map.get(key));
  31. }
  32. return list;
  33. }
  34. @Override
  35. public Integer getNewId() {
  36. if(!idCount.containsKey("ids")){
  37. Integer id=1;
  38. idCount.put("ids", id);
  39. return id;
  40. }else{
  41. Integer id=idCount.get("ids");
  42. id=id+1;
  43. idCount.put("ids", id);
  44. return id;
  45. }
  46. }
  47. }

6、新建控制器UserController:

  1. public class UserController implements Controller{
  2. private UserIService userIService;
  3. @Override
  4. public ModelAndView handleRequest(HttpServletRequest req,
  5. HttpServletResponse res) throws Exception {
  6. String param="";
  7. param=req.getParameter("param");
  8. //新增控制器跳转
  9. if(param.trim().equals("add")){
  10. return new ModelAndView("/WEB-INF/userAdd");
  11. }else if(param.trim().equals("edit")){
  12. //编辑控制器跳转
  13. Integer id=-1;
  14. if(!req.getParameter("userId").trim().equals("")){
  15. id=Integer.parseInt(req.getParameter("userId").trim());
  16. }
  17. User user=userIService.getUserById(id);
  18. req.setAttribute("user", user);
  19. return new ModelAndView("/WEB-INF/userAdd");
  20. }else if(param.trim().equals("userList")){
  21. //列表页面跳转
  22. List<User> list=userIService.getUsers();
  23. req.setAttribute("userList", list);
  24. return new ModelAndView("/WEB-INF/userList");
  25. }else if(param.trim().equals("save")){
  26. //新增的保存操作
  27. User user=new User();
  28. String name=req.getParameter("name").trim();
  29. user.setId(userIService.getNewId());
  30. user.setName(name);
  31. userIService.saveOrUpdate(user);
  32. List<User> list=userIService.getUsers();
  33. req.setAttribute("userList", list);
  34. return new ModelAndView("/WEB-INF/userList");
  35. }else if(param.trim().equals("update")){
  36. //修改的保存操作
  37. Integer id=-1;
  38. if(!req.getParameter("userId").trim().equals("")){
  39. id=Integer.parseInt(req.getParameter("userId").trim());
  40. }
  41. String name=req.getParameter("name").trim();
  42. User user=userIService.getUserById(id);
  43. user.setName(name);
  44. userIService.saveOrUpdate(user);
  45. List<User> list=userIService.getUsers();
  46. req.setAttribute("userList", list);
  47. return new ModelAndView("/WEB-INF/userList");
  48. }else if(param.trim().equals("delete")){
  49. //删除操作
  50. Integer id=-1;
  51. if(!req.getParameter("userId").trim().equals("")){
  52. id=Integer.parseInt(req.getParameter("userId").trim());
  53. }
  54. userIService.delete(id);
  55. List<User> list=userIService.getUsers();
  56. req.setAttribute("userList", list);
  57. return new ModelAndView("/WEB-INF/userList");
  58. }else if(param.trim().equals("detail")){
  59. //详细用户页面
  60. Integer id=-1;
  61. if(!req.getParameter("userId").trim().equals("")){
  62. id=Integer.parseInt(req.getParameter("userId").trim());
  63. User user=userIService.getUserById(id);
  64. req.setAttribute("user", user);
  65. }
  66. return new ModelAndView("/WEB-INF/userDetail");
  67. }else if(param.trim().equals("list")){
  68. // list列表
  69. List<User> list=userIService.getUsers();
  70. req.setAttribute("userList", list);
  71. return new ModelAndView("/WEB-INF/userList");
  72. }
  73. return new ModelAndView("fail");
  74. //return forword("stu/studentList", context); //同样也可以使用forword进行页面跳转
  75. //使用Map向前台输出数据时,获取操作同Request一样,可以在前台使用${名字}来获取如下例,可以使用${message}获取
  76. //Map<String,String> resultMap = new HashMap<String,String>();
  77. //resultMap.put("message", "欢迎来到首页111");
  78. //return new ModelAndView("index",resultMap);
  79. }
  80. public UserIService getUserIService() {
  81. return userIService;
  82. }
  83. public void setUserIService(UserIService userIService) {
  84. this.userIService = userIService;
  85. }
  86. }

7、然后就是页面啦:

新增页面:

  1. <body>
  2. <a href="user.do?param=userList">用户列表</a>
  3. <h3>新增用户</h3>
  4. <form action="user.do" method="post">
  5. <c:if test="${user!=null }">
  6. <input type="hidden" name="param" value="update" />
  7. </c:if>
  8. <c:if test="${user==null }">
  9. <input type="hidden" name="param" value="save" />
  10. </c:if>
  11. <input type="hidden" name="userId" value="${user.id }" />
  12. 用户名:<input type="text" name="name" value="${user.name }" />
  13. <input type="submit" value="提交" />
  14. </form>
  15. </body>

访问地址:http://localhost/user.do?param=add
修改页面也是此页面,访问地焉http://localhost/user.do?param=edit&userId=12

用户信息页面:

  1. <body>
  2. <a href="user.do?param=userList">用户列表</a>
  3. <h3>用户详细信息:</h3>
  4. <ul>
  5. <li>ID:${user.id }</li>
  6. <li>用户名:${user.name }</li>
  7. </ul>
  8. </body>

用户列表页面:

  1. <body>
  2. <a href="user.do?param=add">新增用户</a>
  3. <h3>用户列表:</h3>
  4. <table>
  5. <tr>
  6. <td>ID</td>
  7. <td>姓名</td>
  8. <td>操作</td>
  9. </tr>
  10. <c:forEach items="${userList }" var="user">
  11. <tr>
  12. <td>${user.id }</td>
  13. <td>${user.name }</td>
  14. <td><a href="user.do?param=edit&userId=${user.id }">修改</a></td>
  15. </tr>
  16. </c:forEach>
  17. </table>
  18. </body>

下图是效果图:

其他的SpringMVC文档:

http://liudeh-009.iteye.com/blog/1267880
http://jinnianshilongnian.iteye.com/blog/1594806
http://www.importnew.com/15141.html
Spring各个版本下载:

http://repo.spring.io/release/org/springframework/spring/