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