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

it2022-05-09  29

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

转载于:https://www.cnblogs.com/CrayzCow/p/7663534.html


最新回复(0)