标准动作 2018-01-08

2018-01-08  本文已影响0人  pluss

<jsp:forword>标准动作

总结

  1. 功能是将请求转发给web应用中的其他资源,但是需要注意这个标签之后的内容不会再执行,而且之前写进响应的内容会被清空。
  2. 用法:
    -- 不加参数
    <jsp:forword page="" />
    -- 加参数
    <jsp:forward page="a.jsp">
    <jsp:param value="aaa" name="login_name"/>
    </jsp:forward>

《Head First Servlets & JSP》P413

<jsp:forword>标准动作,可以从一个jsp转发到web应用中的任何其他资源
示例:

hello.jsp页面
<title>welcome</title>
</head>
<body>
welcome to our page!
<%
    if(request.getParameter("userName")==null){
%>
        <jsp:forward page="handleIt.jsp" />
<%   //如果userName为null,停在这里,将整个请求转给别人,
        //这个页面的任何内容都不会出现在响应里
    }
%>
Hello ${param.userName}
</body>
</html>
handleIt.jsp页面
<title>login</title>
</head>
<body>
We're sorry... you need to login again.
<form action ="hello.jsp" method="get">
    Name:<input name="userName" type="text">
    <input  type="submit" value="login">
</form>
</body>
</html>
访问hello.jsp,因为userName为null所以将请求转发到handelIt.jsp页面
handelIt页面将表单提交给hello.jsp

利用<jsp:forword>,响应缓冲区会在转发之前清空

发生转发时,请求转发到的目标资源首先会清空响应缓冲区!
意思就是转发前写到响应的所有内容都会清掉。

如果在请求转发之前就已经提交了响应,要转发时就会出现异常。

hello.jsp页面
<title>welcome</title>
</head>
<body>
welcome to our page!
<%
    out.flush();
%>
<%
    if(request.getParameter("userName")==null){
%>
        <jsp:forward page="handleIt.jsp" />
<%   
    }
%>
Hello ${param.userName}
</body>
</html>

out.flush()输出了缓存区中内容 接下来容器看到要转发,啪!出现异常
上一篇 下一篇

猜你喜欢

热点阅读