J2EE/JAVA——实现Servlet页面之间的跳转(实例演示)

1.实现Servlet页面之间跳转方法

(1)利用forward()方法进行转发

        forwarud()方法是向服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后再将这些内容发送给浏览器中。在整个过程中,浏览器并不知道服务器中内容来自哪里,所以地址栏中URL不会改变。而在服务器中,当执行到forward()方法时,Servlet会向统一项目下其他资源(可以是其他Servlet也可以是JSP)发送请求,然后第三方处理后再将第三方结果直接返回给浏览器。

工作原理如图:

代码语法:

request.getRequestDispatcher("其他资源(Servlet或者JSP)").forward(request,response);

(2) 利用SendRedirect()方法进行重定向

sendRedirect()方法就是首先浏览器向Servlet(JSP)发送了请求,然后服务器根据业务逻辑,发送一个状态码,然后浏览器通过这个状态码就能够向这个新的地址发起请求,在新地址的Servlet(JSP)中再次获取想要的资源。注意这两次请求视为两次不同的请求,所以在浏览器的地址栏中可以观察到两次的URL地址不同。

工作原理如图:

代码语法:

 

response.sendRedirect("其他资源的位置(可以使用相对URL地址)");

2.实例演示

以下是一个对数据操作的实例,其中使用到转发进行页面的跳转

 HTML源码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>数字计算</title>
	</head>
	<body>
	这里将进行开根号再乘十的数据处理<br>
	示例中,进行分步骤的处理,三个Servlet来完成工作<br>
	<li> 1 开方
	<li> 2 乘十
	<li> 3显示
	
	<hr>
	<div style="background: #ccc; width:500px;height: 150px;">
	<!-- 注意以下请求的相对路径 -->
		<form action="../operServlet">
			输入原始数字:<br>
			<input type="text" name="count"><br>
			<input type="submit" value="计算">
		</form>
	</div>
	<hr>
	<b> 知识点:</b>
	<li> 转发处理
	<li> 传参
	<li> 数据类型的转换
	</body>
</html>

 接下来是Servlet源码:

首先是第一个Servlet代码,只完成一项工作就是将数据进行开方:

public class OperServlet extends HttpServlet
{
	public void init(){}
	public void doGet(HttpServletRequest request,HttpServletResponse response)
				throws ServletException,IOException {
		//获取请求参数
		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);
		//设置请求上属性的参数
		request.setAttribute("count",str); 
		// 转发给另一个Servlet来处理
		request.getRequestDispatcher("operTwoServlet").forward(request,response);
	}
}

 可以看到代码最后运行一句request.getRequestDispatcher("operTwoServlet").forward(request,response);

这就是将请求转发到其他Servlet(这里是operTwoServlet)进行处理。

接下来是第二个Servlet代码,也只完成了一项工作是将数据乘以10:

public class OperTwoServlet extends HttpServlet
{
	public void init(){}
	public void doGet(HttpServletRequest request,HttpServletResponse response)
				throws ServletException,IOException
	{
		// 获取请求属性上的参数
		String strcount=(String)request.getAttribute("count");
		int count=Integer.parseInt(strcount);
		// 进行乘10处理
		count *= 10;
		// 再次置入请求属性的参数
		request.setAttribute("count",String.valueOf(count));
		// 转发给另一个Servlet来处理
		request.getRequestDispatcher("showServlet").forward(request,response);
	}
}

最后也使用转发,将请求转发到了showServlet中进行处理。

最后一个Servlet也只完成了显示的功能:

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);
	}
}

这里就最后的数据显示到了浏览器中。

结果演示:

在浏览器中输入9,经过数据处理结果应该是30。

 结果正确,说明整个流程实现无误,也可以看到合理使用转发和重定向可以使代码更好地满足高内聚、低耦合的特点。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值