ECLIPSE html不显示

ECLIPSE html不显示,html,eclipse,jsp,Html,Eclipse,Jsp,我有以下servlet: package gui; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest

我有以下servlet:

package gui;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorld
 */
@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public HelloWorld() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getWriter().append("Served at: ").append(request.getContextPath());

    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<b> Hello World! </b>");
    out.println("</html>");



}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
}

}
packagegui;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
/**
*Servlet实现类HelloWorld
*/
@WebServlet(“/HelloWorld”)
公共类HelloWorld扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*@参见HttpServlet#HttpServlet()
*/
公共HelloWorld(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//TODO自动生成的方法存根
response.getWriter().append(“服务于:”).append(request.getContextPath());
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“你好,世界!”);
out.println(“”);
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
//TODO自动生成的方法存根
doGet(请求、响应);
}
}
在服务器上运行此操作时,我得到:

送达日期:/HelloWorld html

b你好,世界/b

/html


用大约html,b,/b,/html代替实际的html。当我检查元素时,我注意到没有!DOCTYPE html标记

servlet不知道网页是什么,甚至不知道您发送的数据类型。它只是一种向客户端发送字节流的机制(事实上,您可以编写提供GIF、jpg、word文档等的servlet,只需设置适当的
响应。setContentType
并以适当的格式发送数据)。这使得它非常灵活,但也意味着你必须自己做每件事。而且,就像在代码中一样,没有显式发送的所有内容都不会被发送(如丢失的doctype),并且在错误的时刻发送的内容最终会出现在页面的错误位置(如
response.getWriter().append(“服务于”).append(request.getContextPath());
,在页面开始之前发送

一个有效的servlet doGet方法可以发送一个与代码几乎相同的基本网页,如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // announce that we're going to send html in the UTF-8 charset
    response.setContentType("text/html;charset=UTF-8");
    // grab the response's Writer and use that to output data
    try (PrintWriter out = response.getWriter()) {
        // send the doctype
        out.println("<!DOCTYPE html>");
        // send the page
        out.println("<html>");
        out.println("<head>");
        out.println("<title>My servlet</title>");            
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Served at " + request.getContextPath() + "</h1>");
        out.println("<b>Hello World!</b>");
        out.println("</body>");
        out.println("</html>");
    }
}
protectedvoid doGet(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
//宣布我们将以UTF-8字符集发送html
setContentType(“text/html;charset=UTF-8”);
//抓取响应的编写器并使用它输出数据
尝试(PrintWriter out=response.getWriter()){
//发送doctype
out.println(“”);
//发送页面
out.println(“”);
out.println(“”);
println(“我的servlet”);
out.println(“”);
out.println(“”);
out.println(“在“+request.getContextPath()+”处提供);
out.println(“你好,世界!”);
out.println(“”);
out.println(“”);
}
}

正如您所看到的,这很快变得不切实际。这就是为什么servlet通常依赖JSP之类的表示技术来执行表示。

我只需要注释掉以下几行:

response.getWriter().append("Served at: ").append(request.getContextPath());

输出与程序一致。没有doctype,因为您没有发送doctype。通常,servlet应该调用JSP来完成所有的表示工作。您先打印文本,然后打印html标记。将所有内容放入html标记中,然后看看会发生什么。