Request对象和response对象

这篇具有很好参考价值的文章主要介绍了Request对象和response对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一、概念

       request对象和response对象是通过Servlet容器(如Tomcat)自动创建并传递给Servlet的。

Servlet容器负责接收客户端的请求,并将请求信息封装到request对象中,然后将request对象传

递给相应的Servlet进行处理。类似地,Servlet容器会创建一个response对象,并将其传递给

Servlet,用于生成响应并发送给客户端。

     总的来说,request对象是来获取请求消息,response对象是来设置响应消息

二、Request

Request对象和response对象,javascript,tomcat,前端

        在Servlet的service()方法被调用时,Servlet容器会创建一个包含请求信息的HttpServletRequest对象,并将其作为参数传递给Servlet的service()方法。类似地,Servlet容器还会创建一个HttpServletResponse对象,并将其作为参数传递给Servlet的service()方法。

1、Request功能

(1)获取请求行数据

        请求行的数据有:请求方式  请求url 请求协议/协议版本号

             ①获取请求方式:getMethod()

             ②获取虚拟目录:getContextPath()

             ③获取servlet路径:getServletPath()

             ④获取get方式请求参数:getQueryString()

             ⑤获取请求URI:统一资源定位符:getRequestURI()

                                        统一资源标识符:getRequestURL()

             ⑥获取协议及版本: getProtocol()

             ⑦获取客户机的IP地址:getRemoteAddr()

  代码示例:

@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1获取请求方式
        String method=request.getMethod();
        System.out.println(method);
        //2获取虚拟目录
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        //3获取servlet路径
        String servletPath = request.getServletPath();
        System.out.println(servletPath);
        //4获取请求参数
        String queryString = request.getQueryString();
        System.out.println(queryString);
        //5获取请求URI
        String requestURI = request.getRequestURI();
        System.out.println(requestURI);
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURL);
        //6获取请求协议及版本号
        String protocol = request.getProtocol();
        System.out.println(protocol);
        //7获取客户机的ip地址
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);
    }

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

    }
}
(2)获取请求头数据

     方法:getHeader(String name):通过请求头的名称获取请求头的值

                 getHeaderNames():获取所有的请求头名称

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示获取请求头数据
        //获取所以请求头数据
        Enumeration<String> headerNames = request.getHeaderNames();
        //遍历
        while(headerNames.hasMoreElements()){
            String s = headerNames.nextElement();
            //根据名称获取请求头的值
            String header = request.getHeader(s);
            System.out.println(s+"......"+header);
        }
        //演示获取请求头数据:user-Agent
        String header = request.getHeader("user-agent");
        //判断agent的浏览器版本
        System.out.println(header);
      
    }
(3)获取请求体数据

      只有post请求有请求体

步骤:①获取流对象
                     BufferedReader getReader():获取字符输入流,只能操作字符数据
                    ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据

           ② 再从流对象中拿数据

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求消息体--请求参数
        //1、获取字符流
        BufferedReader reader = request.getReader();
        //2、读取数据
        String line=null;
        while((line=reader.readLine())!=null){
            System.out.println(line);
        }
        System.out.println("-------------------------------------");
    }

 2、其他功能

(1)获取请求参数(不区分post和get方法)

       ①根据参数名称获取参数值:getParameter(String name)

       ②根据参数名称获取参数值数组:getParameterValues(String name)

       ③获取所有请求的参数名称:getParameterNames()

       ④获取所有参数的map集合:getParameterMap()

@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     this.doPost(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决中文乱码问题
        request.setCharacterEncoding("utf-8");
        //根据请求参数的名称获取请求参数值
        String username = request.getParameter("username");
        System.out.println(username);
        System.out.println("post");
        System.out.println();
        //根据参数名称获取请求参数数组
        String[] parameterValues = request.getParameterValues("hobby");
        for (String hobby:parameterValues) {
            System.out.println(hobby);
        }
        System.out.println();

        //根据所以请求参数名称
        Enumeration<String> parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()){
            String s = parameterNames.nextElement();
            System.out.print(s);
            String parameter = request.getParameter(s);
            System.out.println(parameter);
        }
        System.out.println();

        //获取所以参数的map集合
        Map<String, String[]> parameterMap = request.getParameterMap();
        Set<String> strings = parameterMap.keySet();
        for(String name:strings){
            String[] strings1 = parameterMap.get(name);
            System.out.print(name);
            for(String value:strings1){
                System.out.println(value);
            }
        }
    }
}
(2)请求转发

          在服务器内部的资源跳转方式

       步骤:

            通过request对象获取请求转发器对象:getRequestDispatcher(String path)。

            使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response) 。

      特点:

          浏览器地址栏不发生改变

          只能转发到当前服务器内部资源中

          转发是一次请求

