码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-13 23:50:55      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:send   patch   html   urlencode   登录界面   str   get   erro   url   

logincheck.jsp的代码

 
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 处代码可替换为

请求转发的方式:地址栏,发生在服务器端 
        %>
           <jsp:forward page="index.jsp"/>
        <%
或替换为
    request.getRequestDispatcher("login.html").forward(request, response);
 
index.jsp的代码:
如果采用请求转发的方式forward,request在重定向时被消灭了
所以不能用request.getAttribute();方式来获取数据
 
  <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("")都获取不了 
response.sendRedirect("/studyProject/myforward/end2.jsp?name=tomzhang");//可以带参数的
 
<jsp:forward page="" />
1)请求转发,地址栏的url不变
2)可以传递额外的参数
<jsp:param name="" value=""/>
3)request.getAttribute("");//基于请求的request共享
request.getParamter("");//请求转发
4)等同requestDispatcher.forward(url); 
<jsp:forward page="/myforward/end.jsp?age=man">//可以带参数
*使用forward一定要注意url页面的链接,不要使用相对路径;url页面的当前路径其实是第1次请求时的当前路径,所以url页面的链接都应该采用绝对路径!
 
 
 
 

重定向参数传递问题

第一个例子
a.jsp中
<%
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);
}
第二个例子
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跳转页面传参数的过程发现,如果参数中有中文的话,在接收页面无法获取中文参数!
        分析发现,原来是中文参数无法发送到接收页面。
        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=;后面的参数没有内容。需要在发送前处理下才能将参数带过去。
        request.setAttribute("tread_title", “文章标题”);
        tread_title = java.net.URLEncoder.encode(tread_title.toString(),"utf-8"); 
        response.sendRedirect("/thread.jsp?tread_title="+tread_title);
 
 
 
 
 

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

标签:send   patch   html   urlencode   登录界面   str   get   erro   url   

原文地址:http://www.cnblogs.com/CrayzCow/p/7663534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!