页面跳转

  • 转发(默认)
@RequestMapping("/showPage1")
public String showPage1() {System.out.println("user mvc controller is running ...");// return "WEB_INF/pages/forward:page.jsp";这种方式不支持重定向,只能支持转发格式的return "forward:page.jsp";
}
  • 重定向
@RequestMapping("/showPage2")public String showPage2() {System.out.println("user mvc controller is running ...");return "redirect:page.jsp";
}

注意:
1、页面访问地址中所携带的 /
2、如果目录是在其它层级,那么在返回时候需要加上层级目录

页面访问快捷设定 (InternalResourceViewResolver)

  • 展示页面的保存位置通常固定,且结构相似,可以设定通用的访问路径,简化页面配置格式,在运行的时候会自动把设置的路径拼接上去。
  • 如果配置了快捷的这种方式,是不支持使用转发和重定向的。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- prefix:前缀 suffix:后缀--><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/>
/bean>

在代码里因为配置文件已经做了拼接了,所以直接写页面名称就可以了,不需要写前后缀了

public String showPage3() {return "page";
}

如果未设定返回值,使用void类型,则默认使用访问路径作页面地址的前缀后缀

//最简页面配置方式,使用访问路径作为页面名称,省略返回值
@RequestMapping("/page")
public void showPage5() {System.out.println("user mvc controller is running ...");
}

带数据页面跳转

方式一:使用HttpServletRequest类型形参进行数据传递

@RequestMapping("/showPageAndData1")
public String showPageAndData1(HttpServletRequest request) {request.setAttribute("name","itzhuzhu");return "page";
}

page.jsp

${name}

方式二:使用Model类型形参进行数据传递

@RequestMapping("/showPageAndData2")
public String showPageAndData2(Model model) {model.addAttribute("name","itzhuzhu");Book book = new Book();book.setName("SpringMVC入门实战");book.setPrice(66.6d);model.addAttribute("book",book);return "page";
}

方式三:使用ModelAndView类型形参进行数据传递,将该对象作为返回值传递给调用者

//使用ModelAndView形参传递参数,该对象还封装了页面信息
@RequestMapping("/showPageAndData3")
public ModelAndView showPageAndData3(ModelAndView modelAndView) {//ModelAndView mav = new ModelAndView();    替换形参中的参数// 转发和重定向不能加xml快捷页面访问// 转发modelAndView.setViewName(forward:page.jsp");// 重定向modelAndView.setViewName("redirect:page.jsp");Book book  = new Book();book.setName("SpringMVC入门案例");book.setPrice(66.66d);//添加数据的方式,key对valuemodelAndView.addObject("book",book);//添加数据的方式,key对valuemodelAndView.addObject("name","Jockme");//设置页面的方式,该方法最后一次执行的结果生效modelAndView.setViewName("page");//返回值设定成ModelAndView对象return modelAndView;
}

三种方式总结:

  • String:仅封装页面的基本信息,底层由ModeAndView实现
  • Model:仅封装数据
  • ModelAndView:封装数据并封装视图,包含Model和View两个对象

返回json数据

需要先导入json的三个坐标:

    <!--json相关坐标3个--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency>

方式一:基于response返回数据的简化格式,返回JSON数据

//使用jackson进行json数据格式转化
@RequestMapping("/showData3")
@ResponseBody  //将java对象转为json格式的数据
public String showData3() throws JsonProcessingException {Book book  = new Book();book.setName("SpringMVC入门案例");book.setPrice(66.66d);ObjectMapper om = new ObjectMapper();return om.writeValueAsString(book);
}

方式二:使用SpringMVC提供的消息类型转换器将对象与集合数据自动转换为JSON数据

//使用SpringMVC注解驱动,对标注@ResponseBody注解的控制器方法进行结果转换,由于返回值为引用类型,自动调用jackson提供的类型转换器进行格式转换
@RequestMapping("/showData4")
@ResponseBody
public Book showData4() {Book book  = new Book();book.setName("SpringMVC入门案例");book.setPrice(66.66d);return book;
}

需要手工添加信息类型转换器

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/></list></property>
</bean
  • 方式三:使用SpringMVC注解驱动简化配置
<!--开启springmvc注解驱动,对@ResponseBody的注解进行格式增强,追加其类型转换的功能,具体实现由MappingJackson2HttpMessageConverter进行-->
<mvc:annotation-driven/>

注解驱动格式:

@EnableWebMvc // 加这个注解
public Book showData5() {}

Servlet相关接口-Servlet相关接口替换方案

SpringMVC提供访问原始Servlet接口API的功能,通过形参声明即可

@RequestMapping("/servletApi")
public String servletApi(HttpServletRequest request,HttpServletResponse response, HttpSession session){System.out.println(request);System.out.println(response);System.out.println(session);request.setAttribute("name","itzhuzhu");System.out.println(request.getAttribute("name"));return "page.jsp";
}

Head数据获取

  • 名称: @RequestHeader
  • 类型: 形参注解
  • 位置:处理器类中的方法形参前方
  • 作用:绑定请求头数据与对应处理方法形参间的关系
@RequestMapping("/headApi")
public String headApi(@RequestHeader("Accept-Language") String head){System.out.println(head);return "page.jsp";
}

Cookie数据获取

  • 名称: @CookieValue
  • 类型: 形参注解
  • 位置:处理器类中的方法形参前方
  • 作用:绑定请求Cookie数据与对应处理方法形参间的关系
@RequestMapping("/cookieApi")
public String cookieApi(@CookieValue("JSESSIONID") String jsessionid){System.out.println(jsessionid);return "page.jsp";
}

