【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);
        }
    }
    
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页