java组件跳转_Java Web之Web组件之间的跳转方式

方法有3种:

b63debd0404d5c65be0313b76341dfc0.png

第一种:请求转发

21aa1cec928c76804a9e285021a5b782.png

我们来写两个类,一个是Servlet1一个是Servlet2

packagemain.com.vae.forward;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.PrintWriter;

@WebServlet("/forward/s1")public class Servlet1 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.setContentType("text/html;charset=utf-8");

PrintWriter out=resp.getWriter();

out.print("1开始");

System.out.println("1开始");

req.getRequestDispatcher("/forward/s2").forward(req,resp);

out.print("1结束");

System.out.println("1结束");

}

}

packagemain.com.vae.forward;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.PrintWriter;

@WebServlet("/forward/s2")public class Servlet2 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.setContentType("text/html;charset=utf-8");

PrintWriter out=resp.getWriter();

out.print("2开始");

System.out.println("2开始");

out.print("2结束");

System.out.println("2结束");

}

}

我们可以看到,两个Servlet之间使用请求转发的关键代码就是

req.getRequestDispatcher("/forward/s2").forward(req,resp);

我们看看浏览器访问的结果

1da97249ad903715e8dee06c45ae4799.png

再看看Idea的输出栏

da89950d66517c174d321fa90a36b0ac.png

发现了一个问题了没?我们Servlet1中写的响应,就是out对象这个PrintWrite,这个响应没有在浏览器中展示,只有Servlet2的响应存在!

这就是请求转发的一个特点,最终响应给浏览器的由Servlet2决定

其他的特别不多介绍了。

第二种:URL重定向

5a51543b2ab27f0c591d9c7855cc0d8c.png

请求转发是一次请求,URL重定向其实是两次请求,看图

7e048e9d3a12521174587b0695309c73.png

把刚才讲请求转发的两个类复制一下,创建一个redirect包,放进去

packagemain.com.vae.redirect;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.PrintWriter;

@WebServlet("/redirect/s1")public class Servlet1 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.setContentType("text/html;charset=utf-8");

PrintWriter out=resp.getWriter();

out.print("1开始");

System.out.println("1开始");//这个是URL重定向,我可以指向/redirect/s2,也可以指向跨域的网址

resp.sendRedirect("/redirect/s2");//resp.sendRedirect("http://www.baidu.com");

out.print("1结束");

System.out.println("1结束");

}

}

packagemain.com.vae.redirect;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.PrintWriter;

@WebServlet("/redirect/s2")public class Servlet2 extendsHttpServlet {

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

resp.setContentType("text/html;charset=utf-8");

PrintWriter out=resp.getWriter();

out.print("2开始");

System.out.println("2开始");

out.print("2结束");

System.out.println("2结束");

}

}

浏览器打/redirect/s1 运行看看结果

0b2a78ff82e43b18168ddee4d1e60b78.png

直接跳到s2了,URL重定向其实就是把一个URL贴到浏览器的框里敲回车,所以我打百度 也是可以的,所以URL重定向支持跨域访问

第三种:请求包含

4c0c86567a1522ebced7af082a151088.png

这个貌似不怎么用,代码也是很简单的,其它的不需要换代码,换这一行就够了

req.getRequestDispatcher("/include/s2").include(req,resp);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值