java servlet资源调度程序在正确的位置包含html

标签 java html jsp servlets

我有一个非常基本的登录 servlet

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

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        // get request parameters for userID and password
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if (username.equals("marti") && password.equals("bosch")) {
            response.sendRedirect("login_success.jsp");
        } else {
            RequestDispatcher rd = getServletContext().getRequestDispatcher(
                    "/login.html");
            PrintWriter out = response.getWriter();
            out.println("<font color=red>Either user name or password is wrong.</font>");
            rd.include(request, response);
        }
    }
}

当我从 login.html 调用 servlet 时:

<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
    <form action="LoginServlet" method="post">
        <p>Username: <input type="text" name="username"> </p>
        <p>Password: <input type="password" name="password"> </p>
        <p><input type="submit" value="Login"></p>
    </form>
</body>
</html>

如果我输入正确的用户名和密码,浏览器会正确呈现login_success.jsp。但是,当我没有输入正确的用户名和密码时,浏览器会将未渲染的 html 显示为纯文本:

<font color=red>Either user name or password is wrong.</font>
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
    <form action="LoginServlet" method="post">
        <p>Username: <input type="text" name="username"> </p>
        <p>Password: <input type="password" name="password"> </p>
         <p><input type="submit" value="Login"></p>
    </form>
</body>
</html>

如何使 LoginServlet 将消息放置在正确的位置(在 body 标记之后)?谢谢

最佳答案

确切地说,您需要将其作为 HTML 文档的内容:

<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
    <font color=red>Either user name or password is wrong.</font>
    <form action="LoginServlet" method="post">
        <p>Username: <input type="text" name="username"> </p>
        <p>Password: <input type="password" name="password"> </p>
         <p><input type="submit" value="Login"></p>
    </form>
</body>
</html>

此外,一个<font>标签在 HTML5 中已被弃用。

编辑:

所以要么你需要 sendRedirect到包含错误消息的页面:

response.sendRedirect("login_error.jsp");  //containing exactly the same html I posted

或者修改您的表单 JSP,以便在身份验证失败后呈现附加错误消息。您可以通过将参数从 Servlet 传递到 JSP 来实现这一点。引用这个thread .

关于java servlet资源调度程序在正确的位置包含html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422641/

相关文章:

html - CSS3 动画在 chrome 和其他浏览器上有所不同

php - 用户友好的方式从网站创建屏幕截图

java - JSF 1.2 - 使用 <h :dataTable> 为表生成动态 ID 属性

java - 如何更改 HttpServletRequest.servletpath?

java - 如何在 Struts2 中为选择(选择事件)提供单独的操作(在自动完成文本框中使用)

java - 使用 Guava 检查泛型类

java - 服务器 500 错误是安全问题吗?

php - 最大宽度在 IE 中不起作用

java - 在java中通过其项目属性动态排序JComboBox

java - 我可以扩展一个类并覆盖封闭的枚举类型吗?