当我';我使用RequestDispatcher,而不是处理JSP的内容,JSP页面作为一个整体呈现在输出上

当我';我使用RequestDispatcher,而不是处理JSP的内容,JSP页面作为一个整体呈现在输出上,jsp,servlets,Jsp,Servlets,当我调用RequestDispatcher,而不是处理请求时,JSP页面本身被呈现为输出…JSP内容出现在“accountcreated”行之后 //Servlet块 if(i==1){ PrintWriter pw = response.getWriter(); pw.println("Account Created!!"); RequestDispatcher rd = request.getRequestDispatc

当我调用RequestDispatcher,而不是处理请求时,JSP页面本身被呈现为输出…JSP内容出现在“accountcreated”行之后

//Servlet块

if(i==1){
            PrintWriter pw = response.getWriter();
            pw.println("Account Created!!");
            RequestDispatcher rd = request.getRequestDispatcher("Login.jsp");
            rd.include(request, response);
            System.out.println("Record Updated!!!");
        }
//在浏览器上渲染的输出:

Account Created!!

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<link rel="icon" type="image/ico" href="favicon.ico"></link> 
<link rel="shortcut icon" href="favicon.ico"></link>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
</head>
<body>
<form action="./Authentication" method="post">
    <p>Enter username<input type="text" name="Uname"></p>
    <p>Enter password<input type="password" name="Pword"></p>
    <input type="submit" value="Login"> 
</form>
</body>
</html>
已创建帐户!!
登录页面
输入用户名

输入密码


您不应该在servlet中获取writer,也不应该手动向其写入字符串,您应该使用
RequestDispatcher#forward()
而不是
include()
。否则会阻止JSP设置正确的
text/html
内容类型,因此webbrowser会将所有内容解释为纯文本

按照如下方式重写该servlet块,以使JSP正确地完成其工作:

if (i == 1) {
    request.getRequestDispatcher("Login.jsp").forward(request, response);
}
另见:
  • -包含正确使用servlet的Hello World示例

这是因为在将响应发送到浏览器之前,您并没有为响应设置contentType


set
response.setContentType(“text/html”)它应该适合您。:)

@BalusC…您能告诉我为什么在这种情况下include不起作用吗?因为JSP无法设置正确的
text/html
内容类型。阅读
include()
的javadoc:毕竟,您只是使用了将控件转发到JSP的错误方法。
include()
不存在,您根本不应该在servlet中获得响应编写器,这不是servlet的责任。