栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

请求对象&响应对象(Request&Response)相关知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

请求对象&响应对象(Request&Response)相关知识点

1.HTTP协议的概念 HTTP协议的介绍

HTTP的特点

HTTP请求 1.请求的组成部分

请求行
请求头
请求体

2.请求的方式

GET方式

POST方式

注意:只有post的请求方式才有请求体

2.HTTP请求的三个组成

请求行
请求头
请求体

3.请求信息的组成:请求行


1.请求方发:GTE和POST
2.URI 统一资源标识符
3.协议和版本号(HTTP/1.1)

4.请求信息的组成:请求头、请求体 请求头

请求头由多个键和值组成

请求体


小结

request对象介绍与作用

5.请求的方法:与请求行有关的方法【了解】 获取请求行的方法

package com.itheima;


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.io.PrintWriter;

@WebServlet("/demo1")
public class Demo1RequestLineServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置响应类型和编码
        response.setContentType("text/html;charset=utf-8");
        //2.获取打印流
        PrintWriter out = response.getWriter();
        //3.输出到浏览器:请求对象的实现类:org.apache.catalina.connector.RequestFacade@4ad64f2b
        //public class RequestFacade implements HttpServletRequest
        //结论:请求和响应对象由Tomcat实现,并且由Tomcat创建请求和响应对象,传入Servlet()方法中
        out.print("请求对象:" + request + "
"); out.print("获取请求的方式:" + request.getMethod() + "
"); out.print("获取请求的URI:" + request.getRequestURI() + "
"); out.print("获取请求的URL:" + request.getRequestURL() + "
"); //得到url问号后面的数据 out.print("获取查询字符串:" + request.getQueryString() + "
"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
6.请求的方法:与请求头有关的方法

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

@WebServlet("/demo2")
public class Demo2RequestHeaderServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("请求对象:" + request + "
"); //通过请求头的名字获取到请求头的值 String header = request.getHeader("Host"); out.print("host请求对象的值:" + header + "
"); //获取所有请求头的名字 Enumeration headerNames = request.getHeaderNames(); //遍历所有的名字 while (headerNames.hasMoreElements()) { //获取一个请求头的名字 String s = headerNames.nextElement(); //获取一个请求头的值 String headerValue = request.getHeader(s); out.print("请求头的名字:" + s + ",请求头的值是:" + headerValue+"
"); } String URI = request.getRequestURI(); out.print("请求对象的URI是:" + URI + "
"); StringBuffer URL = request.getRequestURL(); out.print("请求对象URL为:" + URL + "
"); String queryString = request.getQueryString(); out.print("请求对象的值:" + queryString + "
"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.设置响应类型和编码 response.setContentType("text/html;charset=utf-8"); //2.获取打印流 PrintWriter out = response.getWriter(); //3.输出到浏览器:请求对象的实现类:org.apache.catalina.connector.RequestFacade@4ad64f2b //public class RequestFacade implements HttpServletRequest //结论:请求和响应对象由Tomcat实现,并且由Tomcat创建请求和响应对象,传入Servlet()方法中 out.print("请求对象:" + request + "
"); out.print("获取请求的方式:" + request.getMethod() + "
"); out.print("获取请求的URI:" + request.getRequestURI() + "
"); out.print("获取请求的URL:" + request.getRequestURL() + "
"); //得到url问号后面的数据 out.print("获取查询字符串:" + request.getQueryString() + "
"); } }
7.请求头应用案例:判断浏览器的类型 案例:判断用户使用的是什么浏览器

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/demo3")
public class Demo3BrowserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.设置响应类型和编码
            response.setContentType("text/html;charset=utf-8");
            //2.获取打印流
            PrintWriter out = response.getWriter();
            //获取user-agent这个请求头的值
            String header = request.getHeader("user-agent");
            //判断这个值是否包含指定的字符串"Edg,OPR,Chrome,Safari,Firefox,IE"或者其他
            if (header.contains("Edg")) {
                out.print("您的浏览器是微软自带的");
            } else if (header.contains("OPR")) {
                out.print("您的浏览器是OPR");
            } else if (header.contains("Chrome")) {
                out.print("您的浏览器是谷歌浏览器");
            } else if (header.contains("Safari")) {
                out.print("您的浏览器是苹果浏览器");
            } else if (header.contains("Firefox")) {
                out.print("您的浏览器是火狐浏览器");
            } else {
                out.print("您的浏览器是IE浏览器或者其他浏览器");
            }
        }
    }

