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

目录

一、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
 * <li>只做一件事情的组件:开根号处理
 *
 */
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
 * <li>只做一件事情的组件:乘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
 * <li>只做一件事情的处理,显示,即往客户端推流
 *
 */
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服务之间的跳转了。

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

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值