当前位置: 首页 > 知识库问答 >
问题:

将Servlet错误消息重定向到JSP后保存表单数据

桂和同
2023-03-14

我有一个用户登录表单,当密码与数据库中的密码不匹配时,它会显示一条错误消息。我将错误消息重定向到如下所示的表单,但当它在表单上显示错误消息时,它会删除电子邮件/密码输入字段中的数据。在显示错误消息后,我可以做些什么来保持输入字段中的数据?提前谢谢你。

//SERVLET重定向到JSP

request.setAttribute("errorMessage", "Wrong credentials!");
                    request.getRequestDispatcher("/Login.jsp").forward(request, response);

//JSP表单页

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<title>User Log in</title>
</head>
<body>
<form action = "LoginServlet" method="POST">
<h3>Sign In</h3><br>

Email: <input type="text" name="email" required><br>
Password: <input type="password" name="pass" required><br>
<div style="color: #FF0000;">${errorMessage}</div><br>
<input type="submit" name="submit" value="Sign in">

</form>
</body>
</html>

共有2个答案

徐子石
2023-03-14

下面是一个关于如何使用AJAX实现这一点的示例。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<title>User Log in</title>
<%@ include file="PageHeader.html" %>
<!-- you need to include jquery for this example -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>
<body>
<form action = "LoginServlet" method="POST" id="someform">
<h3>Sign In</h3><br>
Email: <input type="text" name="email" required><br>
Password: <input type="password" name="pass" required><br>
<div style="color: #FF0000;display:none" id="someMsg"></div><br>
<input type="submit" name="submit" value="Sign in" id="sButton">

</form>


<script>  
    //the following will ajaxify your form, all you have to do is add 'id="someform" to it
    //reference here: https://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax
    $(document).on("submit", "#someform", function(event) {
        var $form = $(this); 
        $.post($form.attr("action"), $form.serialize(), function(response) {
            //response is not empty (because it contains the error string message)
            if(response){
               //here we are using the response from the servlet to set the text of the div. .show() makes the element visible, .delay(1000) is a 1000ms delay for .fadeOut() which makes the element invisible after some time 
               $('#someMsg').text(response).show().delay(1000).fadeOut("slow");
            }else{
               //response here is empty (String error = "";), so we just redirect the user (because details match)
               window.location = "Welcome.jsp"; 
            }
        });
        event.preventDefault(); // Important! Prevents submitting the form.
    });
</script>

</body>
</html>

将jquery添加到头部:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

在表单中添加id=“someform”

并将id=“someMsg”添加到您的div(同时使显示:无

然后,对于您的LoginServlet,请尝试以下操作:

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


            String pass1 = request.getParameter("pass");
            String email = request.getParameter("email");
            String error = "";

            //do whatever you need to do here, just don't do any forwarding 

            //here we check if the details are incorrect (!), javascript on the front end will decide whether to stay on the same page or redirect based on the value we send in error string.
            if(!validate(email,pass1)){
                 //if details are wrong, lets send the following string:
                 error = "Your password or email is wrong and you should feel bad.";
            }

             response.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
             response.setCharacterEncoding("UTF-8"); // You want world domination, huh?
             response.getWriter().write(error);       // Write response body.


    }

如果对你有效,请告诉我

孟花蜂
2023-03-14

我通过添加以下几行来解决这个问题:

//服务器

request.setAttribute("email",request.getParameter("email"));
request.setAttribute("pass", request.getParameter("pass"));
request.setAttribute("errorMessage", "Wrong credentials!");
request.getRequestDispatcher("/Login.jsp").forward(request, response);

//JSP页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<title>User Log in</title>
<%@ include file="PageHeader.html" %>
</head>
<body>
<form action = "LoginServlet" method="POST">
<h3>Sign In</h3><br>
Email: <input type="text" name="email" required value="${email}"><br>
Password: <input type="password" name="pass" required value="${pass}"><br>
<div style="color: #FF0000;">${errorMessage}</div><br>
<input type="submit" name="submit" value="Sign in" id="sButton">

</form>
</body>
</html>
 类似资料:
  • 在我的Web应用程序中,我想实现一个在需要时显示信息/错误消息的系统。例如,servlet检测到一些错误(例如用户未登录),将自定义错误消息添加到会话并将用户重定向到登录页面,负责显示登录页面的JSP也显示该消息。另一个例子,用户成功提交了一些表单,servlet添加了自定义成功消息并重定向到显示成功消息的某个页面。 我的实现方案是:servlet在会话中写入消息,任何页面上包含的一个特殊JSP都

  • 我有2个问题 1)我有一个login.jsp页和索引页。一旦我验证了用户(在servlet ie中),用户将被重定向到index.jsp页面。我用servlet的这条线重定向它 这个过程运行良好。但是当我刷新页面时,我会被重定向回登录页面。另外,我注意到在index.jsp页面上,我得到的名字而不是index.jsp,即我的servlet名称得到displayed.for这样的例子得到代替显示 2

  • 这里我想使用RequestDispatcher从servlet调用jsp页面,问题是在jsp代码中调用java代码没有问题,问题是html代码不起作用 下面是代码: 重定向servlet。爪哇: showReportt_arb。jsp: 在上面的逻辑中,java代码显示在服务器控制台中,但html代码没有显示。请帮我解决这个问题

  • 我有一个带有登录表单的jsp页面,我使用的是servlet,如果用户名和密码正确,servlet会将用户重定向到另一个页面,否则它会再次将用户重定向到登录页面 下面是servlet

  • 问题内容: 我正在编写servlet,以防万一,我将重定向到自定义错误页面,因为这样做是这样的。 在web.xml中 在Servlet中, 但是这里没有显示,我要去哪里出错了,谁能解释一下我? 问题答案: 问题是您捕获了Exception,因此没有Exception将离开您的方法。如果匹配项(相同或相同的子类)离开您的方法,则只会重定向错误页面。 您应该将捆绑包重新扔入例如: 不幸的是,如果我们谈

  • 我有一个名为campaignMaint.java的Servlet,其中有一个doGet和一个doPost,还有一个名为jcampaignMaint.JSP的JSP。在输入URL/campaignMaint?campaign=Treasury时,doGet将数据构建为数组并执行: jcampaignMaint.jsp然后构建一个包含一些可修改字段的表,如下所示: 单击Submit按钮时,HTTP P