(3)共享数据

         域对象:一个有作用范围的对象,可以在范围内共享数据
         request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
         方法:
                ①setAttribute(String name,Object obj):存储数据
                ②getAttitude(String name):通过键获取值
                ③ void removeAttribute(String name):通过键移除键值对
          注意:这个放于forward方法的上面,不然响应太快会导致无法获取信息!

   代码示例

@WebServlet("/requestDemo5")
public class RequestDemo5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo5被访问了");
        request.setAttribute("ttt","hhhh");
        //转发到demo6
        request.getRequestDispatcher("/requestDemo6").forward(request,response);
    }

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

    }
}


@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object ttt = request.getAttribute("ttt");
        System.out.println(ttt);
        System.out.println("demo6被访问了");
    }

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

    }
}
(4)获取ServletContext对象 :getServletContext()

三、Response

 response:设置响应消息

1、设置响应行方法

(1)设置响应行状态码方法:setStatus();

(2)设置响应头:setHeader(String name,String value)

(3)设置响应体:

              使用步骤:

                         ①获取输出流
                                  字符输出流:PrintWriter getWriter()

                                 字节输出流:ServletOutputStream getOutputStream()

                        ② 使用输出流,将数据输出到客户端浏览器

2、重定向: 一种资源跳转的方式

      (1)方法:sendRedirect()
     (2) 重定向的特点:redirect
            ① 地址栏发生变化
            ② 重定向可以访问其他站点(服务器)的资源
            ③ 重定向是两次请求。不能使用request对象来共享数据
@WebServlet( "/responseDemo1")
public class responseDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo1");
        //设置状态码为302
        response.setStatus(302);
       /* //设置响应头location
        response.setHeader("location","/servlet/responseDemo2");*/
        //获取当前应用程序的上下文路径
        String contextPath = request.getContextPath();

        //简单的重定向方法
        response.sendRedirect(contextPath+"/responseDemo2");
    }

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

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

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}
(3)服务器输出字符数据到浏览器

         步骤:
                 获取字符输出流
                 输出数据

@WebServlet("/responseDemo3")
public class responseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*//获取流对象之前,设置流的默认编码:ISO-8859-1设置为:浏览器默认编码
        response.setCharacterEncoding("utf-8");
        //告诉浏览器服务器发送的消息体数据的编码,建议浏览器使用改编码解码
        response.setHeader("content-type","text/html;charset=utf-8");*/
        response.setContentType("text/html;charset=utf-8");//解决乱码问题
        //获取字符输出流
        PrintWriter writer = response.getWriter();
        //输出数据
        writer.write("牛牛牛");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}
(4)服务器输出字节数据到浏览器
          步骤:
                 获取字节输出流
                 输出数据
@WebServlet("/responseDemo4")
public class responseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //获取字节输出流
        ServletOutputStream outputStream = response.getOutputStream();
        //输出数据
        outputStream.write("你好".getBytes());
    }

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

三、ServletContext对象

1、概念

       ServletContext 实例代表了整个 Web 应用程序的上下文环境,可以在整个应用程序中访问和共享,可以和服务器来通信。

2、获取

      方式一:

              通过request对象获取:request.getServletContext();

     方式二:

              通过HttpServlet获取:this.getServletContext();

3、功能

(1)获取MIME类

             MIME类型:在互联网通信过程中定义的一种文件数据类型
             格式: 大类型/小类型   text/html        image/jpeg

        获取方法:getMimeType(String file)  

   代码示例

@WebServlet("/ContextDemo1")
public class ContextDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Context对象的方式
       // ServletContext servletContext = request.getServletContext();
        ServletContext servletContext1 = this.getServletContext();
        //定义文件名称
        String filename="a.jpg";
        //获取MIME类型
        String mimeType = servletContext1.getMimeType(filename);
        System.out.println(mimeType  );
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}
(2)域对象:共享数据

        ① setAttribute(String name,Object value)
        ② getAttribute(String name)
        ③removeAttribute(String name)

         ServletContext对象范围:所有用户所有请求的数据


