一、HttpServletRequest类
作用:每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGet和doPost)中供我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。
1、常用的方法
- getRequestURI() 获取请求的资源路径
- getRequestURL() 获取请求的统一资源定位符(绝对路径)
- getRemoteHost() 获取客户端的ip地址
- getHeader() 获取请求头
- getParameter() 获取请求的参数
- getParameterValues() 获取请求的参数(多个值的时候使用)
- getMethod() 获取请求的方式GET或POST
- setAttribute(key,value) 设置域数据
- getAttribute(key) 获取域数据
- getRequestDispatcher() 获取请求转发对象
代码演示
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("URI --》"+req.getRequestURI()); System.out.println("URL --》"+req.getRequestURL()); System.out.println("HOST --》"+req.getRemoteHost()); }
2、获取请求的参数
#案例演示:
表单代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="http://localhost:8080/07-servlet/paramentServlet" method="get"> 用户名:<input type="text" name="username"/><br /> 密码:<input type="password" name="password"/><br /> 兴趣爱好:<input type="checkbox" name="hobby" value="c++"/>c++ <input type="checkbox" name="hobby" value="java"/>java <input type="checkbox" name="hobby" value="php"/>php <input type="checkbox" name="hobby" value="python"/>python<br /> <input type="submit"/> </form> </body> </html>
Java代码
package com.wufq.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Arrays; /** * @Description * @Author wufq * @Version * @Date 2021/6/23 16:16 */ public class ParamentServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); // String hobby = req.getParameter("hobby"); String[] hobbies = req.getParameterValues("hobby"); System.out.println("username=="+username+" passwd=="+password+" hobby=="+ Arrays.asList(hobbies)); } }
含义:
浏览器:http://localhost:8080/07-servlet/form.html (前端页面)填写内容信息,点击提交
-->页面跳转到:http://localhost:8080/07-servlet/paramentServlet?username=wfq&password=wfq&hobby=c%2B%2B&hobby=java&hobby=php(服务端的接口地址)
--> 这样就有了前端和后端交互的形式
===>代码这里面涉及到如果是像兴趣爱好这样多个参数,那么在获取的时候,就应该用getParameterValues,结果是一个数组
------------>有中文会出现乱码<-------------
Post请求解决乱码方式:设置请求体的字符集为UTF-8
req.setCharacterEncoding("UTF-8");
get请求解决乱码方式:
String username = req.getParameter("username"); username = new String(username.getBytes("iso-8859-1"),"UTF-8");
3、请求转发
原理:
4、base标签的作用
5、web中的相对路径和绝对路径
相对路径: . 表示当前路径 .. 表示上一级目录 资源名 表示当前目录/资源名
绝对路径: http://ip:port/工程路径/资源路径
注意:在实际开发中,都使用绝对路径,不使用相对路径
二、HttpServletResponse类
1、作用:
HttpServletResponse和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。
HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。返回给客户端的信息,都是通过HttpServletResponse对象来设置的
2、传给客户端的方式:通过流(两种)
字节流 :getOutputStream(); 常用于下载(传递二进制数据)
字符流:getWriter();常用于回传字符串(常用)
两个流同时只能使用一个。否则就会报错()
resp.getWriter();
resp.getOutputStream();
3、往客户端回传数据
public class ReponseServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* * 解决返回给客户端乱码问题 * 它会同时设置服务器和客户端都是哟经UTF-8字符集,还设置了响应头 * 此方法一定要在获取流对象之前调用才有效 * */ resp.setContentType("text/html;charset=UTF-8"); //给客户端回传字符串数据 PrintWriter writer = resp.getWriter(); writer.write("给客户端回传信息!"); } }
4、请求重定向
请求重定向,指客户端给服务器发送请求,然后服务器告诉客户端说。我给你一些地址,你去新地址访问,这就叫请求重定向(因为之前的地址可能已经被废弃)
设置重定向的方法: