SpringMVC-2-(Controller)
一)参数类型
@RequestMapping("hello4")
@ResponseBody
public ModelAndView Hello4(
// Servlet的三个参数
HttpServletRequest request,
HttpServletResponse response,
HttpSession session,
// 传入接本数据类型和引用数据类型,注意要和前端同名
String name,
People people,
// 和前端不同命的解决办法
@RequestParam("address1")String address,
// 前段没有传值,设置默认值
@RequestParam(defaultValue = "27") int age,
// 设置这个值一定要有,没有就报错
@RequestParam(required = true) String email,
// 接前端传过来的复选框的值
@RequestParam("likes")List<String> list,
// 前端写法
// <input type="text" name="peo.name"/>
// <input type="text" name="peo.age"/>
// 另外再写一个实体类,属性就是前端传值的名
// public class Test {
// private People people;
Test test,
// 前端写法
// <input type="text" name="peo[1].name"/>
// <input type="text" name="peo[1].age"/>
// 另外要写一个实体类,属性就是前端传值的list集合
// public class Test {
// private People people;
// private List<People> peoples;
Test test1,
// 其实model和ModelAndView还有session都产不多用法,只是返回一个数据参见下边的代码
Model model
)
throws ServletException, IOException { ModelAndView hello = new ModelAndView("main");
Model model1 = model.addAttribute("name", "xupeilei");
return hello;
}
restful风格:
<a href="hello1?name=aaa&age=27">普通风格</a>
<a href="hello2/bbb/17">result风格</a>
@RequestMapping("hello1/{name}/{age}")
public ModelAndView Hello1(@PathVariable String name,@PathVariable String age) {
System.out.println(name+" "+age);
System.out.println("hello springMVC控制器");
ModelAndView hello = new ModelAndView("main");
return hello;
}
参数绑定到实体类:
有时间在写
自定义参数绑定
有事件在写
二)返回值类型及重定向和转发(默认方式都是请求转发)
理解重定向和转发:
重定向:
相当于是浏览器发出请求,返回一个url浏览器再去请求这个url,这时浏览器是知道他请求到哪里去了,所以地址栏可以看到url的改变
转发:
服务器的行为,浏览器发出请求之后,服务器可能又去请求了其他的资源最终只返回一个数据或者模型,这时浏览器并不知道服务器到底做了什么,他只能显示他请求的url;
@RequestMapping:会去找视图解析器
String
@RequestMapping("hello2")
public String hello2(){
// 转发
// return "forward:/html/err.html";
// return "forward:/hello1";
// 重定向
// return "redirect:/html/err.html";
return "redirect:/hello1";
// 通过视图解析器
// return "main";
}
ModelAndView:
@Controller
public class HelloController {
@RequestMapping("hello1")
public ModelAndView hello1(){ // 自定义视图解析器找到main.jsp
// ModelAndView modelAndView = new ModelAndView("main"); // 服务器转发,
// 跳转到err.html
// ModelAndView modelAndView = new ModelAndView("forward:/html/err.html");
// 跳转到其他controller(hello2)
// ModelAndView modelAndView = new ModelAndView("forward:/hello2"); // 浏览器重定向,
// 重定向到err.html
// ModelAndView modelAndView = new ModelAndView("redirect:/html/err.html");
// 重定向到其他controller(hello2)
ModelAndView modelAndView = new ModelAndView("redirect:/hello2"); // 会使用自定义视图解析器,结果找不到报错404
// ModelAndView modelAndView = new ModelAndView("hello2"); return modelAndView;
}
void(没有返回值,只能重定向和转发)
@RequestMapping("hello3")
public void hello3(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 重定向
request.getRequestDispatcher("/html/err.html");
// request.getRequestDispatcher("/hello1");
// 转发
// response.sendRedirect("/html/err.html");
// response.sendRedirect("/hello1"); }
@RequestMapping:
@ResponseBody:
String
void
ModelAndView
对象:(坑!大坑!!巨坑!!!超级坑!!!)(使用jackSon的时候要用高版本不然报错406,无法转换json格式)
@RequestMapping("/hello4")
@ResponseBody
public People hello4(HttpServletResponse response){
People p=new People();
p.setName("sss");
p.setAddress("www");
p.setAge(1);
p.setEmail("ee");
return p;
}
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
三)自定义视图解析器
表示在返回值的前边加上/路径和后边加上.jsp,表示所要找的jsp所在德位置,就不需要在controller中手写了,作用就是偷懒;
但是注意:自定义视图解析器controller中的返回值不能加前缀,加的话就走默认的视图解析器,
存在的意义:当我们需要转发的时候
看图:
图一: 图二:
看图一:因为前边没有加任何东西,并且我又自定义视图解析器,那他走的就是自定义视图解析器,回去找一个demo11.jsp的东西,但是会发现找不到报错404
看图二:因为前边加了forward:这时候自定义的视图解析器就失效了,走默认视图解析器,解析出来要转发到dome11,就不去找demo11.jsp了
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
四)请求方法限定
@RequestMapping(value = {"/hello123","/456",method = RequestMethod.POST)}
五)@ResponseBody注解
做了两件事情:
一:将返回值变成json字符串;
二:同时设置响应头为application/json
加上这个之后就不跳转了,以流的形式输出出去,也就不走视图解析器了,并且是直接填充到body中去了
String:
ModelAndView:
考虑一下返回值为ModelAndView 却得到一个json字符串的方式
Void:
对象:
六:拦截器
SpringMVC-2-(Controller)的更多相关文章
- 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置
原文:使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 摘要 讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行 目录[-] 文章已针对IDEA 15做了一定 ...
- springmvc小结(上)
1.springmvc的整体结构以及流程 ①.前端控制器:只需要在web.xml文件中配置即可 作用:接受请求,处理响应结果,转发器,中央处理器 ②.处理器映射器:根据请求的url找到相应的Handl ...
- 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理
原文:使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 摘要 通过对博客文章的管理,实现外键操作. 目录[-] 八.博客文章管理 1.查看文章 2.添加博客 3 ...
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
原文:使用IntelliJ IDEA开发SpringMVC网站(四)用户管理 摘要 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 目录[-] 文章已针对IDEA 15做了一定的更新,部 ...
- 使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置
原文:使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置 摘要 讲解在IntelliJ IDEA中,如何进行Mysql数据库的配置 目录[-] 文章已针对IDEA 15做了一定的 ...
- SpringMVC起步(一)
SpringMVC起步(一) 笔记来源于慕课网:https://www.imooc.com/video/7126/0 MVC:Model-View-Controller Model:模型层,业务数据的 ...
- 手写SpringMVC框架(三)-------具体方法的实现
续接前文 手写SpringMVC框架(二)结构开发设计 本节我们来开始具体方法的代码实现. doLoadConfig()方法的开发 思路:我们需要将contextConfigLocation路径读取过 ...
- SpringMVC笔记(1)
一.SpringMVC简介 1.1 MVC模型 MVC模型 MVC全名是Model View Controller,是模型(model)- 视图(view)- 控制器(controller)的缩写,是 ...
- 使用IntelliJ IDEA开发SpringMVC网站(一)开发环境
使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 摘要: 主要讲解初期的开发环境搭建,Maven的简单教学. 访问GitHub下载最新源码:https://github.com/ ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
随机推荐
- Node.js修改全局安装默认路径
因为苦于C盘不够的烦恼,不想把全局安装包的路径弄在C盘,于是有了这篇文章: 查看设置 npm config ls //查看设定信息,,找到prefix一行,默认是一般是在C盘 修改命令如下 npm c ...
- [CTSC2018]暴力写挂
题目描述 www.lydsy.com/JudgeOnline/upload/201805/day1(1).pdf 题解 首先来看这个我们要最大化的东西. deep[u]+deep[v]-deep[lc ...
- cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )
hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...
- CodeForces 70
题目 A题 #include<bits/stdc++.h> using namespace std; int n,b,sum; int main(){ scanf("%d&quo ...
- mysql快速生成批量测试数据
mysql快速生成批量测试数据 参考资料: https://blog.csdn.net/oahz4699092zhao/article/details/53332148 -- 创建一个临时内存表 ; ...
- 点评cat系列-应用集成
========================消息的基本属性========================消息的几个属性:type: 定义消息的 category, 比如 SQL 或 RPC 或 ...
- [再寄小读者之数学篇](2014-06-22 发散级数 [中国科学技术大学2012年高等数学B考研试题])
设 $a_n>0$, $S_n=a_1+a_2+\cdots+a_n$, 级数 $\dps{\vsm{n}a_n}$ 发散, 证明: $\dps{\vsm{n}\cfrac{a_n}{S_n}} ...
- Web常见漏洞修复建议
一.SQL注入修复建议 1.过滤危险字符,例如:采用正则表达式匹配union.sleep.and.select.load_file等关键字,如果匹配到则终止运行. 2.使用预编译语句,使用PDO需要注 ...
- django发送邮件send_mail&send_mass_mail
一.配置 在setting.py中进行相关配置: EMAIL_HOST = 'smtp.sina.cn' #SMTP地址 EMAIL_PORT = 25 #SMTP端口 EMAIL_HOST_USER ...
- 本地图片上传与H5适配知识
最近用到本地图片上传作为API的参数,在网上看了许多,记录一下,以后可能用的着(仅自己记录用,看不清请绕路) function getObjectURL(file) { var url = null ...