2010-06-11 61 views
1

我試圖將文件上傳到jsp中,然後在其他代碼中使用該文件。我的問題是,它通過request.getAttribute()調用以servlet的形式進入對象,所以我不知道該如何處理它。來自網頁的輸入返回的對象的類型

我有這段代碼到目前爲止嘗試和測試它是什麼,但我得到一個NullPointerException。

test.jsp的

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Input Test</title> 
    </head> 
    <body> 
     <form action="InputServlet" method="POST"> 
     <input type="file" name="file1"> 
     <input type="submit" value="submit"> 
     </form> 
    </body> 
</html> 

inputservlet.java

public class InputServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException { 

     PrintWriter out = response.getWriter(); 
     out.println(request.getAttribute("file1").getClass()); 
    } 

} 

是我的什麼在有缺陷的去理解還是我剛剛編碼它錯了嗎?

此外,我期待的類型是對象,所以如果有人知道我應該投它,這也會非常有幫助。

回答

1

它很可能是空的,因爲它涉及一個全新的和不同的request。你可能已經發送了重定向到servlet而不是前向?

無論如何,您不應該在JSP文件中處理文件上傳,而應該在真正的servlet類中處理文件上傳。這是麻煩,因爲它是一種視圖技術。

參見:


更新:按你的代碼更新,這是不行的。您需要將表單的enctype設置爲multipart/form-data,並使用Commons FileUpload在servlet中處理它。另請參閱給定的鏈接。

至此,3.0之前的Servlet API不支持multipart/form-data編碼,request.getParameter()和consorts不提供輸入值。這裏使用request.getAttribute()是一個誤解。那裏不適合。您需要根據RFC2388自行解析request.getInputStream()。然而,您會喜歡使用Apache Commons FileUpload,而不是重複發明和維護多年。 Apache Commons已經爲你做到了,從中受益。

如果您已經使用Servlet 3.0(Glassfish v3),那麼您可以使用內置的request.getParts()來收集項目。大多數servlet容器都會在引擎蓋下使用Commons FileUpload,如果出於某種原因干擾你,你只會在/WEB-INF/lib或導入中看不到它。

參見:

+0

都能跟得上。我設置輸入的表單的行爲來調用servlet。我只是試圖獲取文件,所以我可以將它傳遞給處理它的POJO類。我會更新我的文章,將我的jsp和servlet代碼全部看到。 – 2010-06-11 00:30:13

+0

你用什麼來分析文件上傳?這聽起來就像您使用的第三方過濾器「透明地」處理上載。無論如何,你是否閱讀過至少你知道的鏈接?瞭解*基礎知識?即它應該如何工作*在引擎蓋下*? – BalusC 2010-06-11 00:35:52

+0

我也喜歡你的第一個鏈接,除了我不需要在文件系統上的任何點保存文件。我只需要將它發送給我的另一個類,它將它發送到存儲它的真實數據庫。我只需要把它放到一個java對象中,這樣我就可以處理它了。 – 2010-06-11 00:38:13

相關問題