response.sendredirect,responsesendRedirect中文参数
response.sendredirect为什么跳转不了
1、在使用response.sendRedirect时,前面不能有HTML输出。
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,
一般在8K(我是说JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,
那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
如果报错说,“一些信息已经被submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的HTML输出了。
2、在response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。
既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
%@ include file="/page/checkLogin.jsp" %这个放在要验证的页面的第一句。
求教: response.sendRedirect(""); 的用法!!
1、首先第一步要知道response和request一样都是jsp内置对象,request是获取用户的请求,response处理用户请求。sendRedirect()函数的作用是重定向网页,向浏览器发送一个特殊的Header,然后由浏览器来做重定向,转到指定的页面。
2、接着就是sex.jsp,注意的是有一个下拉列表和提交按钮确定,选择“男”,就跳转到male.jsp,选择“女”就跳到female.jsp,然后中间通过sex_action.jsp进行重定向。
3、然后就是sponse.sendRedirect(""); 地址栏会改变,request作用域丢失。
这时候注意的是reqeust.getRequestDispatcher("").forward(request, response);转发request作用域保存即可。
4、最后就是次请求一次响应,这时候注意的是request依然存在,但是重定向是请求两次的,所以作用域丢失了。转发则反之即可。这就是?response.sendRedirect(""); 的用法。
关于response.sendRedirect 为什么这么说
response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。什么是“页面处理完成后,才会有实际的动作。”? 意思就是在一个请求结束之后.... 假设在A页面设置 request.setAttribute("username","zhangsan"); 那么在 request.sendredirect 转向的B页面中是不能通过request.getAttribute("username"); 来得到 zhangsan 的。。。 因为上个页面请求已经结束,也就是 request这个已经消亡了。。,所以也就得不到 zhangsan的值了。。 不用那response.sendRedirect 而用 request.getDispatcherHeader("B.jsp").forward(request,response);在B页 面就可以所问到 zhangsan 就是这样。。
“response.sendRedirect”跳转不成功怎么办?
如果你jsp页面是在项目的page目录下建议如下写\x0d\x0aresponse.sendRedirect(request.getContextPath()+"/page/index.jsp");\x0d\x0a其他类似。\x0d\x0a\x0d\x0a你的页面是在根目录下面\x0d\x0aresponse.sendRedirect(request.getContextPath()+/index.jsp");
response.sendRedirect跳转不成功!路径也没有错的
如果你jsp页面是在项目的page目录下建议如下写
response.sendRedirect(request.getContextPath() + "/page/index.jsp");
其他类似。
你的页面是在根目录下面
response.sendRedirect(request.getContextPath() + /index.jsp");
response对象的sendRedirect方法的功能是什么?常在什么情况下使用?
response.sendRedirect 的功能是地址重定向(页面跳转)
1.response.sendredirect(url);
新的页面并不能处理旧页面的pagecontext(request,response,...)对象,所以你用request.getparameter(ff)企图调用原页面 request对象的参数,得到的自然是null
2.getservletcontext().getrequestdispatcher(url).forward(request,response);
forward函数已经把原页面的request,response对象传入新的页面,因此这新旧页面拥有相同的 request,response对象。request.getparameter(ff)就可以得到相应的值
3.servletcontext.getrequestdispatcher 路径必须是相对上下文的绝对路径 servletrequest.getrequestdispatcher 可以是相对也可以是绝对
服务器端进行转向的4种方法:
1. servletcontext的getrequestdispatcher()
2. servletcontext的getnameddispatcher()
3. servletrequest的getrequestdispatcher()
4. servletresponse的sendredirect()进行转向。
1.2.3 = forward() 4. sendredirect()
使用forward方法,因为这些这样比较高效。只有在forward方法不能使用时,再使用servletresponse的sendredirect()方法。
jsp:fordward与 sendredirect 方法的比较
虽然 jsp:fordward与 sendredirect 方法,都可以将浏览器浏览的网页,重导至另一个网页,但是两者在原理上是不太相同。
a. jsp:fordward : 动作是利用伺服端,将资料输出至缓冲区的机制,在前一个网页尚未输出到客户端前,取消资料的输出,然后输出另一个网页的资料,达到重导浏览器的效果。 优点: 两网页间可以分享 request 对象内的变量。
b. sendredirect : 动作是透过 http 协议的 header , 对浏览器下达重导指令,因此,不牵涉到服务器端缓冲区的问题。 不过由于 sendredirect 方法作用于客户端,所以重导前后网页无法分享存在于 request 对象内的变量。 solution: response.sendredirect(“sendredirect.htm?name=sparkwue-mail=spark.wu@cobra-tech.com”)
直观一点: response.sendredirect(url); 对服务器的响应进行重定向。当server作出响应后,client客户端的请求的生存周期就终止了。这个时候再用request.getparameter()或request.getattribute()得到的只能是null。 getservletcontext().getrequestdispatcher(url).forward(request,response); 它则可以认为是对client的请求(request) 进行传递,在server没有进行响应前,即没有response一直可以进行传递--重定向。网友:alexlovejava 前者是的跳转是的客户端,后者是在服务器端,后者在跳转的时候可以传request对象,前者只能通过?穿参数,后者是forword(),这两者在流转的时候url的路径不一样,在ie地址栏显示的路径也不一样,