持续学习&持续更新中…

守破离


【Java从零到架构师第③季】【30】SpringMVC-转发_重定向_路径问题总结

  • 转发
    • 方法一
    • 方法二
    • 方法三
  • 重定向
    • 方法一
    • 方法二
    • 方法三
    • 方法四
    • 重定向—传递数据
  • mvc:view-controller
  • 路径问题总结
    • 在Java代码中,路径问题总结
    • 在jsp、html代码中,路径问题总结
  • 参考

转发

方法一

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!-- 使用SpringMVC时,路径必须加上classpath: --><param-value>classpath:applicationContext.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 使用SpringMVC时,location必须加上classpath: --><context:property-placeholder location="classpath:forward-jsp.properties"/><context:component-scan base-package="programmer.lp"/><mvc:annotation-driven><mvc:path-matching suffix-pattern="false"/></mvc:annotation-driven><mvc:default-servlet-handler/>
</beans>

forward-jsp.properties:

jsp-welcome-url=/welcome
jsp-welcome-localpath=/WEB-INF/jsp/welcome.jsp

JSP1Controller:

@Controller
public class JSP1Controller {@Value("${jsp-welcome-localpath}")private String welcome;@GetMapping("${jsp-welcome-url}")public void jsp1(HttpServletRequest request, HttpServletResponse response) throws Exception {// 从数据库中查询到的用户信息request.setAttribute("username", "lpruoyu");// 转发到欢迎用户的JSPrequest.getRequestDispatcher(welcome).forward(request, response);}
}

welcome.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>WELCOME</title><style>* {margin: 0;padding: 0;}html, body {height: 100%;width: 100%;position: fixed;}h2 {width: 50%;height: 50%;position: absolute;top: 50%;left: 50%;transform: translateX(-50%) translateY(-50%);display: flex;align-items: center;justify-content: center;}</style>
</head>
<body>
<h2 style="color: blueviolet;">WELCOME! 欢迎用户:<font color="green">&nbsp;${username}&nbsp;</font>回来!</h2>
</body>
</html>

方法二

ModelAndView的创建:

写法一:
ModelAndView mv = new ModelAndView();
mv.setViewName(dogLocalpath);
写法二:
ModelAndView mv = new ModelAndView(dogLocalpath);

方法二代码:

forward-jsp.properties:

jsp-dog-url=/dog
jsp-dog-localpath=/WEB-INF/jsp/dog.jsp

JSP2Controller:

@Controller
public class JSP2Controller {@Value("${jsp-dog-localpath}")private String dogLocalpath;@GetMapping("${jsp-dog-url}")public ModelAndView jsp2() {ModelAndView mv = new ModelAndView();// 使用MyBatis从数据库中获取数据Dog dog = new Dog();dog.setName("Larry");dog.setAge(8);// 本质就是request.setAttributemv.addObject("dog", dog);// 设置需要转发的页面mv.setViewName(dogLocalpath);return mv;}
}

当然,JSP2Controller也可以这样写:

@Controller
public class JSP2Controller {@GetMapping("/dog")public ModelAndView jsp2() {ModelAndView mv = new ModelAndView("/WEB-INF/jsp/dog.jsp");Dog dog = new Dog();dog.setName("Larry");dog.setAge(8);mv.addObject("dog", dog);return mv;}
}

dog.jsp:

<!-- ... -->
<h2>This is a dog, his name:${dog.name}, his age:${dog.age}.</h2>
<!-- ... -->

方法三

@Controller
public class JSP4Controller {@GetMapping("/jsp4")public String jsp4() {return "/WEB-INF/jsp/jsp4.jsp";}
}

虽然不写@ResponseBody,默认就是转发,但是为了看的清楚,一目了然,也可以这样写:

@Controller
public class JSP4Controller {@GetMapping("/jsp4")public String jsp4() {// 特地的表明是转发return "forward:/WEB-INF/jsp/jsp4.jsp"; }
}

转发时,若需要给JSP传值:

@Controller
public class JSP5Controller {@GetMapping("/jsp5")public String jsp5(HttpServletRequest request) {request.setAttribute("value", "好好学习!振兴中华!");return "/WEB-INF/jsp/jsp5.jsp";}
}

重定向

方法一

@Controller
public class Redirect1Controller {@GetMapping("/redirect1")public void redirect1(HttpServletRequest request, HttpServletResponse response) throws Exception {response.sendRedirect(request.getContextPath() + "/login.jsp");}
}

方法二

@Controller
public class Redirect2Controller {@GetMapping("/redirect2")public String redirect2() {return "redirect:/login.jsp";}
}

方法三

方法四

@Controller
public class Redirect6Controller {@GetMapping("/redirect6")public String redirect6() {// 重定向到某一个请求去return "redirect:/jsp5";}
}

重定向—传递数据

重定向只能通过请求参数传递一些简单的数据

方式一:

@Controller
public class Redirect4Controller {@GetMapping("/redirect4")public String redirect4() {return "redirect:/showInfo.jsp?name=lpruoyu&age=21";}
}

方式二:

@Controller
public class Redirect5Controller {@GetMapping("/redirect5")public ModelAndView redirect5() {ModelAndView mv = new ModelAndView("redirect:/showInfo.jsp");mv.addObject("name", "ruoyu");mv.addObject("age", "18");return mv;}
}

客户端的使用:

<h2 style="color: blueviolet;">name:${param.name}, age:<%=request.getParameter("age")%>
</h2>

mvc:view-controller

转发:

    <mvc:view-controller path="/jsp6" view-name="/WEB-INF/page/jsp/jsp6.jsp"/>

重定向:

    <mvc:view-controller path="/jsp6-redirect" view-name="redirect:/public/jsp6.jsp"/>

路径问题总结

http://IP地址:端口/context_path/对应webapp/目录

在Java代码中,路径问题总结

  • 假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3"
  • 假设转发路径是:"/page/test.jsp"
    1. 以斜线(/)开头,参考路径是context_path
    2. 所以最终转发路径是:"http://IP地址:端口/context_path" + “/page/test.jsp
  • 假设转发路径是:"page/test.jsp"
    1. 不以斜线(/)开头,参考路径是当前请求路径的上一层路径(处于哪个目录下)
    2. 所以最终转发路径是:"http://IP地址:端口/context_path/path1/path2/" + “page/test.jsp

在jsp、html代码中,路径问题总结

重定向相当于在jsp、html代码中,要以/context_path开头

  • 假设请求路径是:"http://IP地址:端口/context_path/path1/path2/path3"
  • 假设跳转路径是:"/page/test.jsp"
    1. 以斜线(/)开头,参考路径是"http://IP地址:端口"
    2. 所以最终跳转路径是:"http://IP地址:端口" + “/page/test.jsp
    3. 因此,在jsp、html中,一般都要以/context_path开头
  • 假设跳转路径是:"page/test.jsp"
    1. 不以斜线(/)开头,参考路径是当前请求路径的上一层路径(处于哪个目录下)
    2. 所以最终跳转路径是:"http://IP地址:端口/context_path/path1/path2/" + “page/test.jsp

参考

小码哥-李明杰: Java从0到架构师③进阶互联网架构师.


本文完,感谢您的关注支持!


【Java从零到架构师第③季】【30】SpringMVC-转发_重定向_路径问题总结相关推荐

  1. 【Java从零到架构师第③季】【49】会话管理—Token_ehcache

    持续学习&持续更新中- 守破离 [Java从零到架构师第③季][49]会话管理-Token_ehcache 基于Cookie.Session 基于Token ehcache 简单使用 项目使用 ...

  2. 【Java从零到架构师第③季】【48】SpringBoot-Swagger

    持续学习&持续更新中- 守破离 [Java从零到架构师第③季][48]SpringBoot-Swagger 接口文档-Swagger 基本使用 不使用starter 使用starter(Swa ...

  3. 【Java从零到架构师第③季】【26】SpringMVC-反射获取方法参数名_SpringMVC是如何获取方法的参数名的

    持续学习&持续更新中- 守破离 [Java从零到架构师第③季][26]SpringMVC-反射获取方法参数名_SpringMVC是如何获取方法的参数名的 利用反射获取方法的参数名 直接编译 修 ...

  4. 【Java从零到架构师第③季】【24】SpringMVC-概述_入门

    持续学习&持续更新中- 守破离 [Java从零到架构师第③季][24]SpringMVC-概述_入门 Spring.SpringMVC.MyBatis之间的关系 SpringMVC简介 Spr ...

  5. 【Java从零到架构师第③季】【28】SpringMVC-Servlet的URL匹配_path-matching suffix-pattern

    持续学习&持续更新中- 守破离 [Java从零到架构师第③季][28]SpringMVC-Servlet的URL匹配_path-matching suffix-pattern Servlet的 ...

  6. 【Java从零到架构师第二季】【07】JDBC FOR MySQL

    持续学习&持续更新中- 学习态度:守破离 JDBC FOR MySQL 什么是JDBC 如何通过Java操作数据库 JDBC是属于JavaSE的一部分 下载MySQL的JDBC实现 JDBC细 ...

  7. 【Java从零到架构师第二季】【14】AJAX

    持续学习&持续更新中- 学习态度:守破离 AJAX 同步请求和异步请求 未学AJAX之前向服务器提交请求的方式 同步和异步 AJAX 什么是AJAX AJAX的常见使用方式 原生 jQuery ...

  8. 【Java从零到架构师第1季】【并发 Concurrent 03】线程间通信_ReentrantLock_线程池

    持续学习&持续更新中- 守破离 [Java从零到架构师第1季][并发 Concurrent 03]线程间通信_ReentrantLock_线程池 线程间通信 线程间通信-示例 可重入锁Reen ...

  9. 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能...

    近三年,其实都是在做一个项目,项目是一个大型的多节点部署的项目,做了好几个版本,中间用到了很多技术和框架, 也用了一些管理工具和敏捷实践.我这里不是来说项目的,因为最近看了一些招聘信息,结合项目中用到 ...

  10. 【Java从0到架构师(2),Java面试问题

    新建一个核心配置文件:applicationContext.xml <?xml version="1.0" encoding="UTF-8"?>&l ...

最新文章

  1. 通过Python实现某个目录下所有文件(包含子目录中的文件)的列出
  2. 史上最完整的文件和目录操作类
  3. 全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
  4. VTK:网格之FitToHeightMap
  5. Orchard详解--第一篇 介绍
  6. Java异常处理-----java异常体系
  7. Merge Two Sorted Lists leetcode java
  8. pcm转换在线工具_律师必备的PDF在线转换工具,推荐5款,全免费!
  9. eclipse的maven项目,如何使用java run main函数
  10. 揭秘盒马鲜生,如何打破收益增长天花板!
  11. 训练集,验证集,测试集
  12. CENTOS7开机自启动脚本
  13. 决定系数R2相关知识,以及与相关系数之间的关系
  14. 计算机专业朋友圈文案,朋友圈文案合集_用来发微信朋友圈的句子
  15. Github删除历史提交记录的方法
  16. 13.2 RS编码和纠错算法
  17. 输出三角形,平行四边形,菱形
  18. Win7快速调整屏幕亮度最快的方法
  19. 网络维护类岗位做什么?
  20. 桥接模式和装饰器模式

热门文章

  1. 手把手教你高效快捷的创建Swift Framework
  2. python-漫天星星turtle and random
  3. 新手小白如何挑选吉他,附几款超高性价比吉他推荐
  4. 新手小白~千元左右新手入门值得推荐的十款吉他
  5. 26个英文字母(大小写)+10个数字
  6. 第13课:构建神经网络模型的实用建议
  7. 从一个app里面 跳转到另一个 app
  8. python修改图片大小为30kb_python 批量修改图片大小
  9. ftp上传工具绿色版,五款ftp上传工具绿色版好用推荐
  10. python连连看_Python-连连看