如何从java servlet返回一个html文档?

时间:2013-06-11 03:38:26

标签: java servlets

这可以返回一个字符串:

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

    }

}

抱歉是noob!

编辑:

我已经在单独的文档中使用了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 个答案:

答案 0 :(得分:44)

您从Servlet本身 打印 输出HTML (已弃用)

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

调度 到现有资源(servlet,jsp等)(称为转发到视图)(首选)

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

您需要将当前HTTP请求转发到的现有资源不需要以任何方式处于特殊状态,即它的编写方式与任何其他Servlet或JSP一样;容器无缝地处理转发部分。

确保提供资源的正确路径。例如,对于servlet,RequestDispatcher需要正确的URL模式(在web.xml中指定)

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

另请注意,可以从RequestDispatcherServletRequest检索到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);    
    }

}