zoukankan      html  css  js  c++  java
  • request的setAttribute()怎么用的?

    request.setAttribute()怎么用的?
    JSP1代码
    String [] test=new String[2];
    test[0]="1";
    test[1]="2";
    request.setAttribute("test",test) ;
    response.sendRedirect("jsp2.jsp");

    JSP2代码
    String test[]=(String[])request.getAttribute("test");
    out.print(test);

    为什么JS P2中会找不到test?

    用来在同一个request周期中保存变量使用。比方servlet调用后,推出JSP页面,这是一个request周期,假设在Jsp页面须要servlet中的一些 处理结构,就从request.getAttribute中获取。

    sendRedirect()方法是通过浏览器重定向的,所以第二个JSP页面中获得的request并不是是前一个页面的request(两次请求生成了前后两个不同的 request对象了)。
    用RequestDispatcher接口的forward()方法试试看。

    都在一起使用

    List list = new CommonsDao().getAllCommons();
      request.setAttribute("CommonsList", list);
      request.getRequestDispatcher("View.jsp").forward(request, response);

    request.getAttribute()与request.setAttribute()

    request.getAttribute("nameOfObj")可得到JSP页面一表单中控件的Value。事实上表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出相应它的value。

    而不同页面间传值使用request.setAttribute(position, nameOfObj)时,仅仅会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。

    P.S.:JavaScript与JSP中不能相互传值,由于JavaScript执行在client,而JSP执行在server端。若想使它们之间能够相互传递參数,能够在JSP中设置一个hidden控件,用它的value结合上面所说的使用方法来传递所需的数值。

     

     

     

     

     

     

     

     

     

     

     

     

    request.getRequestDispatcher()是请求转发,前后页面共享一个request

    response.sendRedirect()是又一次定向 前后页面不是一个request

     

     

     

     

     

     

    sendRedirect是通知IE再次提交一个http请求,
    dispatcher是直接转到目的地址,最直接得表现
    应该是dispatcher后的IE地址栏地址是不变的
    回答者:
    request.getRequestDispatcher()是server端跳转
    response.sendRedirect()是client跳转

     

     

     

     

     

    今天在调试一个Servlet程序的时候,报了下面错误!
    java.lang.IllegalStateException: Cannot forward after response has been committed
    依据字面理解的话,意识是在response已经提交后程序不能再一次的跳转!

    研究代码以后发现,是由于前面已经运行过一次request.request.getRequestDispatcher().forward()
    可是后面的request.request.getRequestDispatcher().forward()依旧被运行到了!

    那么非常有理由相信request.request.getRequestDispatcher().forward()跳转本身是不会返回什么,也不会终止程序体的运行!
    程序体后面该运行的还是会运行!

     

     

     

     

    sendRedirect()是请求从定向,和超连接是一个意思,比方你在A页面中写一个request.setAtribute,sendRedirect到B页面,就是说server从A页面中给你一个response,然后你的浏览器再去request到B页面,因为有两次request和response,是不能在B页面取到request.setAtribute里的值,能从地址栏看到url的改变

    request.getRequestDispatcher().forward(request,response)是请求分发器,比方你在A页面中写一个request.setAtribute,request.getRequestDispatcher().forward(request,response)到B页面,那就是说server给你的response是B页面的,而且仅仅有一次request和response,所以是能在B页面取到request.setAtribute里的值,地址栏的url仍然是A页面的

     

     

     

     

     

    request.sendRedirect 与 request.getRequestDispatcher.forward 的差别
    2008-01-20 17:09

    1、forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法仅仅能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法能够重定向到不论什么URL, 由于这样的方法是改动http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变
    2、forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到还有一个实例,而採用sendRedirect方式两者不是同一个application。即參数的传递方式不一样:forward的form參数跟着传递,所以在第二个实例中能够取得HTTP请求的參数。sendRedirect仅仅能通过链接传递參数,response.sendRedirect(“login.jsp?param1=a”)。
    3、sendRedirect可以处理相对URL,自己主动把它们转换成绝对URL,假设地址是相对的,没有一个‘/’,那么Web container就觉得它是相对于当前的请求URI的。比方,假设为response.sendRedirect("login.jsp"),则会从当前servlet 的URL路径下找login.jsp: http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp,假设为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp。而forward不能这样处理相对路径。

     

     

     

     

     

     

     

    hotpetersun - 秀才 二级 8-15 12:43
  • 相关阅读:
    tomcat解压版环境变量配置
    十天冲刺(第二阶段)
    十天冲刺(第二阶段)
    十天冲刺
    十天冲刺第二阶段()
    十天冲刺(第二阶段)
    十天冲刺(第二阶段)
    十天冲刺(第一阶段)
    十天冲刺(第一阶段)
    十天冲刺(第一阶段)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4489844.html
Copyright © 2011-2022 走看看