8.请求的方法:得到客户端提交的参数值【重点】 获取请求数据

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;

@WebServlet("/demo4")
public class Demo4ParameterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应类型和编码
        response.setContentType("text/html;charset=utf-8");
        //获取打印流
        PrintWriter out = response.getWriter();
        //1.获取用户名,参数的字符串必须与表单的name相同,获取一个参数值
        String name = request.getParameter("name");
        out.println("用户名是:" + name + "
"); String gender = request.getParameter("gender"); out.println("性别是:" + gender + "
"); //2.通过一个参数名获取一组参数值 String[] hobbys = request.getParameterValues("hobby"); out.println("你的爱好是:" + Arrays.toString(hobbys) + "
"); //3.获取所有参数名 Enumeration parameterNames = request.getParameterNames(); //遍历所有键的名字 while (parameterNames.hasMoreElements()){ //获取一个键的名字 String s = parameterNames.nextElement(); String headervalue = request.getParameter(s); out.println("参数名:"+s+"参数值:"+headervalue+"
"); } //4.获取整个表单所有的参数名和值 键:参数名,值:参数值(字符串数组) Map parameterMap = request.getParameterMap(); //遍历map parameterMap.forEach((k,v)->out.println("键:"+k+",值:"+Arrays.toString(v))); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
9.BeanUtils工具类的使用【重点】 BeanUtils工具类封装数据


Demo5BeanUtilsServlet.java文件

package com.itheima;

import com.itheima.entity.User;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;

@WebServlet("/demo5")
public class Demo5BeanUtilsServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置响应类型和编码
        response.setContentType("text/html;charset=utf-8");
        //2.获取打印流
        PrintWriter out = response.getWriter();
        //设置汉字编码为utf-8
        request.setCharacterEncoding("utf-8");
        //获取表单所有的键和值
        Map parameterMap = request.getParameterMap();
        User user = new User();
        //使用工具类封装数据,两个参数(目标对象(没有数据),源对象(有数据))
        try {
            BeanUtils.populate(user,parameterMap);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //输出
        out.println(user);
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);

    }
}

User.java文件

package com.itheima.entity;

