day06 Request&Response
第一章 Request
1. 学习目标
- 了解Request的概念
- 了解Request的组成部分
- 掌握Request获取请求行的信息
- 掌握Request获取请求头的信息
- 掌握Request获取请求参数
- 掌握解决请求参数乱码
- 掌握Request域对象
- 掌握请求转发
2. 内容讲解
2.1 Request概述
2.1.1 Request的概念
在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求头和请求体三部分,因此,在HttpServletRequest接口中定义了获取请求行、请求头和请求消息体的相关方法.
用我们自己的话来理解: Request就是服务器中的一个对象,该对象中封装了HTTP请求的请求行、请求头和请求体的内容
2.1.2 Request的组成
- 请求行: 包含请求方式、请求的url地址、所使用的HTTP协议的版本
- 请求头: 一个个的键值对,每一个键值对都表示一种含义,用于客户端传递相关的信息给服务器
- 请求体: POST请求有请求体,里面携带的是POST请求的参数,而GET请求没有请求体
2.1.3 Request的作用
- 获取HTTP请求三部分内容(行,头,体)
- 进行请求转发跳转
- 作为请求域对象进行存取数据
2.2 Request获取HTTP请求的内容
2.2.1 获取请求头的API
- getMethod();获取请求方式
- getContextPath(); 获得当前应用上下文路径
- getRequestURI();获得请求地址,不带主机名
- getRequestURL();获得请求地址,带主机名
public class ServletDemo01 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override<br /> protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br /> //使用request对象获取请求行的信息:<br /> //1. 获取请求的方式(可能会用)<br /> String method = request.getMethod();<br /> //System.out.println("请求方式为:" + method);;
//2. 获取请求的url: 统一资源定位符 http://localhost:8080/requestDemo/demo01<br /> String url = request.getRequestURL().toString();<br /> //System.out.println("此次请求的url是:" + url);
//3. 获取请求的uri: 统一资源标识符,在url的基础上省略了服务器路径"http://loaclhost:8080"<br /> String uri = request.getRequestURI();<br /> System.out.println(uri);<br /> }<br />}
2.2.2 获取请求头的API
- getHeader(String name), 根据请求头的name获取请求头的值
public class ServletDemo02 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override<br /> protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br /> //根据请求头的name获取value<br /> //目标:获取name为user-agent的请求头的信息<br /> //user-agent请求头中包含的是客户端浏览器信息<br /> String header = request.getHeader("user-agent");<br /> System.out.println("获取的请求头agent为:" + header);<br /> }<br />}
2.2.3 获取请求参数
2.2.3.1 请求参数的概念
请求参数是客户端携带给服务器的由键值对组成的数据,例如”username=aobama&password=123456”这种类型的数据
2.2.3.2 客户端携带请求参数的形式
- URL地址后面附着的请求参数,例如http://localhost:8080/app/hellServlet?username=汤姆
- 表单携带请求参数
- Ajax请求携带请求参数(后续会学习)
2.2.3.3 获取请求参数的API
方法名 | 返回值类型 | 方法描述 |
---|---|---|
request.getParameterMap() | Map |
获取当前请求的所有参数,以键值对的方式存储到Map中 |
request.getParameter(“请求参数的名字”) | String | 根据一个参数名获取一个参数值 |
request.getParameterValues(“请求参数的名字”) | String [] | 根据一个参数名获取多个参数值 |
request.getParameterNames() | Enumeration | 获取当前请求的所有参数的参数名 |
2.2.3.4 实例代码
HTML代码
- 准备数据
CREATE TABLE t_user
(
id
int(11) NOT NULL AUTO_INCREMENT,
username
varchar(50) DEFAULT NULL,
password
varchar(50) DEFAULT NULL,
nickname
varchar(50) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
insert into t_user
(id
,username
,password
,nickname
) values (1,’jay’,’123456’,’周杰棍’);
- 编写LoginServlet代码
package com.atguigu.servlet;
import com.atguigu.bean.User;
import com.atguigu.utils.JDBCTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
@author Chunsheng Zhang
日期2021-05-11 14:30
/
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
@Override<br /> protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br /> //解决请求参数和响应数据的乱码问题<br /> request.setCharacterEncoding("UTF-8");<br /> response.setContentType("text/html;charset=UTF-8");<br /> //获取请求参数<br /> String username = request.getParameter("username");<br /> String password = request.getParameter("password");
//使用DBUtils连接数据库执行查询的SQL语句<br /> String sql = "select * from t_user where username=? and password=?";<br /> QueryRunner queryRunner = new QueryRunner(JDBCTools.getDataSource());<br /> try {<br /> User user = queryRunner.query(sql, new BeanHandler<>(User.class), username, password);<br /> if (user != null) {<br /> //说明查询到数据<br /> //向浏览器响应查询到数据了<br /> response.getWriter().write("登录成功!!!");<br /> return;<br /> }<br /> //说明登录失败<br /> throw new RuntimeException();<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> response.getWriter().write("登录失败!!!");<br /> }<br /> }<br />}
- 配置LoginServlet的映射路径
- 部署Module