在Java Servlet中生成HTML响应

时间:2010-03-03 12:02:44

标签: html servlets

如何在Java servlet中生成HTML响应?

3 个答案:

答案 0 :(得分:102)

您通常会将请求转发给JSP进行显示。 JSP是一种视图技术,它提供了一个模板来编写普通的HTML / CSS / JS,并提供了在taglib和EL的帮助下与后端Java代码/变量进行交互的能力。您可以使用JSTL等标记库来控制页面流。您可以将任何后端数据设置为任何请求,会话或应用程序范围中的属性,并使用JSP中的EL(${}内容)来访问/显示它们。

开球示例:

@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String message = "Hello World";
        request.setAttribute("message", message); // This will be available as ${message}
        request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response);
    }

}

/WEB-INF/hello.jsp看起来像:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2370960</title>
    </head>
    <body>
         <p>Message: ${message}</p>
    </body>
</html>

打开http://localhost:8080/contextpath/hello时会显示

Message: Hello World

在浏览器中。

这使Java代码免于HTML混乱,并大大提高了可维护性。要使用servlet学习和练习更多内容,请继续下面的链接。

同时浏览the "Frequent" tab of all questions tagged [servlets]以查找常见问题。

答案 1 :(得分:33)

您需要将doGet方法设为:

public void doGet(HttpServletRequest request,
        HttpServletResponse response)
throws IOException, ServletException
{
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>Hola</title>");
    out.println("</head>");
    out.println("<body bgcolor=\"white\">");
    out.println("</body>");
    out.println("</html>");
}

您可以看到一个简单的hello world servlet的this链接

答案 2 :(得分:0)

除了直接从响应获得的PrintWriter上编写HTML(这是从Servlet输出HTML的标准方法)之外,还可以使用RequestDispatcher将HTML片段包含在外部文件中:

public void doGet(HttpServletRequest request,
       HttpServletResponse response)
       throws IOException, ServletException {
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();
   out.println("HTML from an external file:");     
   request.getRequestDispatcher("/pathToFile/fragment.html")
          .include(request, response); 
   out.close();
}