jsp - 当我使用 RequestDispatcher 时,不是处理 JSP 的内容,而是在输出上呈现整个 JSP 页面

标签 jsp servlets

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

//Servlet block

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 内容类型,因此所有内容都会被网络浏览器解释为纯文本。

按如下方式重写 servlet block ,让 JSP 正确完成其工作:

if (i == 1) {
    request.getRequestDispatcher("Login.jsp").forward(request, response);
}

另请参阅:

关于jsp - 当我使用 RequestDispatcher 时,不是处理 JSP 的内容,而是在输出上呈现整个 JSP 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119519/

相关文章:

java - 如何覆盖 ServletRequestWrapper 中的请求对象?

java - 通过连接防止 Oracle 数据库错误

java - Servlet中无法获取参数

java - 如何在不访问数据库的情况下获取值?

java - 通过 Glassfish Server 在 Java Servlet 中构建 Excel 表格

java - 如何在用户界面中使用 SOAP Web 服务?

java - JSP中pageContext.REQUEST_SCOPE和request对象的区别

jsp - 如何在 JSP 中导入 CSS 文件?

java - 不同平台上的ZipOutputStream结果不同

Apache Tomcat URI 编码 - UTF-8