【问题标题】:How to return an html document from java servlet? [duplicate]如何从 java servlet 返回一个 html 文档? [复制]
【发布时间】:2013-06-06 19:57:51
【问题描述】:

这可以返回一个字符串:

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>

【问题讨论】:

  • 不,servlet 映射不正确。它不会起作用。

标签: java servlets


【解决方案1】:

您可以打印 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");

另外,请注意RequestDispatcher 可以从ServletRequestServletContext 中检索到,区别在于前者可以采用相对路径作为好吧。

参考:
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);    
    }

}

【讨论】:

  • 您能展示一下您提到的“现有 servlet”是什么样的吗?
  • 我的答案中的代码块将进入您现有的 servlet:处理 HTTP 请求的那个。被分派为 servlet、jsp 或 html 的资源不需要实现任何特殊接口。因此,用于分派的现有 servlet 与任何其他普通 servlet 一样。
  • (1) 是的,我所说的 servlet 是指您问题中的代码。不,您当前的 servlet 应该直接分派到该 html 文件。 (2) 您需要在 web.xml 中为您的 servlet 配置一个 catch all (/*) URL 模式。然后这个 servlet 可以简单地转发(或包含)您的 html 文件。
  • 由于某种原因,它仅在文件名和调度程序代码都具有 .jsp 时才有效,但 .html 不起作用...任何,没关系。我可以将我所有的 html 文档更改为 .jsp
  • 我很高兴你让它工作,但调度对动态(servlet、jsps)和静态(html)资源都有效。您可能需要稍微修改一下指定的路径。
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2014-03-19
  • 2021-07-24
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多