目录
一. HttpServletRequest
🌔HttpServletRequest介绍
🌓HttpServletRequest 常用方法
🌕HttpServletRequest 注意事项和细节
二. HttpServletResponse
🌕注意事项
总结
一. HttpServletRequest
HttpServletRequest介绍
HttpServletRequest代表了客户端向服务器发送的HTTP请求。它是Servlet容器在调用Servlet服务时,通过参数传递给Servlet的对象。
HttpServletRequest对象提供了许多方法来获取有关HTTP请求的信息,包括:
请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。
请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。
请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。
请求体信息:对于POST请求,可以使用getReader()方法获取请求体的字符输入流,或者使用getInputStream()方法获取请求体的字节输入流。
Cookie:可以使用getCookies()方法获取所有的Cookie信息。
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响应,包括:
设置响应状态码:可以使用setStatus(int sc)方法设置响应的状态码,如200表示成功、404表示资源未找到等。
设置响应头信息:可以使用setHeader(String name, String value)方法设置指定名称的响应头的值,使用addHeader(String name, String value)方法添加响应头。
设置响应内容的数据类型:可以使用setContentType(String type)方法设置响应内容的MIME类型。
获取输出流:可以使用getWriter()方法获取字符输出流,或者使用getOutputStream()方法获取字节输出流,用于向客户端发送响应内容。
设置重定向:可以使用sendRedirect(String location)方法将客户端重定向到另一个URL。
设置Cookie:可以使用addCookie(Cookie cookie)方法添加Cookie到响应中。
除了上述方法之外,HttpServletResponse还提供了其他许多方法,用于设置和发送HTTP响应的各个方面。通过HttpServletResponse对象,Servlet可以根据业务逻辑生成响应内容并发送给客户端,与客户端进行交互。
注意事项
1. 字节流 getOutputStream(); 常用于下载(处理二进制数据)
2. 字符流 getWriter(); 常用于回传字符串
3. ( 细节: ) 两个流同时只能使用一个。 使用了字节流,就不能再使用字符流,反之亦然, 否则就会报错
4. 处理中文乱码问题 -
方案一
//设置服务器字符集为UTF-8 resp.setCharacterEncoding("UTF-8"); //通过响应头,设置浏览器也使用UTF-8字符集 resp.setHeader( "Content-Type", "text/html;charset=UTF-8");
方案二
response.setContentType("text/html; charset=utf-8");
总结
HttpServletResponse代表了服务器向客户端发送的HTTP响应。
HttpServletRequest代表了客户端向服务器发送的HTTP请求。
两者都是Tomcat封装的对象, 传递给servlet进行执行, 而servlet可以获取它们的具体信息, 并对一些信息进行修改