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


    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);
     
     
     
     
     
    passion
  • 相关阅读:
    Arrays类总结
    多维数组
    数组
    写一个计算器,要求实现加减乘除功能,能够循环接收收据,通过用户交互实现
    递归
    方法
    函数
    流程控制
    mysql笔记(连接与子查询部分)
    ubuntu下mysql的常用命令
  • 原文地址:https://www.cnblogs.com/youngniu/p/7663534.html
Copyright © 2020-2023  润新知