Session数据获取

  • 名称: @SessionAttribute
  • 类型: 形参注解
  • 位置:处理器类中的方法形参前方
  • 作用:绑定请求Session数据与对应处理方法形参间的关系
@RequestMapping("/sessionApi")
public String sessionApi(@SessionAttribute("name") String name,@SessionAttribute("age") int age){System.out.println(name);System.out.println(age);return "page.jsp";
}

Session数据设置

  • 名称: @SessionAttributes
  • 类型: 类注解
  • 位置:处理器类上方
  • 作用:声明放入session范围的变量名称,适用于Model类型数据传参
@Controller
@SessionAttributes(names={"name"})
public class ServletController {@RequestMapping("/setSessionData2")public String setSessionDate2(Model model) {model.addAttribute("name", "Jock2");return "page.jsp";}
}

注解式参数数据封装底层原理

  • 数据的来源不同,对应的处理策略要进行区分
  • Head
  • Cookie
  • Session
  • SpringMVC使用策略模式进行处理分发
  • 顶层接口: HandlerMethodArgumentResolver
  • 实现类: ……

SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据)相关推荐

  1. springmvc 页面跳转样式访问路径总是多一层地址_Net Core实战之基于角色的访问控制的设计...

    前言 上个月,我写了两篇微服务的文章:<.Net微服务实战之技术架构分层篇>与<.Net微服务实战之技术选型篇>,微服务系列原有三篇,当我憋第三篇的内容时候一直没有灵感,因此先 ...

  2. java学习笔记——众筹项目练习——项目中的忘记密码(密码找回)与记住我(自动登录)功能 和 返回json数据低版本浏览器显示下载问题的解决、众筹系统架构重构

                                          忘记密码(密码找回) 忘记密码(密码找回)这个功能可以说是目前所有为别人提供服务的软件系统都具备的基础功能啦!很普遍,因为总 ...

  3. java调用远程 接口_java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  4. JavaWeb-----Ajax异步请求 json对象 服务器如何返回json数据 使用ajax完成一个案例

    1. 回顾 1. servlet的生命周期: 2. filter: 过滤放行和拦截一些资源.比如:黑白名单,登录校验,编码设置等.    (1)创建一个类并实现Filter接口以及重写接口的抽象方法 ...

  5. (SpringMVC)Controller返回JSON数据

    文章目录 Controller返回JSON数据 1. 测试使用 2. 代码优化 3. 测试集合输出 4. 输出时间对象 5. 抽取为工具类 6. FastJson Controller返回JSON数据 ...

  6. (配置消息转换器)解决后台返回json数据到前台时页面时中文显示乱码问题

    (配置消息转换器)解决后台返回json数据到前台时页面时中文显示乱码问题 SpringMVC.xml中加 <!-- 配置消息转换器(解决中文乱码问题)--><mvc:annotati ...

  7. 解决springmvc返回json数据IE出现文件下载和json数据中文乱码问题

    总结一下使用springmvc时经常会遇到的一个问题. springmvc返回json数据在IE浏览器中访问,会出现文件下载现象,这是因为IE10以下不支持application/json格式的Res ...

  8. (一)页面跳转的四种方法及页面跳转中相对路径问题

    转载https://www.cnblogs.com/hrone/p/8067036.html navigator导航组件 首先页面跳转的相对路径中经常出现,例如" test/test&quo ...

  9. 返回Json数据浏览器带上<pre></pre>标签解决方法

    返回Json数据浏览器带上 标签解决方法 参考文章: (1)返回Json数据浏览器带上 标签解决方法 (2)https://www.cnblogs.com/Rozdy/p/4994214.html 备 ...

最新文章

  1. 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传
  2. 盘点2015跨境电商:硝烟下的机遇与变革
  3. LeetCode算法题10:DFS/BFS-扫雷游戏
  4. 华为USG Firewall Ipsec L2L
  5. Thread concepts
  6. 在线html5 api中文版,HTML5+ API Reference
  7. wxWidgets:wxCalendarCtrl 示例
  8. 纽大计算机博士,斑马博士捷报|纽约大学 (NYU) MSc Computer Engineering 计算机工程硕士录取...
  9. Android之ZXing扫描二维码以及生成二维码
  10. Quartz学习资料地址记录 、Quartz 学习的博客地址记录
  11. Python PIL(图像处理库)使用方法
  12. Python机器学习:PCA与梯度上升:007试手MNIST数据集
  13. yum安装nginx,并配置静态资源服务器
  14. Flutter基础—布局模型之层叠定位
  15. linux如何获取raw中的文件路径,如何使用Linux获得Touchscreen Rawdata的坐标
  16. 123. 买卖股票的最佳时机 III
  17. 嵌入式根文件系统的移植和制作详解【转】
  18. android9.0官方下载,安卓9.0系统安装包下载
  19. 大型在线考试答题系统源码 B/S架构
  20. 单链表指定结点的前插与后插(C/C++)

热门文章

  1. datagrid底部显示水平滚动_看完《惊奇队长》等彩蛋,我想到了一个制作PPT滚动字幕的方法...
  2. java怎编写么解析一个类型_DAY3:你必须知道的java虚拟机之类篇——类文件的结构...
  3. Java 查看指定文件最后的修改时间
  4. Spring Boot 之 elasticsearch
  5. 4乘4方格走的路线_苏州周边4个冷门自驾游路线景点推荐
  6. junit版本_Junit-jupiter-api 和 junit-jupiter-engine 的区别是什么
  7. android 自定义进度条_第一百八十九回:Android中自定义ProgressBar三
  8. if or函数套用_IF函数和OR函数的套用我想利用IF函数和 – 手机爱问
  9. 无监督学习之聚类方法(K-Means、层次聚类)
  10. android点击切换,android 导航栏中的按钮的点击切换