2014-03-07 77 views
1

我使用Netbeans和Glassfish服務器開發了一個WebApplication。我想在Tomcat服務器上部署它。但我無法在Tomcat上運行servlet。我做了以下Tomcat上的Servlet配置

  1. 創建的文件夾「FTI」 Tomcat的根目錄中
  2. 放置的index.jsp FTI目錄內,我能夠通過我的瀏覽器
  3. 我創建內部WEB-INF文件夾訪問「fti」文件夾並將web.xml文件放入其中。
  4. 我在「WEB-INF」文件夾內創建了classes文件夾,並將編譯後的java文件test.class放入其中。
  5. 我試着通過瀏覽器訪問/ fti/test來調用servlet,並且因爲「請求的資源(/ fti/test)不可用而出現錯誤。」

我能夠運行使用使用Netbeans相同的web.xml文件和GlassFish服務器相同的servlet

test.java文件:

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 


public class test extends HttpServlet { 


protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 

     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet test</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     out.println("<h1>Servlet test </h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } 
} 


@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 


@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    processRequest(request, response); 
} 


@Override 
public String getServletInfo() { 
    return "Short description"; 
} 

} 

我的web.xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 

<servlet> 
    <servlet-name>test</servlet-name> 
    <servlet-class>test</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>test</servlet-name> 
    <url-pattern>/test</url-pattern> 
</servlet-mapping> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 

+0

在步驟4訪問它,您是否將手動.class文件放入類文件夾? – Rembo

+0

你確定你的代碼編譯成功,沒有這個錯誤:'嘗試'沒有'catch','最後'或資源聲明 – Rembo

+0

爲什麼地球上不使用IDE?它會自動執行許多這些步驟,並確保一切都在正確的位置。 – EJP

回答

1

servlet或任何REST請求路徑不僅僅是一個遠程文件系統。在您的web.xml中,您告知您的容器該servlet的名稱爲test,其路徑爲test/,因此請嘗試撥打test而不是fti/test

+0

「用於映射到servlet的路徑是請求對象的請求URL減去上下文路徑和路徑參數。」所以上下文路徑'fti'必須在那裏... –

+0

我試過了......它不工作 – user3392436

2

您將「根」web應用程序與頂級文檔目錄混淆。 fti需要成爲ROOT的兄弟姐妹才能像您期待的那樣行事,而不是孩子。

0

文件夾fti應位於文件夾webapps下,您可以在安裝了Tomcat的同一文件夾中找到該文件夾​​。此外,類test.class應在webapps/fti/WEB_INF/classes。您應該能夠通過/fti/test