【servlet】请求和响应/转发和重定向

1. 请求和响应

1.1 HttpServletRequest

1.1.1 HttpServletRequest介绍
    	符合HTTP协议的请求对象,带有HTTP请求头的所有内容!!!作为JavaWEB开发中,我们所关注的是请求的【资源名字,参数】
    	Request对象可以得到当前用户的请求方式 GET和POST,根据对应的请求方式采用不同的处理方法。
1.1.2 HttpServletRequest常用方法

1.1.3 Tomcat乱码问题

Tocmat8乱码 Tomcat9

post请求乱码
	req.setCharacterEncoding("utf-8");
GET没问题

Tomcat7乱码[有毒]

GET请求乱码
	因为Tomcat7在本地服务器运行过程中,编码集方式是ISO8859-1 ==> UTF-8
	 req.getParameter("name").getBytes("ISO8859-1"), "UTF-8"
	 req.getParameter("age").getBytes("ISO8859-1"),"UTF-8"
POST请求乱码
	req.setCharacterEncoding("utf-8");

1.2 HttpServletResponse

1.2.1 介绍
	JavaWEB后台反馈数据给浏览器!!!
	1. 编码集
	2. cookie
	3. 反馈的数据类型
1.2.2 HttpServletResponse常用方法

2. 转发和重定向

2.1 转发

2.1.1 什么是转发
你来的翻车磊洗浴中心
	前台小姐姐接待你,先生你今天需要哪一个技师啊
	狗昊 我要46号技师 【发送一次请求】
	前台小姐姐 对讲机呼叫 46号 46号 听到请回复,over 【内部资源处理】
		46号 来了老弟 over
	狗昊 带走了46号技师

转发操作是【服务器行为】
	1. 用户请求有且只有一次!!!
	2. 请求在转发过程中会带有必要的参数!!!
	3. 浏览器没有任何的URL变化
	4. 转发操作只能是当前服务器内部资源处理
2.1.2 转发使用方法和演示
    package com.qfedu.c_RequestDispatcher;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.ArrayList;
    
    @WebServlet("/requestDispatcher1")
    public class RequestDispatcher1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            /*
             转发操作是通过Request对象完成的!!!
             getRequestDispatcher 设置转发操作路径,必须是内部资源
             forward(req, resp) Request和Response是用户请求当前服务器资源,Tomcat服务器对应创建的请求对象和响应对象
             通过转发传递到下一个资源中。
    
             转发操作可以带有参数操作,保存参数的对象是Request对象
            */
            req.setAttribute("奥特曼", 10);
            ArrayList<String> list = new ArrayList<>();
            list.add("狗昊");
            list.add("狗昊是个单身狗");
            list.add("狗昊是个SingleDog");
            list.add("狗昊是个PSFP");
    
            req.setAttribute("list", list);
    
            req.getRequestDispatcher("requestDispatcher2").forward(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    package com.qfedu.c_RequestDispatcher;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    
    @WebServlet("/requestDispatcher2")
    public class RequestDispatcher2 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            int i = (int) req.getAttribute("奥特曼");
            List<String> list = (List<String>) req.getAttribute("list");
    
            System.out.println(i);
    
            for (String s : list) {
                System.out.println(s);
            }
            System.out.println("转发成功!!!");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }

2.2 重定向

2.2.1 什么是重定向
洗浴中心
	狗昊来到翻车磊洗浴中心
	狗昊 我找46号技师【一次请求】
	前台小姐姐 46号今天去二店了
	狗昊 跑到二店
	狗昊 我找46号技师 【又一次请求】
	......

重定向是浏览器行为:
	1. 用户请求两次或者两次以上
	2. 重定向不会带有上一次请求的参数
	3. 浏览器URL会发送改变
	4. 重定向可以是服务器内部资源也可以是外部资源
    package com.qfedu.d_Redirect;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/redirectTest1")
    public class RedirectTest1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("欢迎光临,滚~~~");
    
    //        resp.sendRedirect("http://www.jiayuan.com");
            resp.sendRedirect("responseTest");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky__cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值