Spring MVC参数处理
Spring MVC通过分析处理处理方法签名,将HTTP请求信息自动绑定到处理方法的参数中。
@RequestMapping : 获取前台传递的参数
@RequestMapping("/p1")
public String param1(String uname,String pwd){
//接收参数
//调用业务层
//调用Dao。。。。
if("admin".equals(uname)&&"123".equals(pwd)){
//登录成功
}else{
//登录失败
}
System.out.println("uname="+uname+",pwd="+pwd);
return "hello";
}
@RequestHeader : 将请求头中的属性值绑定到处理方法的参数中。
@RequestMapping("/p4")
public String param4(@RequestHeader("Cookie")String cookie){
System.out.println("cookie:"+cookie);
return "hello";
}
@CookieValue: 将请求中的Cookie的值绑定到处理方法的参数中。
@RequestMapping("/p5")
public String param5(@CookieValue("JSESSIONID")String sessionid){
return "hello";
}
使用POJO,Spring MVC 会将请求参数和POJO中的属性进行匹配,自动填充属性,并支持级联。
@RequestMapping("/p6")
public String param6(User user){
//new User
//set+Uname
System.out.println(user);
return "hello";
}
使用Servlet API作为参数
HttpServletRequest
@RequestMapping("/s1")
public String s1(HttpServletRequest request){
System.out.println(request.getParameter("uname"));
System.out.println(request.getParameter("pwd"));
request.setAttribute("sex", "man");
return "hello2";
}
HttpServletResponse
/**
* 方法返回值可以是void
* 如果没有HttpServletResponse,返回值一定不能是void
*/
@RequestMapping("/s2")
public void s2(HttpServletResponse response) throws IOException{
/*response.sendRedirect("../WEB-INF/pages/hello2.jsp");*/
response.sendRedirect("../test.jsp");
}
@RequestMapping("/s3")
public void s3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("../test.jsp").forward(request, response);
}
HttpSession
/**
* 把User保存在session中
* @param session
*/
@RequestMapping("/s4")
public String s4(HttpSession session,User user){
session.setAttribute("user", user);
return "hello3";
}
- @SessionAttributes(“user”)
- @SessionAttributes:
- 可以把模型数据当中对应的对象存储到session中
- session.setAttr(“user”,request.getAttr(“user”))
public class SessionController {
@RequestMapping("/se1")
public String sess1(User user,Notice notice) {
return "hello6";
}
/**
* 如果参数列表当中有两个类型相同的参数,只会在模型数据中存储一个
* 使用@ModelAttribute可以给两个类型相同的对象做区分,
* 让他们都可以存储在模型数据中
* 如果遇到有两个类型相同并且都需要存储到session中时,
* 可以使用model去解决问题
*/
@RequestMapping("/se2")
public String sess2(User user,User user2,Model model) {
model.addAttribute("user", user);
model.addAttribute("user2", user2);
return "hello6";
}
}
使用流作为参数
InputStream
OutputStream
@RequestMapping("/s5")
public void s5(OutputStream os) throws IOException{
os.write(new String("hcfgyhgghyvf").getBytes());
}
Reader
Writer
@RequestMapping("/s6")
public void s6(PrintWriter writer) {
writer.print("asdfghjkl");
}
总结:
- request,response,session 可以直接使用,不需要创建这个对象的类型
- 如果涉及到页面跳转,尽量不要使用request,response
- 如果使用了request和response进行页面跳转,它就不再使用视图解析器去匹配页面了(需要根据当前控制器的路径去匹配)
- 方法带返回值:String要在控制器当中做页面的跳转。(普通的控制器)
- 方法不带返回值:
- 1.通过request(转发)或者response(重定向)这里两个对象去做跳转
- 2.通过OutputStream或Writer直接在也页面显示内容。(前台是Ajax访问获取数据时)
- 如果返回值是void可以搭配ajax使用(ajax拿到的就是当前控制器的信息)
- 如果返回值不是void,必然要跳转页面。
Spring MVC参数处理的更多相关文章
- spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClassNameHandlerMapping
spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClas ...
- spring mvc 参数
Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts: Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求. 在MVC框架中,Struts属于V ...
- spring mvc参数绑定
spring绑定参数的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接 ...
- Spring mvc参数类型转换
1,需求 有时候我们接收到的参数为String类型的,但是我们需要将它们转化为其他类型的如:date类型,枚举类型等等,spring mvc为我们提供了这样的功能. 2,配置文件 在springmvc ...
- Spring MVC参数封装传递
在Spring MVC中,前端JSP页面可以传递 基本类型(int,String).实体类型.包装类型.数组类型.集合类型(List.map )等. 假如在传递的类型中有 Date类型的字段,需要在 ...
- spring mvc 参数绑定
基础类型 原始类型:id必须要传,否则报错. @RequestMapping("/test") @ResponseBody public ResponseData test(int ...
- Spring MVC 参数必填项导致客户端报 HTTP 400 并且无法进入断点的问题
1.问题 Spring MVC 在参数上设置了必填项,post 请求时报 HTTP 400 并且未进入断点,如将“年龄”设置为了必填项: @RequestParam( value="age& ...
- Spring MVC 参数的绑定方法
在Spring MVC中,常见的应用场景就是给请求的Url绑定参数.本篇就介绍两种最最基本的绑定参数的方式: 基于@RequestParam 这种方法一般用于在URL后使用?添加参数,比如: @Req ...
- Spring MVC参数绑定(如何接收请求参数及返回参数)
在SpringMVC interceptor案例实践中遇到了获取jsp表单传递参数失败的问题,怎么的解决的呢?下面详细介绍. 先讲述下https://www.cnblogs.com/ilovebath ...
随机推荐
- linux零基础之--使用putty配置
PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件.随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程.在各种远程登录工具中,Putty是出色的工具之 ...
- java内置锁实现锁住代码块方案(同一个对象或锁住整个类.class)
我们看一个例子: class Demo { public synchronized void test() { System.out.println("test方法开始执行,当前线程为:&q ...
- Linux 时间同步 04 ntp时间同步
Linux 时间同步 04 ntp时间同步 目录 Linux 时间同步 04 ntp时间同步 安装ntp 配置与外部时间服务器进行时间同步的客户端主机 配置其他客户端与以上客户端主机时间同步 验证查看 ...
- 认识PHP8
PHP 团队于2020年11月26日宣布 PHP 8 正式发布!这意味着将不会有 PHP 7.5 版本.PHP8 目前正处于非常活跃的开发阶段,所以在接下来的几个月里,情况可能会发生很大的变化.我也分 ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- #2020征文-TV# Tab切换选项卡同时更换内容
Tab选项卡是应用程序中最最常用,也是最普遍存在的一种布局形态,无论是在PC端还是在移动端,都是一种清晰明了,层级关系简单的,能够使用户明确所处位置.Tab选项卡可以置于页面的底部,比如微信底部选项卡 ...
- leetcode1637-两点之间不包括任何点的最宽垂直面积
题目 给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直面积 的宽度. 垂直面积 的定义是固定宽度,而 y 轴上 ...
- Python实验6--网络编程
题目1 1.编写程序实现基于多线程的TCP客户机/服务器程序. (1)创建服务器端套接字Socket,监听客户端的连接请求: (2)创建客户端套接字Socket,向服务器端发起连接: 服务器端套接字 ...
- 【Linux】linux中用vim来比较文件内容不同
1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2 2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: : ...
- P1140 相似基因(字符串距离,递推)
题目链接: https://www.luogu.org/problemnew/show/P1140 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C, ...