2013-07-02 61 views
0

我在一個新的dynamic web project中創建了一個名爲SampleServlet的Servlet類。我已經在調試模式下啓動了服務器。下面是我的Servlet-無法發送請求到HttpClient的Servlet doPost方法

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

    BufferedReader reader = request.getReader(); 
    System.out.println(reader.readLine()); 

} 

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

    BufferedReader b = new BufferedReader(request.getReader()); 
    System.out.println(reader.readLine()); 

} 

我的web.xml文件中的代碼是像這個 -

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>ServletExample</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <description></description> 
    <display-name>SampleServlet</display-name> 
    <servlet-name>SampleServlet</servlet-name> 
    <servlet-class>com.servlet.example.SampleServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>SampleServlet</servlet-name> 
    <url-pattern>/SampleServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

我已經把斷點在上述兩種方法。只要我打這個網址從瀏覽器的

http://localhost:8080/ServletExample/SampleServlet

我總是斷點被擊中的doGet方法。

現在我在eclipse中創建了一個新的Java項目,它是我的客戶端,它將調用servlet doPost方法,因爲我需要將XML文件作爲請求傳遞給我的servlet。

下面是我的代碼 -

public static void main(String[] args) { 

    HttpPost post = new HttpPost("http://localhost:8080/ServletExample/SampleServlet"); 
    post.setHeader("Content-Type", "application/xml"); 
    post.setEntity(new StringEntity(generateNewXML())); 
    HttpClient client = new DefaultHttpClient(); 
    HttpResponse response = client.execute(post); 
} 

但不知何故,當我跑我上面的主程序作爲一個Java應用程序,它不打我已經把我的servlet類斷點。我不確定它爲什麼會發生,沒有例外情況發生。任何想法爲什麼發生?

+0

@AVD,我增加了這些,仍然不會打我的斷點。還有其他的東西是肯定的。 – ferhan

+0

您使用的是什麼應用程序服務器?訪問/錯誤/其他服務器日誌中的任何內容。一種可能性是應用程序服務器由於最大發布大小設置而拒絕該請求。嘗試用「hello」替換generateNewXML(),看看會發生什麼。 – Keith

+0

你的主程序包是什麼包? doPost真的受到保護,所以你不應該調用服務方法嗎? – happybuddha

回答

1

您的contentType是錯誤的,要將文件上傳到Web服務器,您需要指定多部分格式。

請參閱https://stackoverflow.com/a/1068132/305116以解決類似於您的問題和http://evgeny-goldin.com/blog/uploading-files-multipart-post-apache/的小教程。

因此,在你的主要功能,你需要這樣的事情,它的工作:

public static void main(String[] args) { 

    HttpPost post = new HttpPost("http://localhost:8080/ServletExample/SampleServlet"); 
    MultipartEntity entity = new MultipartEntity(); 
    entity.addPart("someXMLfile", new StringBody(generateNewXML(), "application/xml", 
     Charset.forName("UTF-8"))); 
    post.setEntity(entity); 

    HttpClient client = new DefaultHttpClient(); 
    HttpResponse response = client.execute(post); 
}