【问题标题】:Why is my code not printing proper result when I am using requestDispatcher.forward function?当我使用 requestDispatcher.forward 函数时,为什么我的代码没有打印正确的结果?
【发布时间】:2020-10-25 15:14:17
【问题描述】:

我正在尝试学习requestDispatcher.forward 函数。所以我编写了一个 Html 代码,然后当我们单击 HTML 页面上的提交按钮时,它会转到 webservlet1。在那里我使用转发功能去 webservlet2。

请看下面的代码

web.html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Login Page</title>
<style type="text/css">
div{
    top:10px;
    left:100px;
    width:250px;
    height:120px;
    border: 2px solid green;
    border-color:green;
    background-color:yellow;
    
    }
</style>
<script type="text/javascript">
function loginValidation(){
    var FirstName=document.LoginForm.fname.value;
    var LastName=document.LoginForm.lname.value;
    if(FirstName=="" || LastName=""){
        alert("Field cannot be empty");
        return false;
    }
}
</script>
</head>
<body>
<div>
<form name="LoginForm" action="welcomeservlet1" onsubmit="return loginValidation()" method="post">
<table>
<tr><td>First Name</td><td><input type="text" name="fname"/></td></tr>
<tr><td>Last Name</td><td><input type="text" name="lname"/></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="login"/></td></tr>
</table>
</form>
</div>
</body>
</html>

welcomeservlet1 的代码

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            PrintWriter out=response.getWriter();
            String fname=request.getParameter("fname");
            String lname=request.getParameter("lname");
            String FullName=fname+" "+lname;
            FullName=FullName.toUpperCase();
            out.println("<h1><font color=green> Welcome "+FullName+"</font></h1>\n");
            request.setAttribute("Fullname",FullName);
            RequestDispatcher requestdispatcher=request.getRequestDispatcher("welcomeservlet2");
            requestdispatcher.forward(request, response);
            out.println("<br>Thank you");
        }
    
    }

WelcomeServlet2 的代码

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            String Name=request.getAttribute("Fullname").toString();
            PrintWriter out=response.getWriter();
            out.println("Your full name is "+Name+"\n");
            out.println("<br>The name length is "+Name.length());
        }

代码的输出是

你的全名是Muskan AGARWAL 名称长度为 12

为什么代码没有打印我在welcomeservlet1 代码中输入的内容?它没有打印“Welcome Muskan Agarwal”。为什么不打印?

【问题讨论】:

    标签: java html servlets forward requestdispatcher


    【解决方案1】:

    根据 servlet 规范,forward 只有在没有输出提交给客户端时才应该被调用。如果您在输出已经提交给客户端时尝试forward,则会抛出IllegalStateException

    你为什么不面对IllegalStateException

    您没有遇到此异常,因为您的代码中尚未提交输出。如果你把response.flushBuffer();放在requestdispatcher.forward(request, response);之前,你会遇到这个异常。

    最后……为什么“欢迎……”没有打印出来?

    这是因为在forward 之前,任何未提交的输出都被简单地丢弃了。

    【讨论】:

    • 感谢 Arvind 的回答。
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 2019-03-12
    • 2019-11-29
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多