前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重定向与请求转发的区别及应用

重定向与请求转发的区别及应用

作者头像
codeniu
发布2022-02-25 13:48:24
6760
发布2022-02-25 13:48:24
举报
文章被收录于专栏:codeniu

logincheck.jsp的代码

代码语言:javascript
复制
if(doc.toString() != null){//id正确,取出数据库中的密码进行验证
            String dbPwd = doc.getPassword();
            if(dbPwd.equals(pwd)){//密码正确,跳转到主页面           
                                
                request.setAttribute("pwd", pwd);
                response.sendRedirect("index.jsp");//1
                                
            }else{//密码错误,返回登陆页面,采用重定向的方式,提示用户密码错误          
                request.setAttribute("id", id);
                request.setAttribute("pwd", pwd);
                request.setAttribute("role", role);
                response.sendRedirect("login.jsp");
                //request.getRequestDispatcher("login.html").forward(request, response);
             }
        }else{//id错误,保存用户信息,返回登录界面
        
        }
     %>

1 处代码可替换为

代码语言:javascript
复制
        %>
           <jsp:forward page="index.jsp"/>
        <%

或替换为

代码语言:javascript
复制
    request.getRequestDispatcher("login.html").forward(request, response);

请求转发的方式:地址栏,发生在服务器端

index.jsp的代码:

如果采用请求转发的方式forward,request在重定向时被消灭了

所以不能用request.getAttribute();方式来获取数据

代码语言:javascript
复制
  <body>
    This is my JSP page. <br>
    <%
        String pwd = (String)request.getAttribute("pwd");
     %>
     <%=pwd %>   
  </body>

response.sendRedirect(url);与<jsp:forward page="url">的区别

response.sendRedirect(url)

1)重定向,不转发请求,地址栏的url已改变

2)request.getAttribute(""),request.getParamter("")都获取不了

代码语言:javascript
复制
response.sendRedirect("/studyProject/myforward/end2.jsp?name=tomzhang");//可以带参数的
<jsp:forward page="" />

1)请求转发,地址栏的url不变

2)可以传递额外的参数

代码语言:javascript
复制
<jsp:param name="" value=""/>

3)request.getAttribute("");//基于请求的request共享

代码语言:javascript
复制
request.getParamter("");//请求转发

4)等同requestDispatcher.forward(url);

代码语言:javascript
复制
<jsp:forward page="/myforward/end.jsp?age=man">//可以带参数

*使用forward一定要注意url页面的链接,不要使用相对路径;url页面的当前路径其实是第1次请求时的当前路径,所以url页面的链接都应该采用绝对路径!

重定向参数传递问题

第一个例子

a.jsp中

代码语言:javascript
复制
<%
int x = 5;
response.sendRedirect("error.jsp?abc="+x);
%>
b.jsp中
int a;
if(request.getParameter("abc")!=null){
a=new Integer(request.getParameter("abc")).intValue();
out.println("a="+a);
}

第二个例子

代码语言:javascript
复制
a.jsp
message = "密码正确";    
message = java.net.URLEncoder.encode(message.toString(),"utf-8");设置message的编码格式以便能够传到地址栏
response.sendRedirect("index.jsp?message="+message+"&role="+Integer.toString(role));多个参数
b.jsp
<%
 String message = request.getParameter("message"); 取值的request。getParamter("");默认为string类型
 int role = Integer.parseInt(request.getParameter("role"));
 %>
<%=role %>
<%=message %>

response.sendRedirect无法传递中文参数的问题

今天在处理用 response.sendRedirect跳转页面传参数的过程发现,如果参数中有中文的话,在接收页面无法获取中文参数!

分析发现,原来是中文参数无法发送到接收页面。

代码语言:javascript
复制
        request.setAttribute("tread_title", “文章标题”);
        response.sendRedirect("/thread.jsp?tread_title="+tread_title);

在thread.jsp用request.getParameter("tread_title");获取到的值为null;查看才发现,请求中没有将参数的值带过来,只带了个参数的名称:http://www.crowdwork.com:8080/myweb/thread.jsp?tread_title=;后面的参数没有内容。需要在发送前处理下才能将参数带过去。

代码语言:javascript
复制
        request.setAttribute("tread_title", “文章标题”);
        tread_title = java.net.URLEncoder.encode(tread_title.toString(),"utf-8"); 
        response.sendRedirect("/thread.jsp?tread_title="+tread_title);

这样处理后,发送的请求变成了:http://www.crowdwork.com:8080/myweb/thread.jsp?tread_title=文章标题;这样就可以在thread.jsp用request.getParameter("tread_title";);获取参数的值了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-10-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • logincheck.jsp的代码
    • 1 处代码可替换为
    • response.sendRedirect(url);与<jsp:forward page="url">的区别
    • 重定向参数传递问题
    • response.sendRedirect无法传递中文参数的问题
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档