RequestDispatcher显示页面';Java Servlet的源代码
其他方面一切正常为什么RequestDispatcher显示页面的源代码?RequestDispatcher显示页面';Java Servlet的源代码,java,jsp,servlets,Java,Jsp,Servlets,其他方面一切正常为什么RequestDispatcher显示页面的源代码? public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws Ser
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String uName=req.getParameter("uEmail");
String uPass=req.getParameter("uPass");
try{
DBConnection con=new DBConnection();
if(con.login(uName, uPass)){
HttpSession on = req.getSession();
on.setAttribute("u_id", uName);
res.sendRedirect("dashboard.jsp");
}
else{
RequestDispatcher dis= getServletContext().getRequestDispatcher("/login.jsp");
PrintWriter write = res.getWriter();
write.println("Wrong Username or Passowrd");
dis.include(req, res);
}
}catch(ClassNotFoundException | SQLException e){}
}
}
页面重定向到给定的url/login.jsp
,并显示错误消息,但为什么作为源代码
Wrong Username or Passowrd
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="LoginServlet" method="POST" />
<input type="text" name="uEmail" />
<br /><br />
<input type="text" name="uPass" />
<br /><br />
<input type="Submit" name="Register" value="Register" />
<br /><br />
</form>
</body>
</html>
错误的用户名或密码
JSP页面
直接链接到login.jsp
效果很好。from,javax.servlet.ServletResponse)
请求分派器的include方法获取资源的内容,这就是您在浏览器中获取源代码的原因
我认为您要做的是将请求转发到login.jsp,因此请使用请求调度器的转发方法
正如@JBNizet在他的评论中提到的,由于您来自Servlet的消息,HTML将无效。您需要设置响应的内容类型 在
doPost
方法中添加以下行
response.setContentType("text/html;charset=UTF-8");
希望它对你有用 在dis.include(请求、回复)之前代码>
添加此行res.setContentType(“text/html”);
it,因为“用户名或密码错误”“在html标记之前打印,使html无效?@JBNizet如何使用Dispatcher?我正在其他测试应用程序上使用,即使是相同的调度程序代码也可以正常工作。您所拥有的很好,只是在包含JSP之前不应该向响应中写入文本。这样做,您将生成无效的HTML。将错误消息存储在一个请求属性中,让JSP代码从该属性中获取错误消息,并在页面内打印它(必须打印的位置)。没有理由包括:您应该转发。@JBNizet我不明白为什么其他应用程序可以在相同的过程中正常工作?@JBNizet感谢那些在login.html
上的应用程序,这就是它们正常工作的原因?正如链接的javadoc所说,RequestDispatcher.include
仍然应该执行jsp,而不是显示它的源代码:您应该添加一些解释,说明为什么您的建议可以解决问题,等等。默认情况下,MIME(又名内容类型)设置为“text/plain”,您必须根据您希望在客户端(浏览器)上显示的文件(或内容)进行更改。