Servlet页面之间的跳转以及参数传输

Servlet页面之间的跳转以及参数传输,第1张

目录

一、Servlet对象参数之间的作用域

二、servlet与servlet之间的跳转以及参数传输


一、Servlet对象参数之间的作用域

        1.request-Request对象

                1)域范围:在当前请求的链接有效

                2)存属性:setAttribute(String attName, Object attValue) 键值对作为一个有对象的属性

                3) 取值: getAttribute("attName"); 获得所有属性的名称

        2.session-HttpSession对象

                1)域范围:对于(一次请求)请求转发,或是(两次请求)重定向,seesion的作用域都是有效的。

                2)   seesion域对象:session表示一次会话,一次会话中的数据是共享的,这时session作为域对象的存在,可以通过setAttribute(name,value)方法来向域中添加数据,同时也可以通过getAttribute(name)方法从域中获取数据,removeAttribute(name)从域中移除数据。

                3)两个不同session之间的数据是不可以共享的。

        3.application-ServletContext对象

                1)ServletContext的生命周期:从创建开始,到服务器关闭

                2)ServletContext作用域:可以将它看成一个公共空间,所有的客户都可以从这个空间里读数据,取数据,删除数据,修改数据,这是一个所有人都有权限的空间。

二、servlet与servlet之间的跳转以及参数传输

        Servlet和Servlet之间的跳转,我们可以通过两种方法来实现,一种是请求转发,一种是请求重定向,请求转发我们用的是ResquestDispatcher(对象).forward()方法,重定向我们使用的是HttpServletResponse(对象).sendRedirect()方法。请求转发服务器只会对servle发出一次请求,剩下的都是在servle内部进行任务的传输交接,而重定向则是服务器会对servlet进行两次或者多次的请求,下面放出两张图可以帮助大家理解一下

这里再给大家列举一个请求转发的样例,实现的是将输入数据进行开根号再乘十的处理。

这是第一个servlet服务

package requestParam;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

/**
 * @author fhzheng
 * 
  • 只做一件事情的组件:开根号处理 * */ public class OperServlet extends HttpServlet { public void init(){} public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=utf-8"); //获得控制台打印权限 PrintWriter out=response.getWriter(); //获取请求参数 String strcount=request.getParameter("count"); int count = (int)Double.parseDouble(strcount); //int count = (int)Integer.parseInt(strcount); //进行开根号处理 count = (int)Math.sqrt(count); String str=String.valueOf(count); //打印第一个servlet处理以后的数字 System.out.println("第一个servlet处理以后的数据"+str); //设置请求上属性的参数 request.setAttribute("count",str); // 转发给另一个Servlet来处理 request.getRequestDispatcher("operTwoServlet").forward(request,response); } }
  • 这是第二个Servlet服务

    package requestParam;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    
    /**
     * @author fhzheng
     * 
  • 只做一件事情的组件:乘10 * */ public class OperTwoServlet extends HttpServlet { public void init(){} public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { //设置输出格式 response.setContentType("text/html;charset=utf-8"); //获得控制台打印权限 PrintWriter out=response.getWriter(); // 获取请求属性上的参数 String strcount=(String)request.getAttribute("count"); int count=Integer.parseInt(strcount); // 进行乘10处理 count *= 10; // 再次置入请求属性的参数 request.setAttribute("count",String.valueOf(count)); //打印第二个servlet处理以后的数字 System.out.println("第二个serv处理以后的数据:"+count); // 转发给另一个Servlet来处理 request.getRequestDispatcher("showServlet").forward(request,response); } }j
  •  这是第三个Servlet服务

    package requestParam;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    
    /**
     * @author fhzheng
     * 
  • 只做一件事情的处理,显示,即往客户端推流 * */ public class ShowServlet extends HttpServlet { public void init(){} public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); //获取请求属性上的参数 String strcount=(String)request.getAttribute("count"); String prefix = "开方十乘处理后的结果是:"; out.println(prefix+strcount); System.out.println("第三个servlet服务处理以后的最终数据"+strcount); } }
  • 我们启动服务器运行以后,看看页面

     

     此时页面和终端都是因为第一次启动,数据都是null,服务器已经启动,我们可以通过网址直接进入我们服务目录下的dataOperation文件下的index.html文件中,进行数据的输入

     这里我们输入一个数据4以后,让我们看看网页和console端的输出

    网页通过第三个Servlet服务显示出了经过前两个Servlet服务处理以后的数据,在console端,我们通过插旗的方法,把数据在每个Servlet服务中处理以后的数据显示出来 ,观察服务器运行过程。那么这三个Servlet服务器又是怎么进行数据的传输呢

    我们可以看到,在第一个第二个Servlet服务的代码中,都有这么一行代码

    // 转发给另一个Servlet来处理
    
    request.getRequestDispatcher("operTwoServlet").forward(request,response);

    我们调用request的getRquestDispatcher对象,再调用Dispathcher的forward请求转发的方法,我们将这个Servlet的request和response打包发给另外一个Servlet服务进行剩下的处理,这样就完成了不同Servlet服务之间的数据交接。

    这基本就是不同Servlet服务之间的跳转了。

    这次分享就到这里了,学习路上,诸君共勉,下次见。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/langs/726396.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-04-26
    下一篇 2022-04-26

    发表评论

    登录后才能评论

    评论列表(0条)

    保存