JavaサーブレットからHTMLドキュメントを返すにはどうすればいいですか? [重複] 質問する

JavaサーブレットからHTMLドキュメントを返すにはどうすればいいですか? [重複] 質問する

これは文字列を返すために機能します:

import javax.servlet.http.*;
@SuppressWarnings("serial")
public class MonkeyServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {

        resp.setContentType("text/plain");
        resp.getWriter().println("got this far");

    }

}

しかし、HTML ドキュメントを返すことができません。これは機能しません:

import javax.servlet.http.*;
@SuppressWarnings("serial")
public class BlotServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {

        resp.setContentType("text/html");
        resp.getWriter().println("html/mypage.html");

    }

}

初心者でごめんなさい!

編集:

すでに HTML は別のドキュメントにあります。そのため、ドキュメントを返すか、何らかの方法で読み取り/解析して、HTML をすべて再入力するのではなくする必要があります...

編集:

これはweb.xmlにあります

<servlet> 
    <servlet-name>Monkey</servlet-name> 
    <servlet-class>com.self.edu.MonkeyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Monkey</servlet-name> 
    <url-pattern>/monkey</url-pattern> 
</servlet-mapping>

他に何か入れて、ファイルを返すようにすることはできますか?

<servlet-mapping> 
    <servlet-name>Monkey</servlet-name> 
    <file-to-return>blot.html</file-to-return> 
</servlet-mapping>

ベストアンサー1

あなたはどちらか印刷サーブレット自体からHTMLを取り出す(非推奨)

PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>My HTML Body</h1>");
out.println("</body></html>");

または、急送既存のリソース(サーブレット、JSPなど)(ビューへの転送と呼ばれる)(推奨)

RequestDispatcher view = request.getRequestDispatcher("html/mypage.html");
view.forward(request, response);

現在の HTTP リクエストを転送する必要がある既存のリソースは、特別なものである必要はありません。つまり、他のサーブレットや JSP と同じように記述され、コンテナーが転送部分をシームレスに処理します。

リソースへの正しいパスを指定してください。たとえば、サーブレットの場合はRequestDispatcher正しいURLパターンが必要です。(web.xml で指定されているとおり)

RequestDispatcher view = request.getRequestDispatcher("/url/pattern/of/servlet");

また、aはRequestDispatcher両方から取得できるがServletRequestServletContext前者はaを取得できるという違いがあることに注意してください。相対パス同じように。

参照:
http://docs.oracle.com/javaee/5/api/javax/servlet/RequestDispatcher.html

サンプルコード

public class BlotServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
        // we do not set content type, headers, cookies etc.
        // resp.setContentType("text/html"); // while redirecting as
        // it would most likely result in an IllegalStateException

        // "/" is relative to the context root (your web-app name)
        RequestDispatcher view = req.getRequestDispatcher("/path/to/file.html");
        // don't add your web-app name to the path

        view.forward(req, resp);    
    }

}

おすすめ記事