Как вернуть html-документ из Java-сервлета?

Это работает, чтобы вернуть строку:

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");

    }

}

Извините за то, что вы ноб!

EDIT:

У меня уже есть html в отдельных документах. Поэтому мне нужно либо вернуть документ, либо прочитать/проанализировать его каким-то образом, поэтому я не просто переименовываю все html...

EDIT:

У меня это в моем 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 может быть извлечен как из ServletRequest, так и ServletContext с той разницей, что первый может принимать относительный путь .

Ссылка:
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);    
    }

}