public class User {
    private String name;
    private String gender;
    private String city;
    private String hobby;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", gender='" + gender + ''' +
                ", city='" + city + ''' +
                ", hobby='" + hobby + ''' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public User() {
    }

    public User(String name, String gender, String city, String hobby) {
        this.name = name;
        this.gender = gender;
        this.city = city;
        this.hobby = hobby;
    }
}

register.html文件




    
    这是登录页面


用户注册

用户名:
性别:
城市:
爱好: 上网 上学 上车 上吊
记得放类库

在WEB_INF的包下新建lib存储

10.请求参数值汉字乱码的问题【重点】 解决post提交中文数据乱码

设置请求体汉字乱码

        //设置请求体的编码
            //1.1 必须放在所有获取参数方法的前面
            //1.2 必须与页面编码相同
            //1.3 get方法没有乱码的问题,这个方法用于post方法
        request.setCharacterEncoding("utf-8");
11.请求域有关的方法【重点】 request是一个作用域对象

三个作用域
在Servlet中一共有三个作用域从小到大为:请求域,会话域,上下文域.

12.页面的跳转:转发

One请求转发two

One.java页面

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/one")
public class OneServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //像请求域中添加键和值(向上转型)
        request.setAttribute("user", "NewBoy");



        //什么是转发:在服务器端进行的页面跳转
        //1.获取转发器(参数:要跳转的地址)2.通过转发器跳转(请求,响应)

        //用一句话简写
        request.getRequestDispatcher("/two").forward(request,response);

    }

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

    }
}

two.java页面

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/two")
public class TwoServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求域的值
        String user = (String) request.getAttribute("user");
        //1.设置响应类型和编码
        response.setContentType("text/html;charset=utf-8");
        //2.获取打印流
        PrintWriter out = response.getWriter();
        //打印到浏览器
        out.println("Two请求域中的对象:"+user);

    }

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

    }
}

13.页面的跳转:重定向

        //重定向:在浏览器端进行页面跳转:一次请求两次跳转:无数据
        //request.getContextPath()获取模块的访问地址,如:/day28
        response.sendRedirect(request.getContextPath()+"/two");
    //重定向:在浏览器端进行页面跳转:一次请求两次跳转:无数据
    response.sendRedirect("/two");
package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/one")
public class OneServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //像请求域中添加键和值(向上转型)
        request.setAttribute("user", "NewBoy");



        //什么是转发:在服务器端进行的页面跳转
        //1.获取转发器(参数:要跳转的地址)2.通过转发器跳转(请求,响应)

        //用一句话简写
        //request.getRequestDispatcher("/two").forward(request,response);

        //重定向:在浏览器端进行页面跳转:一次请求两次跳转:无数据
        //request.getContextPath()获取模块的访问地址,如:/day28
        response.sendRedirect(request.getContextPath()+"/two");

    }

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

    }
}

two.java页面

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/two")
public class TwoServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求域的值
        String user = (String) request.getAttribute("user");
        //1.设置响应类型和编码
        response.setContentType("text/html;charset=utf-8");
        //2.获取打印流
        PrintWriter out = response.getWriter();
        //打印到浏览器
        out.println("Two请求域中的对象:"+user);

    }

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

    }
}

转发和重定向的区别

14.登录案例


分析

https://blog.csdn.net/anyi2351033836/article/details/login1.html(HTML登录页面)




    
    登录页面



用户登录

用户名:
密码:

Login1Servlet文件(Servlet控制器处理数据)

package com.itheima;

import com.itheima.entity.Users;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/login1")
public class Login1Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置汉字编码
        response.setCharacterEncoding("utf-8");
        //获取用户名和密码
        String username = (String) request.getParameter("username");
        String password = (String) request.getParameter("password");
        //比较用户名和密码,判断是否登录成功(以后访问数据库)
        if ("NewBoy".equals(username)&&"123456".equals(password)){
           //给对象封装属性
            Users users = new Users();
            users.setUsername(username);
            users.setPassworld(password);
            //登录成功以后将用户的信息保存在请求域中
            request.setAttribute("users",users);
            //转发到SuccessServlet中显示出来
            request.getRequestDispatcher("/success").forward(request,response);
        }else {
            //登陆失败,重定向到failure.html
            response.sendRedirect(request.getContextPath()+"/failure.html");
        }


    }

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

    }
}

SuccessServlet页面(登录成功显示浏览器)

package com.itheima;

import com.itheima.entity.Users;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/success")
public class SuccessServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Users users = (Users) request.getAttribute("users");
        //1.设置响应类型和编码
        response.setContentType("text/html;charset=utf-8");
        //2.获取打印流
        PrintWriter out = response.getWriter();
        //显示在页面上
        out.println("欢迎您登录成功:"+users.getUsername()+"

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

failure.html文件(登录失败页面)




    
    跳转失败


登陆失败

点击跳转重新登录
总结 能够理解HTTP协议内容

能够使用Request对象获取HTTP协议的请求内容

获取请求数据

能够处理HTTP请求参数的乱码问题

能够使用request域对象

能够使用请求和转发


1.能够使用浏览器开发工具查看响应 HTTP响应

什么是HTTP响应

服务器端发送给浏览器端的数据,称为响应
1.响应的组成部分
	响应行(状态行)
	响应头
	响应空行
	响应体


200:表示服务器正常的响应
302:跳转/重定向
304:使用缓存
400:表示请求参数有问题
404:请求资源没找到
405:没有重写doGET或doPOST方法
500:服务器错误

响应头

响应体

小结

2.响应对象的方法:与状态码有关

package com.itheima;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/demo1")
public class Demo1ResponseServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("响应对象:"+request);
        //设置状态码:这个方法很少单独使用(了解)
        //response.sendError(220);

        //发送错误码
        response.sendError(510,"你熬夜了吗?");
    }

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

    }
}

3.响应头相关方法

4.能够使用Request对象操作HTTP响应内容 5.能够处理响应乱码 6.能够完成文件下载案例 7.能够使用ServletContext域对象
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846873.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号