使用forward转发前后的uri地址区别

在实现通过分辨不同地址来使得某个链接更换不同样式的时候遇到一个问题,在此说明一下解决问题原因及解决方法
问题描述

我有一个testServlet映射到地址/test,同时在该servlet中使用request.getRequestDispatcher("/jsp/test.jsp").forward(request, response);定位到/jsp/test.jsp文件,我在testServlet使用System.out.println(request.getRequestURI());和在test.jsp页面使用<% system.out.println(request.getRequestURI()); %>打印出的结果却不相同

在servlet控制台打印出 /test
而在jsp页面打印出 /jsp/test.jsp

原因分析
当你在 testServlet 中使用System.out.println(request.getRequestURI());,它将打印出客户端最初请求的 URI,也就是 /test,因为 testServlet 是映射到这个地址的。
然而,在 test.jsp 页面中,当你使用<% System.out.println(request.getRequestURI()); %>它将打印出转发后的 URI,也就是 /jsp/test.jsp,因为 request.getRequestURI() 总是返回客户端最初请求的 URI 的完整路径,但在转发(forward)的上下文中,这个 URI 实际上指的是最终被请求的资源,即 JSP 页面。
所以,总结一下:
在 testServlet 中:打印 /test
在 test.jsp 页面中:打印 /jsp/test.jsp

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容