web组件之间的跳转

web组件之间的跳转

复习: 此内容在我上篇博客有.
Http 共享数据的传递:         
              HttpServletRequst是获取当前浏览器访问的页面并通过某个提交或事件功能get或post的方式提交的数据,此数据只能此Servlet类中使用.如果此Servlet在跳转其他页面或其他Servlet类无法获取此数据.

解决方法:
①:CookieSession


web组件之间的跳转
三种类型
1):请求转发:(forward)
语法:
       request对象.getRequestDispatcher(String path).forward(request,response);

请求转发的特点:
    1):浏览器地址栏路径没变,依然是AServlet的资源名称.
    2):只发送了一个请求.
    3):共享同一个请求,在请求中共享数据.
    4):最终的响应输出由BServlet来决定.
    5):只能访问当前应用中的资源,不能跨域跳转.
    6):可以访问WEB-INF中的资源.

代码结构

代码演示:

/**
 * web组件之间的跳转
 * ①请求转发(forward)
 * @author AfricaYoung
 * @Date 2016-08-15
 */
@WebServlet("/forward/a")
public class ForwardServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
		
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//此处测试跳转后值可否有传递
		String name = req.getParameter("name");
		System.out.println("1"+name);
		//请求转发(forward)
		req.getRequestDispatcher("/forward/b").forward(req, resp);
	}
}

/**
 * web组件之间的跳转
 * ①请求转发(forward)
 * @author AfricaYoung
 * @Date 2016-08-15
 */
@WebServlet("/forward/b")
public class GoalServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//接收数据
		String name = req.getParameter("name");
		System.out.println("2"+name);
		//设置响应格式
		resp.setContentType("text/html;charset=utf-8");
		//获取打印流
		PrintWriter out = resp.getWriter();
		out.print("爆炸!");
		//关闭流
		out.close();
	}
}

演示效果:


2):URL重定向:(redirect)
    AServlet操作完毕之后,重定向到BServlet,继续完成余下的功能.
语法:
    response对象.sendRedirect(String path);
    参数:path,表示目标资源名称.

URL重定向的特点:
    1):浏览器地址栏路径发送变化,变成Servlet2的资源名称.
    2):只发送了两个请求.
    3):因为是不同的请求,所以不能共享请求中的数据.
    4):最终的响应输出由Servlet2来决定.
    5):可以跨域访问资源.
    6):不可以访问WEB-INF中的资源.

代码演示:

/**
 * web组件之间的跳转
 * ②URL重定向(redirect)
 * @author AfricaYoung
 * @Date 2016-08-15
 */
@WebServlet("/redirect/a")
public class RedirectServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//获取http传入的值
		String name = req.getParameter("name");
		System.out.println("1"+name);
		//URL重定向  
		resp.sendRedirect("/dowork/redirect/b");
	}
}

/**
 * web组件之间的跳转 ②URL重定向(redirect)
 * 
 * @author AfricaYoung
 * @Date 2016-08-15
 */
@WebServlet("/redirect/b")
public class GoalServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//测试下看是否能获取到值
		String name = req.getParameter("name");
		System.out.println("2"+name);
		//设置响应格式
		resp.setContentType("text/html;charset=utf-8");
		//获取打印流
		PrintWriter out = resp.getWriter();
		out.print("这就是URL的重定向");
	}
}

演示效果:


请求转发和URL重定向的选择?
   1:若需要共享请求中的数据,只能使用请求转发.
   2:若需要访问WEB-INF中的资源,只能使用请求转发.
   3:若需要跨域访问,只能使用URL重定向.
   4:请求转发可能造成表单的重复提交问题.
   5:其他时候,任选.


3):请求包含:(include):到jsp说



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值