JavaWEB项目中,资源的绝对路径到底什么时候才需要加上文件夹名?

图片说明

如图,项目的虚拟目录为/day17,在WEB-INF下有个login.jsp文件,而login.jsp里的验证码img标签的属性指向src/cn/itcast/web/servlet/CheckCodeServlet,CheckCodeServlet.java的url-pattern配置的是/checkCodeServlet。

图上img的src属性写的是

src="${pageContext.request.contextPath}/checkCodeServlet"

这里的

${pageContext.request.contextPath}

获取的不就是项目的虚拟目录吗?那么img的src属性获取到的路径不就是下面这个了?

src="/day17/checkCodeServlet"

而/checkCodeServlet的绝对路径不应该是下面这个吗?

src/cn/itcast/web/servlet/checkCodeServlet

为什么只在/checkCodeServlet前面加上项目的虚拟目录/day17就能访问到这个Servlet了呢?求大神帮解惑下,感激不尽!

https://blog.csdn.net/qq_38263083/article/details/82924281

第一个图的 Servlet 类的映射请求路径跟 Servet 类定义文件夹没有关系,它是由 web.xml 中的配置决定的。
第二个图的 jsp 等资源文件的绝对路径是通过项目请求路径设置的,也就是请求路径+它在 WebContent 下的相对路径。

映射类路径是从配置文件中配置的。 它相当于一个别名。 二楼回答的比较清楚了。 您可以去配置文件中找一下

你理解错了
比如你跳到这个页面输入地址为
http://localhost:8080/login.jsp
那么
${pageContext.request.contextPath}代表的含义就是http://localhost:8080

访问你的Servlet checkCodeServlet 你这么写实际等于
${pageContext.request.contextPath}/checkCodeServlet=http://localhost:8080/checkCodeServlet

还有问题吗