为什么我不能让jsp想到它的路径?

时间:2017-04-06 12:41:51

标签: java jsp struts2

我在Java EE项目中使用struts:

在我的src中,如果我使用下面的404,我会收到<IFRAME src="${pageContext.request.contextPath}/WEB-INF/page/menu/alermDevice.jsp" name="dev" id="dev" frameBorder="0" width="500" scrolling="auto" height="400"> </IFRAME> 错误:

<IFRAME src="elecMenuAction_alermDevice.do" name="dev" id="dev" frameBorder="0" width="500" scrolling="auto" height="400">
</IFRAME>

但如果我在src下使用:

struts.xml

我会得到正确的信息。

这是我的<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <constant name="struts.ui.theme" value="simple"></constant> <constant name="struts.action.extension" value="do"></constant> <package name="system" namespace="/system" extends="struts-default"> <action name="elecTextAction_*" class="elecTextAction" method="{1}"> <result name="save">/system/textAdd.jsp</result> </action> <action name="elecMenuAction_*" class="elecMenuAction" method="{1}"> <result name="menuHome">/WEB-INF/page/menu/home.jsp</result> <result name="title">/WEB-INF/page/menu/title.jsp</result> <result name="left">/WEB-INF/page/menu/left.jsp</result> <result name="change">/WEB-INF/page/menu/change.jsp</result> <result name="loading">/WEB-INF/page/menu/loading.jsp</result> <result name="logout" type="redirect">index.jsp</result> <result name="alermStation">/WEB-INF/page/menu/alermStation.jsp</result> <result name="alermDevice">/WEB-INF/page/menu/alermDevice.jsp</result> </action> </package> </struts>

HTML

为什么我使用路径无法访问JSP?只使用我能得到的动作吗?

1 个答案:

答案 0 :(得分:1)

Web服务器无法从WEB-INF文件夹中获取资源。调用action时,它会返回一个响应作为结果的执行。它使用结果类型dispatcher,默认情况下用于将请求转发到指定的URL(请求的JSP页面)。

  

Dispatcher Result

     

包含或转发到视图(通常是jsp)。在幕后   Struts将使用目标servlet / JSP的RequestDispatcher   接收与原始相同的请求/响应对象   的servlet / JSP。因此,您可以使用它们在它们之间传递数据   request.setAttribute() - Struts操作可用。

     

有三种方法可以执行结果:

     
      
  • 如果我们在JSP的范围内(PageContext可用),PageContext的{​​{1}}方法是   调用。

  •   
  • 如果没有PageContext#include(String)且我们没有任何类型的包含(请求中没有PageContext   属性),然后调用   "javax.servlet.include.servlet_path"已成就。

  •   
  • 否则,会调用RequestDispatcher#forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse)

  •   

当调用servlet调度程序时,它没有这样的限制,并且可以返回具有最初请求的相同响应的资源。