如何在Javaservlet项目中引用更高层次的文件

如何在Javaservlet项目中引用更高层次的文件,java,model-view-controller,servlets,Java,Model View Controller,Servlets,我正试图在netbeans中为一个javaweb应用程序项目实现一个基本的mvc模式。我的部署描述符(web.xml)是正确的,但似乎无法从Javaservlet本身重定向到正确的jsp。以下是我的项目文件夹的目录: /project /src /conf MANIFEST.MF /java /ph /com /client /esurvey /objects

我正试图在netbeans中为一个javaweb应用程序项目实现一个基本的mvc模式。我的部署描述符(web.xml)是正确的,但似乎无法从Javaservlet本身重定向到正确的jsp。以下是我的项目文件夹的目录:

/project
  /src
    /conf
      MANIFEST.MF
    /java
      /ph
        /com
          /client
            /esurvey
              /objects
                /* other .java files */
              /servlets
                ManageSurveysServlet.java
                /* other .java files */
  /build
    /empty
    /web
     index.jsp
     manage_surveys.jsp
     script.js
     style.css
     /META-INF
       context.xml
       MANIFEST.MF
     /WEB-INF
       web.xml
       /classes
         .netbeans_update_resources
         .netbeans_automatic_build
         /ph
           /com
             /client
               /esurvey
                 /objects
                   /* .class files found here */
                 /servlets
                   ManageSurveysServlet.class
                   /* other .class files found here */
来自
index.jsp
的链接调用
ManageSurveyServlet
,后者反过来转发
请求
对象,并重定向到
manage_surveys.jsp
,但鉴于上述目录,我不知道从servlet引用
manage_surveys.jsp
的路径/文件名。以下是转发请求对象的servlet中的代码:

request.setAttribute("surveys", surveys); // surveys is an arraylist
RequestDispatcher dispatcher = request.getRequestDispatcher("manage_surveys.jsp"); // i'm guessing it can't find the jsp
dispatcher.forward(request, response);
更新:web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>ManageSurveysServlet</servlet-name>
    <servlet-class>ph.com.client.esurvey.servlets.ManageSurveysServlet</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>ManageSurveysServlet</servlet-name>
     <url-pattern>/ManageSurveys</url-pattern>
  </servlet-mapping>
  <session-config><session-timeout>30</session-timeout></session-config>
  <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>

manageSurveyServlet
ph.com.client.esurvey.servlets.manageSurveyServlet
manageSurveyServlet
/管理调查
30
index.jsp

manage_surveys.jsp
移动到
WEB-INF
文件夹中。我认为这将是解决方案。

Javadoc说给定的资源是一条相对路径。因此,在classes目录中执行意味着,您必须将jsp放在“classes”目录中,但这不是一个好主意,但出于测试原因,您可以尝试或 将代码更改为上下文根相对:

RequestDispatcher dispatcher = request.getRequestDispatcher("/manage_surveys.jsp");
RequestDispatcher dispatcher = request.getRequestDispatcher("../../manage_surveys.jsp");
或亲属:

RequestDispatcher dispatcher = request.getRequestDispatcher("/manage_surveys.jsp");
RequestDispatcher dispatcher = request.getRequestDispatcher("../../manage_surveys.jsp");
Javadoc供参考:
)

我不确定,但是
“/”+request.getContextRoot()+“/manage\u surveys.jsp”
是否有效?恐怕HttpServletRequest对象
request
没有getContextRoot()方法。我的错误是
getContextPath()