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

J2EEJAVA——实现Servlet页面之间的跳转(实例演示),第1张

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源码:



	
		
		数字计算
	
	
	这里将进行开根号再乘十的数据处理
示例中,进行分步骤的处理,三个Servlet来完成工作
  • 1 开方
  • 2 乘十
  • 3显示
    输入原始数字:


    知识点:
  • 转发处理
  • 传参
  • 数据类型的转换
  •  接下来是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。

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

     

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

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

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

    发表评论

    登录后才能评论

    评论列表(0条)

    保存