Servlet2
HttPServletRequest 类
这个类的作用:
每次只要有请求进入 Tomcat 服务器,Tomcat 服务器会把请求过来的 HTTP 协议信息解析好封装到 Request 对象 中。传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所 有请求的信息。
HttpServletRequest 类的常用方法
- getRequestURI( ) 获取请求的资源路径
- getRequestURL( ) 获取请求的统一资源定位符(绝对路径)
- getRemoteHost( ) 获取客户端的ip地址
- getHeader( ) 获取请求头
- getParameter( ) 获取请求的参数
- getParameterValues( ) 获取请求的参数(多个值的时候使用)
- getMethod( ) 获取请求的方式(GET或POST)
- setAttribute( key , value ) 设置域数据
- getAttribute( key , value ) 获取域数据
- getRequestDispatcher( ) 获取请求转发对象
package eighteven;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RequestAPIServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//getRequestURI( ) 获取请求的资源路径
System.out.println("URI = >" + req.getRequestURI());
//getRequestURL( ) 获取请求的统一资源定位符(绝对路径)
System.out.println("URL = >" + req.getRequestURL());
//getRemoteHost( ) 获取客户端的ip地址
System.out.println("客户端ip地址为" + req.getRemoteHost());
//getHeader( ) 获取请求头
System.out.println("请求头user_Agent为:"+ req.getHeader("user-Agent"));
//getMethod( ) 获取请求的方式(GET或POST)
System.out.println("请求方式为:" + req.getMethod());
}
}
package eighteven;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ParameterServlet 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");
System.out.println("用户名为:" + username + "密码是:" + password + "爱好:" + hobby);
}
}
解决doPost中获取中文参数乱码
req.setCharacterEncoding("UTF-8");
请求的转发
什么是请求的转发?
请求转发是指,服务器收到请求后,从一次资源跳转到另一个服务器资源的操作叫请求转发。
请求转发:
//请求转发必须要以斜杠打头 斜杠表示地址为 http://ip:port/工程名/ , 映射到IDEA代码的Web目录
RequestDispatcher requestdispatcher = req.getRequestDispatcher("/servlet2");
//走向servlet2
requestdispathcer.forward(req,resp);
base 标签的作用
base标签可以设置当前页面中所有相对路径工作时,参照哪个路径来进行跳转
web 中 / 的不同意义
/ 被浏览器解析,得到的地址是:http://ip:port/
被服务器解析,得到的地址是:http://ip:port/工程路径
HttpServletResponse 类
作用:
HttpServletResponse 类 和 HttpServletRequest 类一样。每次请求进来,Tomcat服务器都会创建一个 Response对手传递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息,我们如果设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置
两个输出流的说明
字节流 getOutputStream( ) 常用于下载(传递二进制数据)
字符流 getWriter( ) 常用于回传字符串(常用)
如何往客户端回传数据
package eighteven;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ParameterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.write("response content!!");
}
}
可通过设置响应头,设置浏览器也使用UTF-8字符集
resp.setHeader("Content-Type","text/html;charset=UTF-8");
请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说:我给你一些地址,你去新地址访问。叫请求重定向。
重定向不会共享 Request 中的数据
并且可以访问工程外的资源
package eighteven;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ParameterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("到此一游");
//设置响应状态码302
resp.setStatus(302);
//设置响应头
resp.setHeader("Location","http://localhost:8080/Dongtai_war_exploded/response2");
}
}
package eighteven;
import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class response2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-Type","text/html;charset=UTF-8");
resp.getWriter().write("收到收到over!!!");
}
}
请求重定向第二种方法(推荐使用)
resp.sendRedirect("http//localhost:8080");