@WebServlet(name = "ContextDemo2", value = "/ContextDemo2")
public class ContextDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext1 = this.getServletContext();
        servletContext1.setAttribute("n","hello");
    }

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


@WebServlet(name = "ContextDemo2", value = "/ContextDemo2")
public class ContextDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext1 = this.getServletContext();
        Object n = servletContext1.getAttribute("n");
        System.out.println(n);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}
(3) 获取文件的真实(服务器)路径

         方法:String getRealPath(String path)文章来源地址https://www.toymoban.com/news/detail-681594.html

到了这里,关于Request对象和response对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Request+Response

    Request+Response Request是请求对象,Response是响应对象 request: 获取请求数据 浏览器会发送HTTP请求到后台服务器[Tomcat] HTTP的请求中会包含很多请求数据[请求行+请求头+请求体] 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中 所存入的对象即为reques

    2024年02月12日
    浏览(45)
  • Request Response详解

    1.1.1 关于响应 响应,它表示了服务器端收到请求,同时也已经处理完成,把处理的结果告知用户。简单来说,指的就是服务器把请求的处理结果告知客户端。在B/S架构中,响应就是把结果带回浏览器。 响应对象,顾名思义就是用于在JavaWeb工程中实现上述功能的对象。 1.1.2

    2024年02月04日
    浏览(76)
  • JavaWeb04-Request,Response

    目录 一、Request(请求) 1.作用 2.继承体系 3.获取请求数据 (1)请求行 (2)请求头 (3)请求体(POST) (5)Request通用方式获取请求参数 4.Servlet模板 5.中文数据乱码解决 6.请求转发 二、Response(响应) 1.作用 2.继承体系 3.设置响应数据 (1)响应行 (2)响应头 (3)响应体

    2024年03月15日
    浏览(35)
  • JavaWeb之Request&Response编程

    1.1 servlet servlet生命周期 (servlet 单实例,多线程) init(ServletConfig):只会执行一次,默认第一次访问,如果配置服务器启动(web.xml ) service(ServletRequest,ServletResponse):每请求一次,将执行一次。 destroy() 服务器正常关闭时,将执行一次。 使用细节 1.完成初始化操作: 复写init() , 此访

    2024年02月10日
    浏览(34)
  • 【前端|Javascript第5篇】全网最详细的JS的内置对象文章!

    前言 在当今数字时代,前端技术正日益成为塑造用户体验的关键。我们在开发中需要用到很多js的内置对象的一些属性来帮助我们更快速的进行开发。或许你是刚踏入前端领域的小白,或者是希望深入了解内置对象的开发者,不论你的经验如何,本篇博客都将给你详细的讲解

    2024年02月12日
    浏览(114)
  • 一篇博客上手request和response

    request:获取请求数据 response:设置响应数据 ServletRequest——Java提供的请求对象根接口 HttpServletRequest——Java提供的对http协议封装的请求对象接口 RequestFacade——tomcat实现定义类 请求转发(forward):一种在服务器内部的资源跳转方式。 请求转发特点: 浏览器地址栏路径不发

    2023年04月19日
    浏览(43)
  • [SpringBoot] 8. aop 获取 request response

    最近开发有一个需求需要在 aop 中获取request response ,搜索许久没有答案,故此记录📝~

    2024年02月07日
    浏览(33)
  • Javaweb中的Request(请求)和Response(响应)

    目录 一、概念 二、请求(Request) 1.例子简介 2.Request继承体系 3.Request获取请求数据   (1)请求行 (2)请求头 (3)请求体  4.优化请求体参数的获取 5.解决请求参数乱码问题  6.请求转发  请求转发的特点 三、响应(Response) 1.Response继承体系 2.设置响应数据功能介绍 (

    2024年02月08日
    浏览(42)
  • 小黑子—JavaWeb:第四章 Request与Response

    Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中 使用request对象,查阅JavaEE API文档的 HttpServletRequest 接口 请求数据分为3部分: 1、请求行: String getMethod():获取请求方式:GET String getContextPath():获取虚拟目录(项目访问路径):/request-demo String

    2024年02月14日
    浏览(42)
  • SpringMVC中文乱码(request或response)前后端处理

    前端处理: 后端处理: GET请求(request)乱码处理: POST请求(request)乱码处理: 响应(response)乱码处理:

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包