`

第二章 Spring MVC 增改查实例

阅读更多
本章是个小示例,使用spring mvc 模拟student对象的增删改查


一、spring mvc 注解:


1、@Controller 声明控制器


@Controller
public class StudentController {
    //....
}




2、@RequestMapping 请求映射/请求路径


@RequestMapping("/student")
public class StudentController {
    //访问路径,项目路径/student


    @RequestMapping("/list")
    public ModelAndView list() {
        //访问路径,项目路径/student/list
    }


}






3、@RequestParam 请求参数


@RequestMapping("/preSave")
public ModelAndView preSave(@RequestParam(value = "id", required = false) String id){
    //参数id
}

@RequestMapping("/save")
public ModelAndView save(Student student){
    //默认缺省参数,可传对象
}



4、ModelAndView 返回模型和视图


@RequestMapping("/delete")
public ModelAndView delete(Student student) {
	studentMap.remove(student.getId());
	ModelAndView mav = new ModelAndView();
	mav.addObject("studentList", studentMap);
	mav.setViewName("student/list");
	return mav;
}




二、spring 中文编码过滤器,添加在web.xml;

	<filter>
		<filter-name>encodingFilter</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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>





三、jsp 遍历HashMap中的对象,并取对象中的属性


	<c:forEach var="student" items="${studentList }">
	<tr>
		<td>${student.value.id }</td>
		<td>${student.value.name }</td>
		<td>${student.value.age }</td>
		<td>
			<a href="${pageContext.request.contextPath}/student/preSave.do?id=${student.value.id}">修改</a>
			&nbsp;&nbsp;&nbsp;&nbsp;
			<a href="${pageContext.request.contextPath}/student/delete.do?id=${student.value.id}">删除</a>
		</td>
	</tr>
	</c:forEach>




四、ModelAndView返回模型和视图:


	/**
	 * 跳转修改或新增页面
	 * 
	 * @param id
	 * @return
	 */
	@RequestMapping("/preSave")
	public ModelAndView preSave(
			@RequestParam(value = "id", required = false) String id) {
		ModelAndView mav = new ModelAndView();
		if (id != null) {
			mav.addObject("student", studentMap.get(Integer.parseInt(id)));
			mav.setViewName("student/update");
		} else {
			mav.setViewName("student/add");
		}
		return mav;
	}




五、SpringMVC对象属性自动封装


	/**
	 * 保存,有则修改,没有则
	 * 
	 * @param student
	 * @return
	 */
	@RequestMapping("/save")
	public String save(Student student) {
		if (student.getId() == null) {
			// 新增id自动增1
			identityId += 1;
			student.setId(identityId);
			studentMap.put(student.getId(), student);
		} else {
			// 修改则直接覆盖原有数据
			studentMap.put(student.getId(), student);
		}
		//转发
		return "redirect:/student/list.do";
		//重定向
		// return "redirect:/student/list.do";
	}




六、内部重定向与转发:


	/**
	 * 删除
	 * 
	 * @param student
	 * @return
	 */
	@RequestMapping("/delete")
	public String delete(@RequestParam("id") Integer id) {
		studentMap.remove(id);
		//转发
		return "redirect:/student/list.do";
		//重定向
		// return "redirect:/student/list.do";
	}




项目源码:


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"
	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">
	<!-- 中文编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</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>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<display-name>SpringMvc02</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!-- 定义spring mvc -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.xml</param-value>
		</init-param>
	</servlet>
	<!-- controller访问后缀 -->
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>





spring-mvc.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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        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.xsd">

	<!-- 使用注解的包,包括子集 -->
    <context:component-scan base-package="com.fx"/>

    <!-- 视图解析器 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp"></property>
	</bean>

</beans>





Student.java


package com.fx.model;

public class Student {

	private Integer id;
	private String name;
	private Integer age;

	public Student() {
		super();
	}

	public Student(Integer id, String name, Integer age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public Integer getAge() {
		return age;
	}

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

}





StudentController.java


package com.fx.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.fx.model.Student;

/**
 * Controller:定义Controller控制器 RequestMapping:设置请求路径
 * 
 * @author fx
 *
 */
@Controller
@RequestMapping("/student")
public class StudentController {

	private Integer identityId = 3;

	private static Map<Integer, Student> studentMap = new HashMap<Integer, Student>();

	static {
		studentMap.put(1, new Student(1, "张三", 11));
		studentMap.put(2, new Student(2, "李四", 12));
		studentMap.put(3, new Student(3, "王五", 13));
	}

	/**
	 * 查询列表
	 * 
	 * @return
	 */
	@RequestMapping("/list")
	public ModelAndView list() {
		ModelAndView mav = new ModelAndView();
		mav.addObject("studentList", studentMap);
		mav.setViewName("student/list");
		return mav;
	}

	/**
	 * 跳转修改或新增页面
	 * 
	 * @param id
	 * @return
	 */
	@RequestMapping("/preSave")
	public ModelAndView preSave(
			@RequestParam(value = "id", required = false) String id) {
		ModelAndView mav = new ModelAndView();
		if (id != null) {
			mav.addObject("student", studentMap.get(Integer.parseInt(id)));
			mav.setViewName("student/update");
		} else {
			mav.setViewName("student/add");
		}
		return mav;
	}

	/**
	 * 保存,有则修改,没有则
	 * 
	 * @param student
	 * @return
	 */
	@RequestMapping("/save")
	public String save(Student student) {
		if (student.getId() == null) {
			// 新增id自动增1
			identityId += 1;
			student.setId(identityId);
			studentMap.put(student.getId(), student);
		} else {
			// 修改则直接覆盖原有数据
			studentMap.put(student.getId(), student);
		}
		//转发
		return "redirect:/student/list.do";
		//重定向
		// return "redirect:/student/list.do";
	}

	/**
	 * 删除
	 * 
	 * @param student
	 * @return
	 */
	@RequestMapping("/delete")
	public String delete(@RequestParam("id") Integer id) {
		studentMap.remove(id);
		//转发
		return "redirect:/student/list.do";
		//重定向
		// return "redirect:/student/list.do";
	}
}







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>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/student/preSave.do">添加学生</a>
<table>
	<tr>
		<th>编号</th>
		<th>姓名</th>
		<th>年龄</th>
		<th>操作</th>	
	</tr>
	<c:forEach var="student" items="${studentList }">
	<tr>
		<td>${student.value.id }</td>
		<td>${student.value.name }</td>
		<td>${student.value.age }</td>
		<td>
			<a href="${pageContext.request.contextPath}/student/preSave.do?id=${student.value.id}">修改</a>
			&nbsp;&nbsp;&nbsp;&nbsp;
			<a href="${pageContext.request.contextPath}/student/delete.do?id=${student.value.id}">删除</a>
		</td>
	</tr>
	</c:forEach>
</table>

</body>
</html>





add.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>
<form action="save.do" method="post">
<table>
	<tr>
		<th colspan="2">学生添加</th>
	</tr>
	<tr>
		<td>姓名</td>
		<td><input type="text" name="name"/></td>
	</tr>
	<tr>
		<td>年龄</td>
		<td><input type="text" name="age"/></td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" value="提交"/>
		</td>
	</tr>
</table>
</form>
</body>
</html>





update.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>
<form action="save.do" method="post">
<table>
	<tr>
		<th colspan="2">学生修改</th>
	</tr>
	<tr>
		<td>姓名</td>
		<td><input type="text" name="name" value="${student.name }"/></td>
	</tr>
	<tr>
		<td>年龄</td>
		<td><input type="text" name="age" value="${student.age }"/></td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="hidden" name="id" value="${student.id }"/>
			<input type="submit" value="提交"/>
		</td>
	</tr>
</table>
</form>
</body>
</html>



访问路径:
http://localhost:8080/SpringMvc02/student/list.do
分享到:
评论

相关推荐

    Java EE企业级应用开发教程(Spring Spring MVC MyBatis)(黑马程序员编著)

    《Java EE企业级应用开发教程(Spring Spring MVC MyBatis)》是一本专注于Java企业级应用开发的专业教程,由黑马程序员编著。本书的核心在于深入浅出地介绍如何使用Java EE技术栈,特别是Spring、Spring MVC和...

    spring-mvc-step-by-step(PDF)

    ### Spring MVC:逐步掌握 #### 一、Spring MVC框架概览与环境搭建 Spring MVC是Spring框架中的一个模块,主要用于构建Web应用。它基于MVC(Model-View-Controller)设计模式,使得开发者能够清晰地分离业务逻辑、...

    Spring攻略PDF版

    绝对是spring攻略中文版第二版 Spring专家力作 理论与实践完美结合 问题描述→解决方案→实现方法 第一部分 核心概念  第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 ...

    Spring攻略中文版PDF

    绝对是spring攻略中文版第二版 Spring专家力作 理论与实践完美结合 问题描述→解决方案→实现方法 第一部分 核心概念  第1章 控制反转和容器   1.1 使用容器管理组件   1.1.1 问题描述   1.1.2 ...

    案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理.docx

    ### 案例8:Spring整合Spring MVC与Hibernate + EasyUI实现电子商城后台订单管理 #### 一、项目概述 本案例旨在通过Spring框架整合Spring MVC与Hibernate技术,结合前端库EasyUI,实现一个电子商城后台订单管理...

    Spring攻略英文版(附带源码)

    第二部分 基础主题  第7章 Spring对JDBC的支持   第8章 Spring中的事务管理   第9章 Spring对ORM的支持   第10章 Spring MVC框架   第11章 整合Spring与其他Web框架   第12章 Spring对测试的支持...

    JavaEE企业级应用开发教程(Spring+Spring MVC+MyBatis)配套书籍源码资料 ---黑马程序员 .zip

    《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》是一本深入讲解企业级应用开发的教程,其配套源码资料是学习Java EE技术栈的重要辅助材料。这套教程聚焦于SSM框架,即Spring、Spring MVC和MyBatis的...

    《Java EE企业级应用开发教程(Spring Spring MVC MyBatis)》.zip

    《Java EE企业级应用开发教程(Spring Spring MVC MyBatis)》是一本专注于Java后端开发的实战型教材,特别适合于对Java EE感兴趣并希望深入学习的企业级开发者。本书结合了Spring框架、Spring MVC以及MyBatis这三大...

    看透springMvc源代码分析与实践

    第二篇 俯视Spring MVC 第8章 Spring MVC之初体验84 8.1 环境搭建84 8.2 Spring MVC最简单的配置84 8.2.1 在web.xml中配置Servlet85 8.2.2 创建Spring MVC的xml配置文件85 8.2.3 创建Controller和view86 8.3...

    spring4.x第二章代码

    在本压缩包“spring4.x第二章代码”中,我们主要关注的是Spring框架的第二章内容,这通常涉及到Spring的核心概念和技术。Spring是Java企业级应用开发中的一个关键框架,它提供了一个全面的编程和配置模型,以简化...

    springlive-第二章代码

    【标题】"springlive-第二章代码"是一个与Spring框架相关的Eclipse项目,它涵盖了Spring框架的第二章学习内容。这个项目可能包含了用于演示和练习Spring核心概念的源代码,如依赖注入、AOP(面向切面编程)以及Bean...

    springlive(共11章)

    2. **第二章:搭建Spring环境** - 安装与配置:介绍如何配置Java开发环境,包括JDK、IDE和构建工具如Maven或Gradle。 - 创建第一个Spring项目:逐步指导创建一个简单的Spring项目,体验Spring的基本配置。 3. **...

    Spring源码深度解析第二版

    Spring源码深度解析第二版 Spring是一款广泛应用于Java企业级应用程序的开源框架,旨在简化Java应用程序的开发和部署。Spring框架的核心主要包括了IoC容器、AOP、MVC框架等模块。 第1章 Spring整体架构和环境搭建 ...

    第二章:Spring AOP 基础1

    在本章"Spring AOP 基础1"中,我们主要探讨了Spring AOP(面向切面编程)的核心概念和实现方式。AOP是一种编程范式,它允许程序员定义"切面",这些切面封装了跨越多个对象的横切关注点,如日志、事务管理等。以下是...

    spring 3前6 章

    第二章:Spring Bean与依赖注入 这一章深入讲解了Spring中的Bean以及如何通过XML或注解实现依赖注入。Bean是Spring中的核心概念,代表着应用中的一个实例化对象。依赖注入允许我们解耦组件,使得系统更加灵活和可...

    第二章示例代码

    《Spring.Net框架实战:第二章示例代码解析》 在深入学习任何技术框架时,实践总是最好的老师。Spring.Net作为一款强大的.NET平台上的轻量级应用程序框架,它提供了丰富的依赖注入(Dependency Injection,DI)和...

    Beginning Spring(2015)

    第二章深入讲解了依赖注入(Dependency Injection, DI),这是Spring框架实现IoC的一种方式。依赖注入可以简化对象之间的依赖关系管理,并提高代码的灵活性和可维护性。Spring支持三种主要的依赖注入方式:构造器...

Global site tag (gtag.js) - Google Analytics