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的编译器优化默认是启用的.优化代码 ...
随机推荐
- 第六十七天 js动画
1.事件总结 鼠标事件 var box = document.querySelect('.box') // 1.点击事件 box.onclick = function(){ console.log(' ...
- bzoj 2816: [ZJOI2012]网络 (LCT 建多棵树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2816 题面: http://www.lydsy.com/JudgeOnline/upload ...
- 洛谷 P1064 金明的预算方案 (有依赖的0/1背包)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...
- Java EE之表达式语言EL(上)
1.了解表达式语言 表达式语言(EL)用于在不使用脚本.声明或者表达式的情况下,在JSP页面中渲染数据. EL曾是JSTL 1.0规范(与JSP 1.2)中的一部分,并且只可以用作JSTL标签的特性. ...
- macOS卸载应用不彻底
总觉得macOS卸载应用时直接移到废纸篓卸载不干净.配置文件根据Unix的习惯应该存放在用户目录下,还需要删除这些文件. ~/Library/Application Support/(应用程序名称) ...
- python 类的私有变量和私有方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...
- JavaScript与jQuery关于鼠标点击事件
即实现鼠标点击其中一个菜单发生样式的改变,当点击下一个菜单时,当前菜单样式改变,其他菜单均变为之前样式. 用JavaScript,jQuery都可以实现,只是后者是封装的JavaScript库,具有s ...
- JWT入门简介
官网:https://jwt.io/ 文档:https://jwt.io/introduction/ 目录 什么是JWT 头部(Header) 载荷(Payload) 签名(Signature) JW ...
- 深入浅出mybatis之映射器
目录 概述 XML映射器 定义xml映射器 配置xml映射器 使用xml映射器 接口映射器 定义接口映射器 配置接口映射器 使用接口映射器 总结与对比 概述 映射器是MyBatis中最核心的组件之一, ...
- .NET面试题系列(十七)前端面试
JavaScript js如何实现继承 CSS 行内元素和块状元素的区别 CSS让2个DIV在同一行显示的解决方法 在CSS中,div属于块级元素,每个块级元素默认占一行高度,一行内添加一个块级 ...