2011-06-14 60 views
0

我想送些東西給一個servlet,但我得到這個如何在JSP中使用的doGet從Servlet

Etat HTTP 404 - /pdfreader/Services%20Web%20avec%20J2EE%20et%20.NET.pdf 

-------------------------------------------------------------------------------- 

type Rapport d''état 

message /pdfreader/Services%20Web%20avec%20J2EE%20et%20.NET.pdf 

description La ressource demandée (/pdfreader/Services%20Web%20avec%20J2EE%20et%20.NET.pdf) n'est pas disponible. 

我調用它從我的JSP中

<a href="/pdfreader/<%=filename/*le nom d'un fichier pdf par exemple (jsp.pdf)*/ %>"><%=bookName %> </a> 

和我servlet代碼是

package com.search.ts; 

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.net.URLDecoder; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* Servlet implementation class pdfreader 
*/ 
@WebServlet("/pdfreader") 
public class pdfreader extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public pdfreader() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
      String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8"); 
      //filename= request.getParameter("err"); 
      //String filename =(String) request.getAttribute("linkbook"); 
      File file = new File("F:/fichiers/", filename); 

      response.setContentType(getServletContext().getMimeType(file.getName())); 
      response.setContentLength((int) file.length()); 
      response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); 

      BufferedInputStream input = null; 
      BufferedOutputStream output = null; 

      try { 
       input = new BufferedInputStream(new FileInputStream(file)); 
       output = new BufferedOutputStream(response.getOutputStream()); 

       byte[] buffer = new byte[8192]; 
       int length; 
       while ((length = input.read(buffer)) > 0) { 
        output.write(buffer, 0, length); 
       } 
      } finally { 
       if (output != null) try { output.close(); } catch (IOException ignore) {} 
       if (input != null) try { input.close(); } catch (IOException ignore) {} 
      } 
    } 

} 

當我創建servlet和我沒有得到在WEB-INF任何web.xml中的JSP(我用eclipse)

,所以我嘗試創建一個

<?xml version="1.0" encoding="UTF-8"?> 

<web-app> 
<welcome-file-list> 
<welcome-file>/vieu/indexS.jsp</welcome-file> 
</welcome-file-list> 
<servlet> 
<javaee:description></javaee:description> 
<javaee:display-name>pdfreader</javaee:display-name> 
<servlet-name>pdfreader</servlet-name> 
<servlet-class>pdfreader</servlet-class> 
<jsp-file>/vieu/indexS.jsp</jsp-file> 
</servlet> 
<servlet-mapping> 
<servlet-name>com.search.ts.pdfreader</servlet-name> 
<url-pattern>/pdfreader/*</url-pattern> 
</servlet-mapping> 
</web-app> 

任何人都知道這是爲什麼不工作?

回答

2

所有的法國極爲混亂。但至少有一個HTTP 404錯誤顯然是自我解釋的:它只是意味着請求URL是錯誤的,或者資源(servlet)無法啓動。

有幾個潛在的問題的原因:


首先,鏈接:

<a href="/pdfreader/<%=filename%>"><%=bookName %></a> 

URL中的斜線/使得它相對於域根。所以當你的JSP在http://localhost:8080/contextname/vieu/indexS.jsp上運行時,這個URL實際上指向http://localhost:8080/pdfreader/name.pdf。但你想要它是http://localhost:8080/contextname/pdfreader/name.pdf!所以,解決它相應

<a href="${pageContext.request.contextPath}/pdfreader/<%=filename%>"><%=bookName %></a> 

其次,Servlet聲明:

@WebServlet("/pdfreader") 

這是完全錯誤的。您需要將其標註爲:

@WebServlet(urlPatterns={"/pdfreader/*"}) 

三,web.xml缺少的Servlet API版本的聲明引起了容器回落到最低的相容性作案,因此新的Servlet 3.0 @WebServlet註釋韓元不再工作了。因此解決這個問題:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app 
    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_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

    <!-- Config here --> 
</web-app> 

web.xml刪除<servlet><servlet-mapping>聲明。這些不是必需的(適當!)@WebServlet

+0

thaaaaaaaaaaaaaank你這麼笨的工作,先生你好thx再次 – David 2011-06-14 20:20:55

0

您的web.xml文件可能不正確。它應該是這個樣子:

<web-app 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" version="2.5">

<servlet>
<servlet-name>pdfreader</servlet-name>
<servlet-class>com.search.ts.pdfreader</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>pdfreader</servlet-name>
<url-pattern>/pdfreader/*</url-pattern>
</servlet-mapping>

</web-app>

+0

thx試圖幫助,但與您的web.xml我得到的東西? – David 2011-06-14 20:12:52