Web——Request转发和Response重定向

• Request请求转发

	○ 请求转发
		§ 请求转发(forward):一种在服务器内部的资源跳转方式
		§ 
	○ 实现方式:
		§ request.getRequestDispatcher("资源B路径").forward(request,response);
	○ 请求转发资源间共享数据:使用Request对象
		§ void setAttribute(String name,Object object)存储数据到request域中
		§ Object getAttribute(String name)根据key,获取值
		§ void removeAttribute(String name)根据key,删除键值对
	○ 请求转发的特点:
		§ 浏览器地址栏路径不发生变化
		§ 只能转发到当前服务器的内部资源
		§ 一次请求,可以再转发的资源间使用request共享数据
@WebServlet("/req5")
public class RequestDemo5 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo5....");

        //存储数据void setAttribute(String name, Object object)
        request.setAttribute("msg", "hello");

        //请求转发
        request.getRequestDispatcher("/req6").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}


@WebServlet("/req6")
public class RequestDemo6 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo6...");

        //删除数据
        //request.removeAttribute("msg");

        //获取数据Object getAttribute(String name)
        Object msg = request.getAttribute("msg");
        System.out.println(msg);


    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

执行过程:
运行tomcat

在这里插入图片描述

	点击链接

在这里插入图片描述

输入url 按回车

在这里插入图片描述

在这里插入图片描述

• Response

• Response设置响应数据功能介绍
	○ 响应数据分为3个部分:
		§ 响应行:HTTP/1.1 200 OK
			□ Voids etStatus(intsc)设置响应状态码
		§ 响应头:Content-Type:text/html
			□ Void setHeader(String name,String value):设置响应头键值对
		§ 响应体:<html><head></head><body></body></html>
			PrintWritergetWriter()获取字符输出流
			ServletOutputStreamgetOutputStream()获取字节输出流
• Response完成重定向
	○ 重定向(Redirect):一种资源跳转方式
		
	○ 实现方式
		§ void setStatus(int sc)
			□ response.setStatus(302);
		§ void setHeader(String name,String value)
			□ response.setHeader("location","/request-demo/resp2");
	○ 简化实现重定向的方式
		§ response.sendRedirect("/request-demo/resp2");
	○ 重定向的特点
		§ 浏览器地址栏路径发生改变
		§ 可以重定向到任意位置的资源(服务器内部、外部均可)
		§ 两次请求,不能在多个资源使用request共享数据
	○ 路径问题
			□ 浏览器使用:需要加虚拟目录(项目访问路径)
			□ 服务端使用:不需要加虚拟目录
@WebServlet("/resp1")
public class ResponseDemo1 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp1...");

        //重定向
        //1.设置响应状态码 void setStatus(int sc)
        /*response.setStatus(302);
        //2.设置响应头 void setHeader(String name, String value)
        response.setHeader("location", "/request-demo/resp2");*/

        //简化方式完成重定向
        //动态获取虚拟目录
        String contextPath = request.getContextPath();

        response.sendRedirect(contextPath + "/resp2");
//        response.sendRedirect("https://www.itcast.cn");


    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

@WebServlet("/resp2")
public class ResponseDemo2 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp2...");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
执行过程	:
启动tomcat,如果已经启动则重运行即可

在这里插入图片描述

点击链接

在这里插入图片描述

输入url,按回车

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值