当前位置: 首页 > 面试题库 >

如何从Java Servlet返回HTML文档?

丁晋
2023-03-14
问题内容

这可以返回一个字符串:

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本身 打印 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);    
    }

}


 类似资料:
  • 一开始在浏览器运行Vue文件还可以的,之后写了HTML文件并运行后发现无论如何都无法回到原来的Vue文件了 尝试: 结果:

  • 这是我的FegnClient: 这是对外部endpoint的调用: 我得到以下例外: 我的SpringMvcConfig类中确实有一个LocalDateTime转换器

  • 我正在尝试实现一个通用的REST客户端,如下所示。我有自己的模型将HTTP响应表示为response T。这里T是服务调用的返回类型,它可能只是T或Ts列表。下面的代码不编译,我需要帮助。 最终调用下面的方法,

  • 我有一个将arraylist传递给另一个意图的代码,如何将更新后的arraylist的值返回给主意图? 主意图代码中的数组列表: 我必须再次将数组列表传递给主要意图吗?像这样:

  • 问题内容: 到目前为止,我将通过以下方式返回html我的主页: 我想要做的是返回home.html本身,而不是复制其内容并返回字符串。 我该怎么做呢?谢谢 :) 问题答案: 您可以只返回或的实例,JAX-RS会做正确的事。

  • 问题内容: 在Java中,我有: 我希望本机方法“ nativeGetStatus”返回此枚举值。 JNI返回整数并与java中的enum的值进行比较是一个选项,但是想知道是否可以通过jobject返回值并将其直接分配给state吗?如果是,怎么办? 问题答案: 当然可以。枚举值是Enum类的公共静态字段,因此您可以使用此官方手册编写代码。只需从JNI获取字段并将其作为jobject返回即可。