栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



	
		
		数字计算
	
	
	这里将进行开根号再乘十的数据处理
示例中,进行分步骤的处理,三个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。

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

     

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/843088.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号