Spring MVC Spring中的Model (五)
完整的项目案例: springmvc.zip
目录
实例
项目结构:
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"> <!-- 请求总控器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dispatcher-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置dispatcher-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/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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="edu.nf.ch05.controller"/> <mvc:annotation-driven/> <mvc:default-servlet-handler/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean> </beans>
Controller
1、(ModelAttributeController)
package edu.nf.ch05.controller; import edu.nf.ch05.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; /**
* @author wangl
* @date 2018/10/30
*/
@Controller
public class ModelAttributeController { /**
* @ModelAttribute标注的方法都会在controller方法执行前先执行
* 其实就是在执行请求方法前,先将一些数据放入到Model中
* @return
*/
@ModelAttribute("user")
public Users getUsers(){
Users user = new Users();
user.setUserName("user5");
user.setAge(25);
return user;
} /**
* 在执行test4之前,先执行getUsers()方法
* @return
*/
@GetMapping("/test4")
public ModelAndView test4(){
return new ModelAndView("index2");
} /**
* 在方法参数前标注@ModelAttribute,表示映射参数后将该参数存入Model中
*
* 注意:在执行test5之前,同样先执行getUsers()方法,
* 如果Model中已经存在相同key的对象,那么映射的参数就会覆盖
* 原先Model中的数据
* @param user
* @return
*/
@PostMapping("/test5")
public ModelAndView test5(@ModelAttribute("user") Users user){
return new ModelAndView("index2");
}
}
2、(ModelController)
package edu.nf.ch05.controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView; import java.util.HashMap;
import java.util.Map; /**
* @author wangl
* @date 2018/10/30
* 使用Model、ModelMap、Map来绑定数据
* 注意:这个三个类在运行时都是同一个对象
*/
@Controller
public class ModelController { /**
* 使用ModelAndView将数据加入到model中
* @return
*/
@GetMapping("/test")
public ModelAndView test(){
ModelAndView mv = new ModelAndView("index1");
//将数据添加到Model中(其实就是放入请求作用域)
//mv.addObject("userName", "user1");
//mv.addObject("age", 21);
//将数据封装到一个Map中,然后再将map存入Model
Map<String, Object> modelMap = new HashMap<>();
modelMap.put("userName", "user2");
modelMap.put("age", 22);
mv.addAllObjects(modelMap);
return mv;
} /**
* 由Spring传入一个map对象,将数据直接存入这个map中
* @param map
* @return
*/
@GetMapping("/test1")
public ModelAndView test1(Map<String, Object> map){
map.put("userName", "user3");
map.put("age", 23);
return new ModelAndView("index1");
} /**
* 也可以使用Spring提供的ModelMap对象,
* 然后传递给ModelAndView
* @param map
* @return
*/
@GetMapping("/test2")
public ModelAndView test1(ModelMap map){
map.put("userName", "user4");
map.put("age", 24);
return new ModelAndView("index1");
} /**
* 也可以使用Spring提供的Model对象,直接将数据存入Model中
* @param model
* @return
*/
@GetMapping("/test3")
public ModelAndView test2(Model model){
model.addAttribute("userName", "user4");
model.addAttribute("age", 24);
return new ModelAndView("index1");
}
}
3、(SessionAttributesController)
package edu.nf.ch05.controller; import edu.nf.ch05.entity.Users;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView; /**
* @author wangl
* @date 2018/10/30
*/
@Controller
/**
* 将model中对象存入会话作用域,value属性对应model的key,
* 并且可以存放多个key,它是一个数组,例如:
* @SessionAttributes({"user","user2"})
* 注意:能放入会话作用域的只能标注了@ModelAttribute的方法返回值,
* 以及手动存入Map、Model、ModelMap中的值
*/
@SessionAttributes({"addr","user"})
public class SessionAttributesController { @ModelAttribute("user")
public Users getUsers(){
Users user = new Users();
user.setUserName("user5");
user.setAge(25);
return user;
} /**
* 此方法转发到index3.jsp后可以从请求和会话作用域中取值
* @return
*/
@GetMapping("/test6")
public ModelAndView test6(Model model){
//注意:如果类上修饰了@SessionAttributes,并且也指定了addr的键,
//那么addr的值也会存入会话作用域
model.addAttribute("addr","zhuhai");
return new ModelAndView("index3");
} /**
* 如果类上修饰了@SessionAttributes并且指定了user的键,同时方法参数上
* 修饰了@ModelAttribute并且也指定了user的键,那么此时会从会话作用域中
* 获取一个一个user的值存入model中
* 另外,当有表单映射数据时会覆盖原有的model中的user对象信息和会话作用域中的user对象信息
* @param user
* @return
*/
@PostMapping("/test7")
public ModelAndView test7(@ModelAttribute("user") Users user){
return new ModelAndView("index3");
}
}
前台页面
(adduser.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>测试覆盖ModelAttribute</h1>
<form method="post" action="test5">
Name:<input type="text" name="userName"/><br/>
Age:<input type="text" name="age"/><br/>
<input type="submit" value="submit"/>
</form>
<h1>测试覆盖SessionAttributes</h1>
<form method="post" action="test7">
Name:<input type="text" name="userName"/><br/>
Age:<input type="text" name="age"/><br/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
index1.jsp
<%--
Created by IntelliJ IDEA.
User: wangl
Date: 2018/10/30
Time: 15:44
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${requestScope.userName},${requestScope.age}<br/>
</body>
</html>
index2.jsp
<%--
Created by IntelliJ IDEA.
User: wangl
Date: 2018/10/30
Time: 15:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${user.userName},${user.age}
</body>
</html>
index3.jsp
<%--
Created by IntelliJ IDEA.
User: wangl
Date: 2018/10/30
Time: 15:45
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>请求作用域</h2>
${requestScope.user.userName},${requestScope.user.age}
<h2>会话作用域</h2>
${sessionScope.user.userName},${sessionScope.user.age}
</body>
</html>
Spring MVC Spring中的Model (五)的更多相关文章
- spring mvc EL ModelAndView的 Model 值 在jsp中不显示
问题:spring mvc开发过程中, 经常会给model addAttribute, 然后通过EL在jsp中显示,比如 ${msg}, 但是有时候会出现jsp最后显示的还是${msg},而不是msg ...
- spring mvc controller中获取request head内容
spring mvc controller中获取request head内容: @RequestMapping("/{mlid}/{ptn}/{name}") public Str ...
- Spring MVC Controller中解析GET方式的中文参数会乱码的问题(tomcat如何解码)
Spring MVC Controller中解析GET方式的中文参数会乱码的问题 问题描述 在工作上使用突然出现从get获取中文参数乱码(新装机器,tomcat重新下载和配置),查了半天终于找到解决办 ...
- Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结
上一篇 | 下一篇 Spring MVC程序中得到静态资源文件css,js,图片 文件的路径 问题总结 作者:轻舞肥羊 日期:2012-11-26 http://www.blogjava.net/fi ...
- Spring MVC -- Spring MVC入门
本篇博客首先介绍Spring MVC的优点,然后介绍Spring MVC的基本组件,包括DispatcherServlet,并学习如何开发一个“传统风格”的控制器,这是在Spring 2.5版本之前开 ...
- Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...
- freemarker + spring mvc + spring + mybatis + mysql + maven项目搭建
今天说说搭建项目,使用freemarker + spring mvc + spring + mybatis + mysql + maven搭建web项目. 先假设您已经配置好eclipse的maven ...
- Spring MVC + Spring + Mybitis开发Java Web程序基础
Spring MVC + Spring + Mybitis是除了SSH外的另外一种常见的web框架组合. Java web开发和普通的Java应用程序开发是不太一样的,下面是一个Java web开发在 ...
- Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建
目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...
- velocity+spring mvc+spring ioc+ibatis初试感觉(与struts+spring+hibernate比较)
velocity+spring mvc+spring ioc+ibatis框架是我现在公司要求采用的,原因是因为阿里巴巴和淘宝在使用这样的框架,而我公司现在还主要是以向阿里巴巴和淘宝输送外派人员为 主 ...
随机推荐
- vue路由对不同界面进行传参及跳转的总结
最近在做一个公众号的商城项目,主要用的VUE+MUI,其实今天这个点对于有过项目经验的前端工作者来说是最基础的,但也是必须要掌握的,今天小编主要是记录下传参和跳转的一些总结(仅供参考). 首先我们先上 ...
- TensorFlow和深度学习-无需博士学位(TensorFlow and deep learning without a PhD)
1. 概述 原文地址: TensorFlow and deep learning,without a PhD Learn TensorFlow and deep learning, without a ...
- Maven三种仓库的配置
转自:https://www.cnblogs.com/jack1995/p/6925879.html Maven三种仓库的配置 1 本地仓库的配置 在第一篇中我们介绍过,Maven的仓库有三类,这里不 ...
- 为什么使用SLF4J比使用log4j或者java.util.logging更好
1.SLF4j是什么? SLF4J 并没有真正地实现日志记录,它只是一个允许你使用任何java日志记录库的抽象适配层. 如果你正在编写内部或者外部使用的API或者应用库的话,如果使用了slf4j,那么 ...
- Spring之InstantiationAwareBeanPostProcessor接口介绍
InstantiationAwareBeanPostProcessor接口是BeanPostProcessor的子接口,通过接口字面意思翻译该接口的作用是感知Bean实例话的处理器.实际上该接口的 ...
- Perl流程控制语句
布尔值判断 如果是数字,0表示假,其它所有数字都是真. 如果是字符串,空字符串('')为假,其它所有字符串为真(有例外,见下一条). 如果是字符串'0',perl是当作数值0来处理的,所以这是唯一的非 ...
- Spring DAO模块
Spring的DAO模块提供了对JDBC.Hibernate.Mybatis等DAO层支持,本节介绍DAO模块对JDBC的支持.DAO模块依赖ommons-dbcp.jar.commons-pool. ...
- OJ:神秘的数组初始化
描述 填空,使得程序输出指定结果 #include <iostream> using namespace std; int main() { int * a[] = { // 在此处补充你 ...
- Redis主从复制、多实例、高可用(三)--技术流ken
Redis主从复制 在开始实现redis的高可用之前,首先来学习一下如何实现redis的主从复制,毕竟高可用也会依赖主从复制的技术. Redis的主从复制,可以实现一个主节点master可以有多个从节 ...
- 错误提示:The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this project The type java.lang.Object cannot b
原文:http://www.cnblogs.com/mmzs/p/7662863.html 错误类型: 搞了很久才找到原因.解决办法写出来分享: 出现以上错误的原因是玩耍maven时多装了个jre.本 ...