Spring MVC基础知识整理➣View与Controller数据交互
概述
Spring MVC是由View—Controller—Model组成,其中View和Controller的数据交互,成为了关注的核心点。MVC中,我们将View中的数据传递到Controller,可以采用POST或者Get,传递相应的参数。Controller通过绑定来,匹配前台传递的参数。后台Controller也可以将值传递到前台页面。
View值传递Controller
绑定传值的常用方式有如下
- @RequestParam,绑定单个请求数据,可以是URL中的数据,表单提交的数据或上传的文件;
- @PathVariable,绑定URL模板变量值;
- @CookieValue,绑定Cookie数据;
- @RequestHeader,绑定请求头数据;
- @ModelAttribute,绑定数据到Model;
- @SessionAttributes,绑定数据到Session;
- @RequestBody,用来处理Content-Type不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
@RequestParam和@PathVariable使用举例Controller如下:
@RequestMapping(value="/City/{cname:\\w+}-{id:\\d+}",method=RequestMethod.GET)
public ModelAndView ChinaCity(@PathVariable(value="id") String ID,@PathVariable(value="cname") String Name,
@RequestParam("code") String UserCode)
{
ModelAndView modv=new ModelAndView();
modv.addObject("cityid", ID);
modv.addObject("cname", Name);
modv.addObject("code", UserCode);
modv.setViewName("HelloWorld/ChinaCity");
return modv;
}
匹配解析URL: http://www.xxx.com/MVCDEMO/HellowWorld/City/Beijing/23?code=988234
@CookieValue和@RequestHeader以及@ModelAttribute使用举例如下
@RequestMapping("/UserCook")
public ModelAndView ShowUserSessionModel(@CookieValue("JSESSIONID") String CookName,@RequestHeader("User-Agent") String Userage,
@ModelAttribute("userinfo") UserInfo user)
{
ModelAndView RMV=new ModelAndView();
RMV.setViewName("User/UserCook");
RMV.addObject("Cookmsg", CookName+"-"+Userage);
return RMV;
}
解析:@CookieValue解析浏览器cookie值,@RequestHeader解析浏览器请求Header头部值,而@ModelAttribute解析Form表单绑定的Model值,对应Jsp如下
<from:form action="" method="post" modelAttribute="userinfo">
<p>
<from:label path="username">用户名:</from:label><from:input path="username"/><from:errors path="username"></from:errors>
</p>
<p>
<from:label path="userage">用户年龄:</from:label><from:input path="userage"/><from:errors path="userage"></from:errors>
</p>
<P>
<input type="submit" value="提交 ">
</P>
</from:form>
@SessionAttributes 把数据存储到session中,来保持多次请求间数据,这样就可以来实现比如分步骤提交表单等需求。需要将SessionAttributes绑定Controller,之后Controller里面的方法能够调取Session值
package justin.com.controllers; import justin.com.models.UserInfo; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus; @Controller
@SessionAttributes("SessionUser")
@RequestMapping("/USession")
public class SessUserController { @RequestMapping(value="/Home",method=RequestMethod.GET)
public String SessHome(@ModelAttribute("SessionUser") UserInfo user,SessionStatus status)
{
status.setComplete(); //读取Session中赋值给UserInfo
if(user!=null)
user.setUserage();
return "USession/index";
}
}
编写USession/Index.jsp页面
<body>
SESSION Index !
<p>
UserAGE: ${SessionUser.userage}
</p>
<p>
UserName: ${SessionUser.username }
</p>
</body>
请求URL:
http://www.xxx.com/MVCDEMO/USession/Home?userage=98&username=justin
@RequestBody 调用合适的MessageConvert来把非application/x-www-form-urlencoded请求中的内容转换为指定的对象。
它通常与@ResponseBody合用。@ResponseBody与.@RequestBody刚好相反,他把指定的对象转换为合适的内容(请求头为Accept:application/json 则返回json数据)并返回。由于Spring默认解析json用的是Jackson,所以我们这里要把jackson-core-asl-1.9.13.jar和jackson-mapper-asl-1.9.13.jar两个包添加到我们项目。
举例使用Controller如下
@RequestMapping("/detail")
public @ResponseBody UserInfo GetUserDetail()
{
UserInfo usermodel=new UserInfo();
usermodel.setUsername("zhang");
usermodel.setUserage();
System.out.println("Update:"+usermodel.getUsername());
return usermodel;
}
访问detail页面,反馈json值,针对Spring-MVC3有效,其他版本待定。
Controller值传递View
1、使用Model值
@RequestMapping(value="/detail",method=RequestMethod.GET)
public String ShowUserDetail(HttpServletRequest request,Model model)
{
model.addAttribute("userinfo", new UserInfo());
return "User/UserHome";
}
2、使用ViewModel传值
ModelAndView Rm=new ModelAndView();
Rm.setViewName("User/UserShow");
Rm.addObject("userinfo", user);
3、使用HttpServletRequest
public String exception(HttpServletRequest request,Exception ex)
{
request.setAttribute("exceptionMessage", ex.getMessage());
return "error";
}
View获取值:
${key}
Spring MVC基础知识整理➣View与Controller数据交互的更多相关文章
- Spring MVC基础知识整理➣拦截器和自定义注解
概述 Spring MVC中通过注解来对方法或者类进行动态的说明或者标注,类似于配置标识文件的属性信息.当标注的类或者方式被使用时候,通过提取注解信息来达到对类的动态处理.在 MVC中,我们常用的注解 ...
- Spring MVC基础知识整理➣环境搭建和Hello World
概述 Spring MVC属于SpringFrameWork的产品,采用Model-View-Controller进行数据交互,已经融合在Spring Web Flow里面.Spring 框架提供了构 ...
- Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibern ...
- Spring MVC基础知识整理➣数据校验与格式化
概述 将view中Form的数据提交到后台之后,后台如何验证数据的有效性?在这里Spring MVC提供了相应的Hibernate类包(hibernate-validator-4.3.1.Final. ...
- Spring MVC基础知识整理➣国际化和异常处理
概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...
- Spring MVC 基础注解之@RequestMapping、@Controller、(二)
我现在学的是spring4.2 今天主要学习了Spring MVC注解 引入注解可以减少我们的代码量,优化我们的代码. @Controller:用于标识是处理器类: @RequestMapping:请 ...
- Spring框架系列(一)--Spring MVC基础知识
Web项目开发过程中一般都是使用MVC(Model-View-Controller)模式,早先的Struts2到Spring MVC,再到现在Spring Boot,都是相似的思 路.Spring B ...
- spring mvc 基础知识
spring mvc 在web.xml中的配置: 例子: <?xml version="1.0" encoding="UTF-8"?> <we ...
- MVC初级知识之——View与Controller的讲解
Controller是MVC中比较重要的一部分.几乎所有的业务逻辑都是在这里进行处理的,并且从Model中取出数据.在ASP.NET MVC Preview5中,将原来的Controller类一分为二 ...
随机推荐
- <杂记>Android Studio 3.0-3.1 汉化包 (转载)
JetBrains 系列软件汉化包 关键字: Android Studio 3.0-3.1 汉化包 CLion 2018.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 Intell ...
- T-SQL 日期函数
GETDATE() 它将返回当前日期和时间. 语法 上述函数的语法: GETDATE() 例 以下查询将返回当前日期以及MS SQL Server中的时间. Select getdate() as c ...
- 海康JAVA SDK库动态路径加载
海康JAVA SDK初始化路径默认是放在classes下面,见下: HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("HCNetSDK&q ...
- mysql 5.7 Group Replication
MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务.但所有读写(RW)事务只有在冲突检测成功后才会提 ...
- java8 常用函数式接口
public static void main(String[] args) { // TODO Auto-generated method stub //函数式接口 Function<Inte ...
- String类型作为方法的形参
代码: public class TestString { String str = new String("good"); char [] ch = {'a','b','c'}; ...
- django配置发送邮箱
该邮箱配置后台发送邮箱验证使用 settings内配置 # 服务器地址 EMAIL_HOST = 'smtp.163.com' # 端口,邮箱默认动态端口 25 EMAIL_PORT = 25 # 邮 ...
- python时间日期格式化和反格式化
strftime()和strptime()行为 date,datetime和time对象都支持一种 strftime(format)方法,以创建一个表示显式格式字符串控制下的时间的字符串.从广义上讲, ...
- Android中播放音乐的几种方式
前言 前几天一直在研究RxJava2,也写了记录了几篇博客,但因为工作任务原因,需要研究音频相关的知识,暂时放下Rxjava,本文的demo中,MediaPalyer 部分使用RxJava编写一点逻辑 ...
- Windows服务启动进程----Cjwdev.WindowsApi.dll
windows服务下无法启动外部程序 做一个windows服务监听服务,涉及到windows服务启动外部程序的一个过程,但是调试测试发现,无法简单的用process.start()这种方法, 原因是在 ...