请求重定向与请求转发的区别

4 篇文章 0 订阅
3 篇文章 0 订阅
  1. 请求重定向
    客户端行为,response.sendRedirect(),本质上讲等同于两次请求,前一次的请求不会保存,地址栏的URL地址会变

  2. 请求转发
    服务器行为,request.getRequestDispatcher().forword(request,response);是一次请求,转发后请求对象会保存,地址栏的URL地址不会变。

下面的三个页面分别是response.jsp,request.jsp,register.jsp。

在register里acction访问response,而response测试请求重定向到request,URL地址栏变为request.jsp。

测试请求转发URL地址栏依旧为response.jsp。

response.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
    response.setContentType("text/html;charset=UTF-8");//设置响应的MIME类型

    out.println("<h1>response内置对象</h1>");
    out.println("<br>");
//    out.flush();//清空缓冲区的同时,会强制把缓冲区的内容打印到屏幕上

//    response获得的Writer对象是一个PrintWriter对象,他的输出总是在out内置对象前

    PrintWriter outer = response.getWriter();
    outer.println("大家好,我是response对象生成的输出流outer对象");

    //请求重定向
//    response.sendRedirect("request.jsp");
    //请求转发
    request.getRequestDispatcher("../requestDemo/request.jsp").forward(request,response);
%>

request.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>request内置对象</h1>
    <%--解决中文乱码方法一:在获得参数前设置字符集,但无法解决URL传递中文乱码问题--%>
    <%
        request.setCharacterEncoding("utf-8");
        request.setAttribute("password",1234);
    %>
    用户名:<%=request.getParameter("username")%>
    爱好:<%
    if(request.getParameterValues("favorite")!=null){
        String[] favorites = request.getParameterValues("favorite");
        for(int i=0;i<favorites.length;i++){
            out.println(favorites[i]+"&nbsp;&nbsp;");
        }
    }
    %>
    密码:<%=request.getAttribute("password")%><br>
</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>用户注册</h1>
    <hr>
    <form name="regFrom" action="response.jsp" method="post">
        <table style="margin-left: 30%">
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username"><br></td>
            </tr>
            <tr>
                <td>爱好:</td>
                <td>
                    <input type="checkbox" name="favorite" value="read">读书
                    <input type="checkbox" name="favorite" value="music">音乐
                    <input type="checkbox" name="favorite" value="movie">电影
                    <input type="checkbox" name="favorite" value="internet">上网
                </td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="提交"></td>
            </tr>
        </table>
    </form>
    <br>
    <br>
    <%--request的getParameter既可以用post方式来获取,也可以用get方式来获取,即通过URL地址加参数--%>
    <a href="request.jsp?username=lxj">测试URL传参数</a>
    <%--解决中文乱码方法二:修改Tomcat配置文档server.xml--%>
    <%--<Connector port="8080" protocol="HTTP/1.1"--%>
        <%--connectionTimeout="20000"--%>
        <%--redirectPort="8443" URIEncoding="utf-8"/>--%>
    <%--修改之后一定要重启Tomcat服务器--%>
</body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值