一篇博客上手request和response

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

概念

request:获取请求数据
response:设置响应数据

Request

request继承体系

ServletRequest——Java提供的请求对象根接口
HttpServletRequest——Java提供的对http协议封装的请求对象接口
RequestFacade——tomcat实现定义类

request获取数据

package com.itheijma.web;

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.BufferedReader;
import java.io.IOException;

@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String method() 获取请求方式
        String method = req.getMethod();
        System.out.println(method);
        //String getContextPath() 获取虚拟目录(项目访问路径)
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        //StringBuffer getRequestURL() 获取URL(统一资源定位符)
        StringBuffer url = req.getRequestURL();
        System.out.println(url.toString());
        //String getRequestURI() 获取URI(统一资源标识符)
        String uri = req.getRequestURI();
        System.out.println(uri);
        //String getQueryString() 获取请求参数(get方式)
        String queryString = req.getQueryString();
        System.out.println(queryString);

        //------------
        //获取请求头
        String agent = req.getHeader("user-agent");
        System.out.println(agent);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取post请求体:请求参数

        // 1. 获取字符输入流
        BufferedReader br = req.getReader();
        // 2. 读取数据
        String line = br.readLine();
        System.out.println(line);

    }
}

request通用的方式获取数据

package com.itheijma.web;

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.Map;

@WebServlet("/req2")
public class RequestDemo2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //get请求逻辑
//        System.out.println("get...");

        // 1.获取所有参数的map集合
        Map<String, String[]> map = req.getParameterMap();
        for (String key : map.keySet()) {
            //username:zhangsan
            System.out.print(key+":");

            //获取值
            String[] values = map.get(key);
            for (String value : values) {
                System.out.print(value + " ");
            }

            System.out.println();
        }

        System.out.println("----------");

        // 2.根据key获取参数值,数组
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {

            System.out.println(hobby);
        }

        // 3. 根据key获取单个参数值
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //post请求逻辑
        this.doGet(req,resp);


//        System.out.println("post...");
//        // 1.获取所有参数的map集合
//        Map<String, String[]> map = req.getParameterMap();
//        for (String key : map.keySet()) {
//            //username:zhangsan
//            System.out.print(key+":");
//
//            //获取值
//            String[] values = map.get(key);
//            for (String value : values) {
//                System.out.print(value + " ");
//            }
//
//            System.out.println();
//        }
//
//        System.out.println("----------");
//
//        // 2.根据key获取参数值,数组
//        String[] hobbies = req.getParameterValues("hobby");
//        for (String hobby : hobbies) {
//
//            System.out.println(hobby);
//        }
//
//        // 3. 根据key获取单个参数值
//        String username = req.getParameter("username");
//        String password = req.getParameter("password");
//        System.out.println(username);
//        System.out.println(password);


    }
}

request请求参数中文乱码解决方法

package com.itheijma.web;



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.nio.charset.StandardCharsets;


/**
 * 中文乱码问题解决方案
 */
@WebServlet("/req3")
public class RequestDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 解决乱码 POST 获取参数方式:getReader()读取数据流
        request.setCharacterEncoding("utf-8"); //设置字符输入流的编码


        // 2. 获取username
        String username = request.getParameter("username");
        System.out.println("解决乱码前:"+username);


        // 3. 解决乱码 GET 获取参数方式:getQueryString
        // 乱码原因:tomcat进行url解码,默认的字符集ISO-8859-1
//        // 3.1 先对乱码数据进行编码:转为字节数组
//        byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);
//        // 3.2 字节数组解码
//        username = new String(bytes, StandardCharsets.UTF_8);

        username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);

        System.out.println("解决乱码后"+username);


    }
}

request请求转发

请求转发(forward):一种在服务器内部的资源跳转方式。
请求转发特点:

  1. 浏览器地址栏路径不发生变化
  2. 只能转发到当前服务器的内部资源
  3. 一次请求,可以在转发的资源间使用request共享数据
    req4
