$ {ctx}与$ {pageContext.request.contextPath}理解

Posted zeroingToOne

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$ {ctx}与$ {pageContext.request.contextPath}理解相关的知识,希望对你有一定的参考价值。

一、\\${ctx}与${pageContext.request.contextPath}的区别

相同点:

\\${ctx}和\\${pageContext.request.contextPath}都是获取当前文件的根目录

不同点:

\\${ctx}是\\${pageContext.request.contextPath}的简写版

例:

项目结构:

pathTest.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
路径1:${ctx}<br>
路径2:${pageContext.request.contextPath}
</body>
</html>

结果如图:

注:使用\\${ctx}时,要先进行配置:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>

 

二、使用\\${ctx}访问js文件或图片

<img src="${ctx}/images/left-head.jpg"/>

运行结果:

但是没懂WebContent目录的存在,\\${ctx}获取的是文件跟目录,也就是/SpringDemo,但是images是在SpringDemo\\WebContent目录下,那么为什么\\${ctx}/WebContent/images/left-head.jpg会报错

F12查看页面源码,发现也跟WebContent没有关系

 

网上找了很久资料,终于找到了原因,直接搬过来了,原文:https://www.cnblogs.com/lixiuming521125/p/7253918.html ,作为一个勤劳的搬运工,原文内容如下:

WEB项目是放在容器上运行的,而Java的源码是不能直接运行,需要经过编译部署才能在容器上运行,那么线索就来了,容器上运行的是编译的结果,自然就不是项目本身(这里指的是项目本身的目录结构);所以所有的访问路径是按照编译后的路径

看下WEB工程的目录结构和编译结果的目录结构:

左边WEB项目的src的源码文件 --> 左边build下的.class的字节码文件,也就是右边容器编译结果路径的WEB-INF下的classes文件

左边WEB项目的WebContent --> 生成右边整个容器编译结果;也就是说右边编译的结果的主体内容就是左边WebContent里面的东西

 

访问路径是通过访问编译结果的工程名再到下面的文件,所以,访问路径不需要写上“WebContent”

 

以上是关于$ {ctx}与$ {pageContext.request.contextPath}理解的主要内容,如果未能解决你的问题,请参考以下文章

MSW 与 Jest(困惑)

带有 ctx.identity.username 的简单 GetItem 返回 null

Canvas 绘制星空

从零开始的Spring Boot(6Thymeleaf内置对象及表达式大全)

使用反应创建上下文时找不到命名空间“ctx”错误 - 打字稿

${cxt}