0

SampleServletnew で名前が付けられたサーブレット クラスを作成しましたdynamic web project。サーバーをデバッグモードで起動しました。以下は私のサーブレットのコードです-

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>

上記の両方の方法にブレークポイントを設定しました。ブラウザからこのURLにアクセスするとすぐに-

http://localhost:8080/ServletExample/SampleServlet

私のブレークポイントは常に doGet メソッドでヒットします。

これで、クライアントであり、サーブレットに XML ファイルをリクエストとして渡す必要があるため、サーブレットの doPost メソッドを呼び出す新しい Java プロジェクトを Eclipse で作成しました。

以下は私のコードです-

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 アプリケーションとして実行するとすぐに、サーブレット クラスに設定したブレークポイントに到達しません。なぜそれが起こっているのかわからず、例外はスローされません。なぜそれが起こっているのですか?

4

1 に答える 1

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);
}
于 2013-07-03T22:55:30.190 に答える