package com.itheijma.web;



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.nio.charset.StandardCharsets;


/**
 * 请求转发
 */
@WebServlet("/req4")
public class RequestDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo4");

        //存储数据
        request.setAttribute("msg","hello");

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

req5

package com.itheijma.web;

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("/req5")
public class RequestDemo5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("demo5");

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

response

Response完成重定向

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

package com.itheima.web.response;

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("/resp1")
public class ResponseDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp1...");

//        // 重定向
//        // 1. 设置状态码 302
//        response.setStatus(302);
//        // 2. 设置响应头 Location
//        response.setHeader("Location","/tomcat-demo2/resp2");

        // 简化方式完成重定向
        response.sendRedirect("/tomcat-demo2/resp2");

    }
}

resp2

package com.itheima.web.response;

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("/resp2")
public class ResponseDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("resp2...");
    }
}

重定向特点:

  1. 浏览器地址栏路径发生变化
  2. 可以重定向到任意位置的资源(服务器内、外部均可)
  3. 两次请求,不能在多个资源使用request共享数据

资源路径问题(什么时候加虚拟目录)
浏览器使用:需要加虚拟目录
服务端使用:不需要加虚拟目录

动态获取虚拟目录

        //动态获取虚拟目录
        String contextPath = request.getContextPath();
        response.sendRedirect(contextPath + "/resp2");

Response响应字符数据

package com.itheima.web.response;

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("/resp3")
public class ResponseDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //获取字符输出流
        PrintWriter writer = response.getWriter();
        //content-type
        //response.setHeader("content-type","text/html");
        writer.write("你好");
        writer.write("<h1>aaa</h1>");

        //细节:流不需要关闭
    }
}

Response响应字节数据

package com.itheima.web.response;

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;


/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 1. 读取文件
        FileInputStream fis = new FileInputStream("e://a.jpg");

        // 2. 获取response字节输出流
        ServletOutputStream os = response.getOutputStream();

        // 3. 完成流的copy

//        byte[] buff = new byte[1024];
//        int len = 0;
//        while ((len = fis.read(buff)) != -1){
//            os.write(buff,0,len);
//        }
        IOUtils.copy(fis,os);//使用工具类

        fis.close();
    }
}

pom文件导入工具类文章来源地址https://www.toymoban.com/news/detail-418464.html

<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

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

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

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

相关文章

  • Spring/SpringBoot 过滤器修改、获取http 请求request中的参数 和 response返回值,比如修改请求体和响应体的字符编码

    通过自定义filter,RequestWrapper,ResponseWrapper 处理请求和响应数据,比如修改请求体和响应体的字符编码 1.request 和 response 中的数据都是 存在流中的(缓存中)获取一次就没有了,需要重新写回去。所以需要两个包装类分别继承HttpServletRequestWrapper 和 HttpServletResponseWrapper 对 r

    2024年02月15日
    浏览(42)
  • Request和Response应用

    ServletRequest应用 ServletRequest应用非常广泛,下面是一些例子: 获取请求参数:可以使用HttpServletRequest的getParameter()方法获取请求参数。 获取请求头信息:可以使用HttpServletRequest的getHeader()方法获取请求头信息。 获取Session对象:使用HttpServletRequest的getSession()方法可以获取HttpS

    2024年02月02日
    浏览(43)
  • Request+Response

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

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

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

    2024年02月04日
    浏览(75)
  • JavaWeb:Request & Response

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

    2024年01月19日
    浏览(40)
  • Request对象和response对象

           request对象和response对象是通过Servlet容器(如Tomcat)自动创建并传递给Servlet的。 Servlet容器负责接收客户端的请求,并将请求信息封装到request对象中,然后将request对象传 递给相应的Servlet进行处理。类似地,Servlet容器会创建一个response对象,并将其传递给 Servlet,用于

    2024年02月11日
    浏览(33)
  • 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)
  • Javaweb中的Request(请求)和Response(响应)

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

    2024年02月08日
    浏览(41)
  • 小黑子—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)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包