文档章节

SpringMVC联手REST实现入门级的CRUD——3

DavidBao
 DavidBao
发布于 2014/12/15 22:45
字数 1208
阅读 50
收藏 0

这是一个WebProject,用到的是spring-framework-3.1.1.RELEASE


一、首先是web.xml(最终应用访问地址为http://IP:port/contextPath/user/add

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.         <servlet-name>user</servlet-name>  
  9.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  10.         <load-on-startup>1</load-on-startup>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.         <servlet-name>user</servlet-name>  
  14.         <url-pattern>/</url-pattern>  
  15.     </servlet-mapping>  
  16.   
  17.     <filter>  
  18.         <filter-name>SpringCharacterEncodingFilter</filter-name>  
  19.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  20.         <init-param>  
  21.             <param-name>encoding</param-name>  
  22.             <param-value>UTF-8</param-value>  
  23.         </init-param>  
  24.     </filter>  
  25.     <filter-mapping>  
  26.         <filter-name>SpringCharacterEncodingFilter</filter-name>  
  27.         <url-pattern>/*</url-pattern>  
  28.     </filter-mapping>  
  29. </web-app>

二、然后是SpringMVC的配置文件user-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.                         http://www.springframework.org/schema/mvc  
  9.                         http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd  
  10.                         http://www.springframework.org/schema/context   
  11.                         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  12.     <context:component-scan base-package="com.jadyer"/>  
  13.       
  14.     <mvc:annotation-driven/>  
  15.       
  16.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  17.         <property name="prefix" value="/WEB-INF/jsp/"/>  
  18.         <property name="suffix" value=".jsp"/>  
  19.     </bean>  
  20. </beans>

三、用来添加用户信息的//WEB-INF//jsp/user/add.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  
  3.   
  4. <%-- 这里并没有指定action="",说明表单是提交给自己的,说白了就是"哪来的回哪儿去 --%>  
  5.   
  6. <form:form method="POST" modelAttribute="user">  
  7.     username: <form:input path="username"/><br/>  
  8.     nickname: <form:input path="nickname"/><br/>  
  9.     password: <form:password path="password"/><br/>  
  10.     yourmail: <form:input path="email"/><br/>  
  11.     <input type="submit" value="添加新用户"/>  
  12. </form:form>

四、用来列出所有用户信息的//WEB-INF//jsp/user/list.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  3. <c:forEach items="${users}" var="user">  
  4.     ${user.value.username}----${user.value.nickname}----${user.value.password}----${user.value.email}  
  5.         <a href="<%=request.getContextPath()%>/user/${user.value.username}">查看</a>  
  6.         <a href="<%=request.getContextPath()%>/user/${user.value.username}/update">编辑</a>  
  7.         <a href="<%=request.getContextPath()%>/user/${user.value.username}/delete">删除</a>  
  8.     <br/>  
  9. </c:forEach>  
  10. <br/>  
  11. <a href="<%=request.getContextPath()%>/user/add">继续添加用户</a>

五、用来显示单个用户信息的//WEB-INF//jsp/user/show.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. ${user.username}----${user.nickname}----${user.password}----${user.email}  
  3. <br/>  
  4. <br/>  
  5. <a href="<%=request.getContextPath()%>/user/add">继续添加用户</a>

 六、用来更新单个用户信息的//WEB-INF//jsp/user/update.jsp

 

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>  
  3. <form:form method="POST" modelAttribute="user">  
  4.     username: <form:input path="username"/><br/>  
  5.     nickname: <form:input path="nickname"/><br/>  
  6.     password: <form:password path="password"/><br/>  
  7.     yourmail: <form:input path="email"/><br/>  
  8.     <input type="submit" value="更新用户信息"/>  
  9. </form:form>

七、下面是用户的实体类User.java

  1. package com.jadyer.model;  
  2.   
  3. /** 
  4.  * User 
  5.  * @author http://blog.csdn.net/jadyer 
  6.  * @create May 12, 2012 1:24:43 AM 
  7.  */  
  8. public class User {  
  9.     private String username;  
  10.     private String nickname;  
  11.     private String password;  
  12.     private String email;  
  13.       
  14.     public User() {}  
  15.     public User(String username, String nickname, String password, String email) {  
  16.         this.username = username;  
  17.         this.nickname = nickname;  
  18.         this.password = password;  
  19.         this.email = email;  
  20.     }  
  21.       
  22.     public String getUsername() {  
  23.         return username;  
  24.     }  
  25.     public void setUsername(String username) {  
  26.         this.username = username;  
  27.     }  
  28.     public String getNickname() {  
  29.         return nickname;  
  30.     }  
  31.     public void setNickname(String nickname) {  
  32.         this.nickname = nickname;  
  33.     }  
  34.     public String getPassword() {  
  35.         return password;  
  36.     }  
  37.     public void setPassword(String password) {  
  38.         this.password = password;  
  39.     }  
  40.     public String getEmail() {  
  41.         return email;  
  42.     }  
  43.     public void setEmail(String email) {  
  44.         this.email = email;  
  45.     }  
  46. }

 

八、最后是核心的UserController.java

 

  1. package com.jadyer.controller;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.ui.Model;  
  8. import org.springframework.web.bind.annotation.PathVariable;  
  9. import org.springframework.web.bind.annotation.RequestMapping;  
  10. import org.springframework.web.bind.annotation.RequestMethod;  
  11.   
  12. import com.jadyer.model.User;  
  13.   
  14. /** 
  15.  * UserController 
  16.  * @author http://blog.csdn.net/jadyer 
  17.  * @create May 12, 2012 1:26:21 AM 
  18.  */  
  19. @Controller  
  20. @RequestMapping("/user")  
  21. public class UserController {  
  22.     private final static Map<String,User> users = new HashMap<String,User>();  
  23.       
  24.     //模拟数据源,构造初始数据  
  25.     public UserController(){  
  26.         users.put("张起灵"new User("张起灵""闷油瓶""02200059""menyouping@yeah.net"));  
  27.         users.put("李寻欢"new User("李寻欢""李探花""08866659""lixunhuan@gulong.cn"));  
  28.         users.put("拓拔野"new User("拓拔野""搜神记""05577759""tuobaye@manhuang.cc"));  
  29.         users.put("孙悟空"new User("孙悟空""美猴王""03311159""sunhouzi@xiyouji.zh"));  
  30.     }  
  31.       
  32.     /** 
  33.      * 添加新用户 
  34.      * @see 访问/user/add时,GET请求就执行addUser(Model model)方法,POST请求就执行addUser(User user)方法 
  35.      */  
  36.     @RequestMapping(value="/add", method=RequestMethod.GET)  
  37.     public String addUser(Model model){  
  38.         //这里要传给前台一个空对象,否则会报告java.lang.IllegalStateException异常  
  39.         //异常信息为Neither BindingResult nor plain target object for bean name 'user' available as request attribute  
  40.         //并且传过去的key值要与前台modelAttribute属性值相同,即model.addAttribute("user", new User());  
  41.         //我们也可以写成下面这种方式,此时SpringMVC会自动把对象名转换为小写值作为key,即User-->user  
  42.         model.addAttribute(new User());  
  43.         return "user/add";  
  44.     }  
  45.     @RequestMapping(value="/add", method=RequestMethod.POST)  
  46.     public String addUser(User user){ //这里参数中的user就应该与add.jsp中的modelAttribute="user"一致了  
  47.         users.put(user.getUsername(), user);  
  48.         return "redirect:/user/list";  
  49.     }  
  50.       
  51.     /** 
  52.      * 列出所有用户信息 
  53.      */  
  54.     @RequestMapping("/list")  
  55.     public String list(Model model){  
  56.         model.addAttribute("users", users);  
  57.         return "user/list";  
  58.     }  
  59.       
  60.     /** 
  61.      * 查询用户信息 
  62.      * @see 访问该方法的路径就应该是"/user/具体的用户名" 
  63.      * @see 这里value="/{username}"的写法,需要格外注意一下,它是一个路径变量,此时用来接收前台的一个资源 
  64.      * @see 这时value="/{username}"就会到方法参数中找@PathVariable String username,并将路径变量值传给username参数 
  65.      */  
  66.     @RequestMapping(value="/{myname}", method=RequestMethod.GET)  
  67.     public String show(@PathVariable String myname, Model model){  
  68.         model.addAttribute(users.get(myname));  
  69.         return "user/show";  
  70.     }  
  71.       
  72.     /** 
  73.      * 编辑用户信息 
  74.      * @see 访问该方法的路径就应该是"/user/具体的用户名/update" 
  75.      */  
  76.     @RequestMapping(value="/{myname}/update", method=RequestMethod.GET)  
  77.     public String update(@PathVariable String myname, Model model){  
  78.         model.addAttribute(users.get(myname));  
  79.         return "user/update";  
  80.     }  
  81.     @RequestMapping(value="/{myname}/update", method=RequestMethod.POST)  
  82.     public String update(User user){  
  83.         users.put(user.getUsername(), user);  
  84.         return "redirect:/user/list"//也可以retun "forward:/user/list",此时浏览器地址栏会有不同  
  85.     }  
  86.       
  87.     /** 
  88.      * 删除用户信息 
  89.      */  
  90.     @RequestMapping(value="/{myname}/delete", method=RequestMethod.GET)  
  91.     public String delete(@PathVariable String myname){  
  92.         users.remove(myname);  
  93.         return "redirect:/user/list"//删除完成后显示当前存在的所有用户信息  
  94.     }  
  95. }

 

© 著作权归作者所有

DavidBao
粉丝 114
博文 213
码字总数 126729
作品 0
昌平
私信 提问
加载中

评论(0)

Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第102篇原创 03:WebFlux Web CRUD 实践 文章工程: JDK 1.8 Maven 3....

2019/01/16
0
0
springMVC笔记系列(7)——HiddenHttpMethodFilter过滤器

什么是REST?首先来段介绍吧。 REST: 即 Representational State Transfer。 (资源)表现层状态转化。 是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、 扩展方便,所...

HappyBKs
2015/05/19
2.5K
7
Spring Data REST 2.2.4 发布

Spring Data REST 2.2.4 发布,此版本更新内容如下: * DATAREST-693 - Release 2.2.4 (Evans). 下载:https://github.com/spring-projects/spring-data-rest/releases。 Spring Data REST 的......

淡漠悠然
2015/10/15
466
0
Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密...

小致Daddy
2018/08/03
2.9W
1
Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD
2016/12/01
250
0

没有更多内容

加载失败,请刷新页面

加载更多

springcloud微服务实战_04_服务消费者

4.1 客服端负载均衡 Ribbon 通过上一篇《Spring Cloud构建微服务架构:服务消费》,我们已经学会如何通过LoadBalancerClient接口来获取某个服务的具体实例,并根据实例信息来发起服务接口消费...

SP_K
28分钟前
70
0
pandas操作excel操作-06-数据排序操作

import pandas as pdbooks = pd.read_excel('D:/output.xlsx', index_col='idx')# 按照SinglePrice排序books.sort_values(by='SinglePrice', inplace=True, ascending=False)# 按照T......

烽焱10仴
31分钟前
79
0
如何找到该日期的最后一天?

如何在PHP中获取本月的最后一天? 鉴于: $a_date = "2009-11-23" 我想要2009-11-30; 给定 $a_date = "2009-12-23" 我想2009-12-31。 #1楼 你的解决方案在这里.. $lastday = date('t',strt......

javail
33分钟前
45
0
【剑指Offer】链表——复杂链表的克隆

package cn.dzp.flyroc.offer; //定义复杂链表 class ComplexList{ int val; ComplexList next = null; ComplexList random = null; ......

大数据健身侠
41分钟前
62
0
数据结构与算法系列六(栈)

1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API...

yhhitall
今天
51
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部