文章目录
HttpServletRequest类
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); | 获取域数据 |
getRequestDispatcher() | 获取请求转发对象 |
简单使用
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// i. getRequestURI() 获取请求的资源路径
System.out.println("URI =>"+request.getRequestURI());
// ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
System.out.println("URL =>"+request.getRequestURL());
// iii. getRemoteHost() 获取客户端的 ip 地址
System.out.println("HOST =>"+request.getRemoteHost());
// iv. getHeader() 获取请求头
System.out.println("Header-UA =>"+request.getHeader("User-Agent"));
// vii. getMethod() 获取请求的方式 GET 或 POST
System.out.println("Method =>"+request.getMethod());
}
Servelt获取请求参数
首先准备一个form表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<form action="http://localhost:8080/MyTest_war_exploded/paramter" method="get">
用户名:<input type="text" name="username" ><br/>
密码:<input type="text" name="password" ><br/>
兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++
<input type="checkbox" name="hobby" value="java">Java
<input type="checkbox" name="hobby" value="python">python<br/>
<input type="submit">
</form>
</body>
</html>
Servlet配置
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String[] hobby = request.getParameterValues("hobby");
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
System.out.println("爱好:"+ Arrays.asList(hobby));
}
小问题
在post请求当中如果传中文可能会出现乱码问题加一句编码设置即可request.setCharacterEncoding("UTF-8");
请求转发
释义
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫请求转发。
简单使用
Servlet1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求的参数(办事的材料)查看
String username = request.getParameter("username");
System.out.println("在Servlet1柜台中查看参数username"+username);
// 给材料 盖一个章,并传递到 Servlet2(柜台 2)去查看
request.setAttribute("Key","柜台1已经受理盖章");
// 问路:Servlet2(柜台 2)怎么走
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet2");
// 走向 Sevlet2(柜台 2)
requestDispatcher.forward(request, response);
}
Servlet2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取请求的参数(办事的材料)查看
String username = request.getParameter("username");
System.out.println("在Servlet2柜台中查看参数username"+username);
Object key = request.getAttribute("Key");
System.out.println("柜台1设置的值"+key);
// 处理自己的业务 System.out.println("Servlet2 处理自己的业务 ");
System.out.println("Servlet2 处理自己的业务 ");
}
请求转发特点
- 1、浏览器地址栏没有变化
- 2、他们是一次请求
- 3、他们共享Request域中的数据
- 4、可以转发到WEB-INF目录下,因为WEB-INF目录收到保护,我们不能访问,但请求转发可以
- 5、不可以访问工程以外的资源