当前位置:编程学习 > JAVA >>

熟知request

 

request的生命周期很短,只活动于浏览器向服务器的一次请求中,当请求执行完,当前对象也将被销毁掉。

        request经常用来获取浏览器页面上输入的表格信息——用户名、密码诸如此类也可以在servlet中setAttribute("索引名","索引值")来存储一对object类型的键值对,通过forward或include方法实现请求跳转,区别只是前者不将response中的输出流信息输出,后者则进行输出。由于跳转还是在同一个请求中进行的,request对象并未被销毁,所以能从跳转到的页面中得到键值对中的值。

Java代码 

/**

     * HelloServlet中的请求处理方法

     */ 

    protected void service(HttpServletRequest req, HttpServletResponse resp) 

            throws ServletException, IOException { 

        super.service(req, resp); 

        resp.setContentType("text/html;charset=gbk"); 

        resp.setCharacterEncoding("gbk"); 

        req.setCharacterEncoding("gbk"); 

        //得到用户发送请求时输入的参数 

        String username = req.getParameter("username"); 

        req.setAttribute("username", username); 

        req.getRequestDispatcher("redirect.jsp").forward(req, resp); 

        //resp.sendRedirect("redirect.jsp"); 

    } 

        

 

    登录界面:当点击登录按钮时,请求被服务器接收,servlet进行处理,将username保存,然后跳转到redirect.jsp中。

 

       

    跳转界面:跳转到redirect.jsp中,并在页面上显示出了用户名,值得注意的一点,地址栏并没有指向redirect.jsp,间接的证明所有操作都在一个请求中。

   

 

     

    firebug:很明显,服务器只收到一个采用post方法的请求。

        至于request的生命周期是否只在一个请求中,并没有得到验证。那么如果在两个请求中完成上面的操作,是不是还会得到username呢?

Java代码 

/**

     * HelloServlet中的请求处理方法

     */ 

    protected void service(HttpServletRequest req, HttpServletResponse resp) 

            throws ServletException, IOException { 

        super.service(req, resp); 

        resp.setContentType("text/html;charset=gbk"); 

        resp.setCharacterEncoding("gbk"); 

        req.setCharacterEncoding("gbk"); 

        //得到用户发送请求时输入的参数 

        String username = req.getParameter("username"); 

        req.setAttribute("username", username); 

        //req.getRequestDispatcher("redirect.jsp").forward(req, resp); 

        //重定向 

        resp.sendRedirect("redirect.jsp"); 

    } 

        

 

        

        1、用户名显示为"null",说明request的生命周期是一次请求;2、地址栏指向了redirect.jsp;3、firebug中显示出了两次请求,一次是我指定的"post",另一次应该是默认的"get",response将重定向的信息返回给浏览器,浏览器再进行第二次请求,此时第一个request对象被销毁,所以再也得不到它携带的信息了。

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,