java如何在war中获取当前jsp文件路径?
由于有很多转发请求,很难识别当前显示的jsp文件。可以在war中获取当前jsp文件路径吗?如何实现
例如: 网址:http://localhost:8080/controller/action
文件路径:/view/dev/test。jsp
<%= getServletContext().getRealPath("/") %>
上面的语句不起作用,它显示的是C:\Projects\test\build\web\而不是C:\Projects\test\build\web\view\dev\test。jsp
# 1 楼答案
这将取决于实现,但由于许多实现都使用Jasper,因此它可能比您想象的更具可移植性。当然,可移植性可能不是问题
但简单的情况是,从JSP中获取完整的限定类名“this”,并由此派生路径名。每个JSP都被编译成一个Servlet,每个JSP都需要自己独特的类
例如,在Glassfish中,它使用来自Tomcat/Apache的Jasper:
我有一个简单的jsp,root。jsp:
这是战争的根源。当我运行它时,我得到以下信息:
当我创建目录
d
,并将root.jsp
复制到其中并执行时,我得到:你可以看到
/root.jsp
的类名是org.apache.jsp.root_jsp
。对于/d/root.jsp
,它是org.apache.jsp.d.root_jsp
如果从类名中删除
org.apache.jsp
,请转换剩余的“.”到“/”和“u”到a”您将获得:这实际上让你得到了你想要的
如果在运行时覆盖一个JSP,那么它将开始将_1和_2粘贴到末尾,因此您必须对此进行说明
但是好好玩玩这个,它应该对你有用,让你走到你要去的地方
请记住,它是不可移植的,它显然适用于Jasper(Tomcat、TomEE、Jetty、Glassfish)的任何东西,但我不能说WebLogic或WebSphere
但是,它可能会。容器必须以某种方式将JSP文件映射到类,这是一种直观的方法
所以,试试看你是否能让它和你的容器一起工作