【JavaWeb】知识总结Ⅹ(HttpServletRequest, HttpServletResponse)

🎄欢迎来到@dandelionl_的csdn博文,本文主要讲解Java web中Servlet里面的HttpServletRequest, HttpServletResponse的相关知识🎄


🌈我是dandelionl_,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下,下次更新不迷路🎆

 Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕  

目录

一. HttpServletRequest

🌔HttpServletRequest介绍

🌓HttpServletRequest 常用方法

🌕HttpServletRequest 注意事项和细节

二. HttpServletResponse 

 🌕注意事项

   总结


一. HttpServletRequest

HttpServletRequest介绍

HttpServletRequest代表了客户端向服务器发送的HTTP请求。它是Servlet容器在调用Servlet服务时,通过参数传递给Servlet的对象

HttpServletRequest对象提供了许多方法来获取有关HTTP请求的信息,包括:

  1. 请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。
  2. 请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。
  3. 请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。
  4. 请求体信息:对于POST请求,可以使用getReader()方法获取请求体的字符输入流,或者使用getInputStream()方法获取请求体的字节输入流。
  5. Cookie:可以使用getCookies()方法获取所有的Cookie信息。
  6. Session管理:可以使用getSession()方法获取与当前请求关联的Session对象。

除了上述方法之外,HttpServletRequest还提供了其他许多方法,用于获取请求的各个方面的信息。通过HttpServletRequest对象,Servlet可以处理客户端发送的请求,并根据请求的信息做出相应的响应。


HttpServletRequest 常用方法

1. getRequestURI() 获取请求的资源路径 http://localhost:8080 /servlet/loginServlet
2. getRequestURL() 获 取 请 求 的 统 一 资 源 定 位 符 ( 绝 对 路 径 ) http://localhost:8080/servlet/loginServlet
3. getRemoteHost() 获取客户端的主机 , getRemoteAddr()
4. getHeader() 获取请求头
5. getParameter() 获取请求的参数
6. getParameterValues() 获取请求的参数(多个值的时候使用) , 比如 checkbox, 返回的 数组
7. getMethod() 获取请求的方式 GET POST
8. setAttribute(key, value); 设置域数据
9. getAttribute(key); 获取域数据
10. getRequestDispatcher () 获取请求转发对象 , 请求转发的核心对象
代码示例  : 
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(urlPatterns = {"/HttpServletRequestMethods"})
public class HttpServletRequestMethods extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);

        req.setCharacterEncoding("utf-8");

//        http://localhost:8080/ServletStu/HttpServletRequestMethods?username=%E5%8F%91%E5%A3%AB%E5%A4%A7%E5%A4%AB&pwd=12345679&hobby=lh
        // 看上一行你就全懂了
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        System.out.println("账号 : " + username + " 密码 : " + pwd);
        //        账号 : 发士大夫 密码 : 12345679

        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println("爱好 : " + hobby);
        }
        //        爱好 : lh

        String method = req.getMethod();
        System.out.println(method); // 请求方法
        //                GET

        String host = req.getHeader("Host");
        System.out.println(host); // 服务器的主机 : ip+port
        //        localhost:8080

        String referer = req.getHeader("Referer");
        System.out.println(referer);
        // http://localhost:8080/ServletStu/register_request.html

        String header = req.getHeader("User-Agent");
        System.out.println(header);
        // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
        String[] split = header.split(" ");
        System.out.println(split[1] + split[2] + split[3] + split[4] + split[5]);
        // (WindowsNT10.0;Win64;x64)

        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        //                /ServletStu/HttpServletRequestMethods

        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
        //        http://localhost:8080/ServletStu/HttpServletRequestMethods

        String protocol = req.getProtocol();
        System.out.println(protocol);
        //        HTTP/1.1

        String remoteAddr = req.getRemoteAddr();
        String remoteUser = req.getRemoteUser();
        String remoteHost = req.getRemoteHost();
        int remotePort = req.getRemotePort();
        System.out.println("remoteAddr = " + remoteAddr + ", remoteUser = " + remoteUser + ", remoteHost" + remoteHost + ", remotePort" + remotePort);
        //        remoteAddr = 127.0.0.1, remoteUser = null, remoteHost127.0.0.1, remotePort59671
    }
}

 HttpServletRequest 注意事项和细节

1. 获 取 doPost 参 数 中 文 乱 码 解 决 方 案 , 注 意 setCharacterEncoding("utf-8") 写 在 request.getParameter()
        String username = req.getParameter("username");
2. 注意:如果通过 PrintWriter writer, 有返回数据给浏览器,建议将获取参数代码写在 writer.print() 之前,否则可能获取不到参数值(doPost)

 


二. HttpServletResponse 

HttpServletResponse代表了服务器向客户端发送的HTTP响应。它是Servlet容器在调用Servlet服务时,通过参数传递给Servlet的对象。

HttpServletResponse对象提供了许多方法来设置和发送HTTP响应,包括:

  1. 设置响应状态码:可以使用setStatus(int sc)方法设置响应的状态码,如200表示成功、404表示资源未找到等。
  2. 设置响应头信息:可以使用setHeader(String name, String value)方法设置指定名称的响应头的值,使用addHeader(String name, String value)方法添加响应头。
  3. 设置响应内容的数据类型:可以使用setContentType(String type)方法设置响应内容的MIME类型。
  4. 获取输出流:可以使用getWriter()方法获取字符输出流,或者使用getOutputStream()方法获取字节输出流,用于向客户端发送响应内容。
  5. 设置重定向:可以使用sendRedirect(String location)方法将客户端重定向到另一个URL。
  6. 设置Cookie:可以使用addCookie(Cookie cookie)方法添加Cookie到响应中。

除了上述方法之外,HttpServletResponse还提供了其他许多方法,用于设置和发送HTTP响应的各个方面。通过HttpServletResponse对象,Servlet可以根据业务逻辑生成响应内容并发送给客户端,与客户端进行交互。


 注意事项

1. 字节流 getOutputStream(); 常用于下载(处理二进制数据)
2. 字符流 getWriter(); 常用于回传字符串
3. ( 细节: ) 两个流同时只能使用一个。 使用了字节流,就不能再使用字符流,反之亦然, 否则就会报错
4. 处理中文乱码问题 -
  1. 方案一  
    //设置服务器字符集为UTF-8
    resp.setCharacterEncoding("UTF-8");
    //通过响应头,设置浏览器也使用UTF-8字符集
    resp.setHeader( "Content-Type", "text/html;charset=UTF-8");
    
  2. 方案二
    response.setContentType("text/html; charset=utf-8");
    

总结

HttpServletResponse代表了服务器向客户端发送的HTTP响应。

HttpServletRequest代表了客户端向服务器发送的HTTP请求。

两者都是Tomcat封装的对象, 传递给servlet进行执行, 而servlet可以获取它们的具体信息, 并对一些信息进行修改

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值