2011-12-02 63 views
0

我試圖在netbeans中爲java web應用程序項目實現基本的mvc模式。我有部署描述符(web.xml)正確,但我似乎無法從java servlet本身重定向到正確的jsp。這裏是我的項目文件夾的目錄:如何在java servlet項目中引用更高層次結構的文件

/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鏈接調用ManageSurveysServlet這反過來又轉發request對象,並重定向到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); 

UPDATE: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> 
+0

我不知道,但確實' 「/」 + request.getContextRoot()+ 「/manage_surveys.jsp」'工作? – happymeal

+0

恐怕HttpServletRequest對象'request'沒有方法getContextRoot() –

+0

我的錯誤,它是'getContextPath()'。 – happymeal

回答

2

移動manage_surveys.jspWEB-INF folder.I認爲這將是解決方案。

0

Javadoc說給定的資源是一個相對路徑。因此,在類dir中執行意味着,您必須將您的jsp放在「classes」目錄中,但這不是一個好主意,但出於測試原因,您可以嘗試或將您的代碼更改爲上下文根目錄:

RequestDispatcher dispatcher = request.getRequestDispatcher("/manage_surveys.jsp"); 
RequestDispatcher dispatcher = request.getRequestDispatcher("/manage_surveys.jsp"); 

或相對:

RequestDispatcher dispatcher = request.getRequestDispatcher("../../manage_surveys.jsp"); 

供參考的Javadoc: http://docs.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#getRequestDispatcher(java.lang.String