码迷,mamicode.com
首页 > 编程语言 > 详细

springMVC实现增删改查(RESTful)

时间:2014-08-20 00:01:35      阅读:540      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   使用   os   io   strong   

一、核心原理

1. 用于发送请求给服务器: /home.htm

2. 请求被DispatchServlet拦截到

3. DispatchServlet通过HandleMapping检查url有没有对应的Controller, 如果有则调用Controller

4. Controller开始执行业务逻辑

5. Controller执行完毕后, 如果返回字符串, 则ViewResolver将字符串转化成相应的视图对象;

如果返回ModelAndView对象, 该对象本身就包含了视图对象信息.

6. DispatchServlet将视图对象中的数据输出给服务器.

7. 服务器将数据输出给客户端.

bubuko.com,布布扣

二、REST风格

1. 查询:
传统:  /user_query?id=123
rest: /user/123
2. 删除:
传统:  /user_delete?id=123
rest: /user/123/delete
3. 更新:
传统:  /user_update?id=123
rest: /user/123/update
4. 列表:
传统:  /user_list
rest: /user/users


三、增删改查

1. 代码结构

bubuko.com,布布扣


2. web.xml 配置DispatchServlet

<?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" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
         
  <!-- user需要和配置文件user-servlet.xml名字对应 -->
  <servlet>
  	<servlet-name>user</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>user</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <!-- 配置过滤器, 设置编码为UTF-8 -->
  <filter>
		<filter-name>CharacterFilter</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>CharacterFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>


3. user-servlet.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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.1.xsd">
	
	<!-- spring扫描的包 -->
	<context:component-scan base-package="com.zdp"></context:component-scan>
	
	<!-- 使用spring注解 -->
	<mvc:annotation-driven />
	
	<!-- 设置返回url前缀和后缀 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<!-- 指明静态资源位置 -->
	<mvc:resources location="/WEB-INF/resources/" mapping="/resources/**"/>
</beans>

4. UserController.java

@Controller
@RequestMapping("/user")
public class UserController {
	// 使用map模拟数据库 
	private Map<String, User> userMap = new HashMap<String, User>();

	public UserController() {
		userMap.put("zhangsan", new User("zhangsan", "123"));
		userMap.put("lishimin", new User("lishimin", "456"));
	}

	// 获取用户列表 
	// 访问方法: http://localhost/springmvc_user/user/users
	@RequestMapping(value = "/users", method = RequestMethod.GET)
	public String list(Model model) {
		model.addAttribute("users", userMap);
		return "/user/list";
	}

	// 跳转到添加用户页面(get请求)
	// 访问方法: http://localhost/springmvc_user/user/add
	@RequestMapping(value = "/add", method = RequestMethod.GET)
	public String add(@ModelAttribute("user") User user) {
		return "user/add";
	}

	// 具体的添加用户处理方法(post请求) 
	// 注意: BindingResult必须在User之后, 中间不能有其他的参数
	@RequestMapping(value = "/add", method = RequestMethod.POST)
	public String add(@Validated User user, BindingResult br) throws IOException { // @Validated: 对User数据进行校验
		if (br.hasErrors()) {
			return "user/add"; // 如果有错误, 则直接跳转到add添加用户页面
		}
		userMap.put(user.getUsername(), user);
		return "redirect:/user/users"; // 重定向到用户列表页面
	}
	
	// 查看用户信息
	// 访问方法: http://localhost/springmvc_user/user/zhangsan
	@RequestMapping(value="/{username}", method=RequestMethod.GET)
	public String show(@PathVariable String username, Model model) { // @PathVariable: 路径里面的值作为参数
		model.addAttribute(userMap.get(username)); 
		return "user/show";
	}
	
	// 跳转到修改用户信息页面
	// 访问方法: http://localhost/springmvc_user/zhangsan/update
	@RequestMapping(value="/{username}/update", method=RequestMethod.GET) 
	public String update(@PathVariable String username, Model model) { // @PathVariable: 路径里面的值作为参数
		model.addAttribute(userMap.get(username)); // 等同: model.addAttribute("user", userMap.get(username));
		return "user/update";
	}
	
	// 具体的修改用户处理方法(post请求) 
	// 注意: BindingResult必须在User之后, 中间不能有其他的参数
	@RequestMapping(value="/{username}/update", method=RequestMethod.POST)
	public String update(@PathVariable String username, @Validated User user, BindingResult br) {
		if(br.hasErrors()) {
			return "user/update"; // 如果有错误, 则直接跳转到update修改用户页面
		}
		userMap.remove(username);
		userMap.put(user.getUsername(), user);
		return "redirect:/user/users";
	}
	
	// 删除用户信息
	// 访问方法: http://localhost/springmvc_user/zhangsan/delete
	@RequestMapping(value="/{username}/delete",method=RequestMethod.GET)
	public String delete(@PathVariable String username) {
		userMap.remove(username);
		return "redirect:/user/users";
	}
	
}

5. jsp pages

① list.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>用户列表 </title>
<!-- 引入静态文件, 需要在user-servlet.xml配置映射关系 -->
<link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/main.css" type="text/css">
</head>
<body>
<a href="add">添加</a>
<br/>
	<c:forEach items="${users}" var="usermap">
		<a href="${usermap.value.username}">${usermap.value.username}</a>
		-- <a href="${usermap.value.username}/update">修改</a>
		-- <a href="${usermap.value.username}/delete">删除</a><br/>
	</c:forEach>
</body>
</html>

② add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!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>添加用户</title>
</head>
<body>
<!-- 如没写action, 也会提交给add(匹配文件名) -->
<sf:form method="post" modelAttribute="user" action="add">
	Username:<sf:input path="username"/><sf:errors path="username"/><br/>
	Password:<sf:password path="password"/><sf:errors path="password"/><br/>
	<input type="submit" value="添加用户"/>
</sf:form>
</body>
</html>
③ show.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!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>用户详细信息</title>
</head>
<body>
	Username:${user.username}<br/>
	Password:${user.password}<br/>
</body>
</html>
④ update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<!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>修改用户</title>
</head>
<body>
<!-- 如没写action, 也会提交给update(匹配文件名) -->
<sf:form method="post" modelAttribute="user" action="update">
	Username:<sf:input path="username"/><sf:errors path="username"/><br/>
	Password:<sf:password path="password"/><sf:errors path="password"/><br/>
	<input type="submit" value="修改用户"/>
</sf:form>
</body>
</html>






springMVC实现增删改查(RESTful),布布扣,bubuko.com

springMVC实现增删改查(RESTful)

标签:style   blog   http   java   使用   os   io   strong   

原文地址:http://blog.csdn.net/zdp072/article/details/38691049

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!