转发和重定向

当servlet处理完请求之后,为浏览器做出响应
以前只能使用响应流来完成,使用响应流拼接html非常麻烦
我们可以准备好一张html页面,在servlet处理完请求后,直接跳转到这个html页面就可以了.
使用转发和重定向技术来实现.

转发

	/*
	 * 
	 * 转发:
	 * 	语法:
	 * 	1.取得转发对象 rd
	 * 		RequestDispatcher rd = request.getRequestDispatcher("");
	 * 		方法中的参数,就是我们要转发到的资源的路径
	 * 		访问的路径的写法:http://localhost:8080/1_servlet4/index.html
	 * 		我们在应用路径的时候,习惯于使用 /项目名开头的绝对路径  
	 * 			标准绝对路径的写法为:/1_servlet4/index.html
	 * 			在转发操作中,使用的虽然是绝对路径,但是是一种特殊的绝对路径,前面不加/项目名 这种绝对路径也叫做内部路径
	 * 			转发:/index.html
	 * 
	 * 	2.通过转发对象,实现转发操作
	 * 		rd.forward(request, response);
	 * 
	 * 
	 *  总结:
	 *  	转发后,路径为当前servlet的路径 (转发后维持路径不变)
	 */
	
	//1.转发到一个普通的html页面 比如转发到根路径下的html
	//创建转发对象
	/*RequestDispatcher rd = request.getRequestDispatcher("/index.html");
	//实现转发操作
	rd.forward(request, response);*/
	
	//在实际项目开发中,以上两部可以合并为一步
	//request.getRequestDispatcher("/index.html").forward(request, response);
	
	
	
	
	//2.转发到WEB-INF下的资源
	/*
	 * 以转发的形式,能够访问到WEB-INF下的资源
	 * 在解析原理之前,可以这样来记
	 * 以前之所以访问不到,是因为我们是以浏览器地址栏敲路径的形式来访问,地址栏上会出现WEB-INF这几个字符
	 * 我们通过转发的形式,地址栏仍然为当前servlet,没有出现WEB-INF这几个字符,所以能够访问到
	 * 
	 */
	//request.getRequestDispatcher("/WEB-INF/html/index.html").forward(request, response);
	
	
	//3.转发到另一个servlet
	/*
	 *   /myServlet2.do
	 *   转发到另一个servlet的路径就是url-pattern
	 */
	request.getRequestDispatcher("/myServlet2.do").forward(request, response);

重定向

/*
	 * 重定向:
	 * 	语法:
	 * 		response.sendRedirect("");
	 * 		参数:跳转的路径
	 * 		重定向的路径的写法,为传统的绝对路径的使用方式  前面必须加 /项目名
	 * 
	 * 总结:
	 * 	 重定向后,浏览器地址栏的路径为新路径,为重定向后资源的路径
	 * 	与转发最大的不同就在跳转后  地址栏路径上
	 * 
	 */
	
	//1.重定向到一个普通的html页面
	//response.sendRedirect("/1_servlet4/index.html");
	
	
	//2.重定向到WEB-INF下的资源
	/*
	 * 使用重定向访问不到WEB-INF下的资源
	 * 因为路径为新 路径,地址栏上会出现WEB-INF这几个字符,所以访问不到
	 * 转发是唯一能够访问到WEB-INF下的资源的方式
	 */
	//response.sendRedirect("/1_servlet4/WEB-INF/html/index.html");
	
	
	//3.重定向到另一个servlet
	response.sendRedirect("/1_servlet4/myServlet4.do");

转发原理

在这里插入图片描述
全程是一次请求和一次响应,地址栏显示的路径是最后一次请求的路径,为什么WEB-INF下的资源通过转发可以访问到,因为是由服务器内部资源访问的,也就是说WEB-INF只接受由服务器内部资源的跳转,如果通过浏览器,WEB-INF下的资源是受保护的

重定向原理

在这里插入图片描述
全程是两次请求和两次响应,地址栏显示的路径是最后一次请求的路径,所以地址栏的路径会发生变化。

转发凸显出,访问一个servlet,servlet处理完请求之后,由servlet帮你找到指定资源
重定向凸显出,访问一个servlet,servlet处理完请求之后,会将资源的访问路径给你返回,你拿着这个路径,再发一次请求,再找到指定的资源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值