??HttpServletRequest 是一个接口,该接口的实现类对象称为请求对象,请求对象封装了所有的请求信息(请求行,请求头,请求体(请求参数))。
??HttpServletRequest 接口包含了大量的方法。由 Tomcat 去实现这个对象,并且在 servlet 启动的时候调用service() 将请求对象传递进来了,在 service 方法中可直接使用。
① request 与请求行相关方法
request 与请求行相关方法 | 说明 |
---|---|
String getMethod() | 获得请求方式 GET 或 POST |
String getRequestURI() | Uniform Resource Identifier统一资源标识符,代表一个资源名字 |
StringBuffergetRequestURL() | Uniform Resource Locator 统一资源定位符,代表一个可以访问地址 |
String getProtocol() | 获得协议和版本 |
String getContextPath() | 获得上下文路径(项目名path) |
② request 与请求头相关方法
request 与请求头相关方法 | 说明 |
---|---|
String getHeader(String headName) | 得到指定的请求头的值参数:键的名字 返回:相应请求头的值 |
③ request与请求参数相关方法
request与请求参数相关方法 | 说明 |
---|---|
String getParameter(String name) | 通过参数名得到一项参数值 |
String[] getParameterValues(String name) | 根据参数名得到一组同名的值复选框,下拉列表多选 |
Enumeration getParameterNames() | 获得所有的参数名 |
Map getParameterMap() | 得到表单所有的参数键和值,封装成Map对象 |
④ Enumeration接口中方法
Enumeration接口中方法 | 说明 |
---|---|
boolean hasMoreElements() | 如果还有其它元素,返回true |
E nextElement() | 返回下一个元素 |
@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求行
System.out.println(req.getMethod()); //方法
System.out.println(req.getRequestURI()); //统一资源标识符
System.out.println(req.getRequestURL()); //统一资源定位符
System.out.println(req.getProtocol()); //协议和版本
System.out.println(req.getContextPath());//当前项目地址
// 获取请求头值
System.out.println(req.getHeader("user-agent"));
}
}
① 创建页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>TJ</title>
</head>
<body>
<h3>用户注册</h3>
<form action="/play" method="post">
name:<input type="text" name="name"><br/>
sex:<input type="radio" name="sex" value="man" checked="checked"/>man
<input type="radio" name="sex" value="woman"/>woman <br/>
city:
<select name="city">
<option value="牙克石">牙克石</option>
<option value="大雁">大雁</option>
<option value="根河">根河</option>
</select>
<br/>
hobby:
<input type="checkbox" name="hobby" value="run"/>run
<input type="checkbox" name="hobby" value="swim"/>swim
<input type="checkbox" name="hobby" value="work"/>work
<br/>
<input type="submit" value="submit"/>
</form>
</body>
</html>
② 获取页面中的数据
@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置请求参数编码 放在获取请求参数之前
req.setCharacterEncoding("utf-8");
// 根据参数名获得参数值
System.out.println("name:" + req.getParameter("name"));
// 得到一个字符串数组
String[] hobbies = req.getParameterValues("hobby");
// 得到多个参数
System.out.println("hobby:" + Arrays.toString(hobbies));
// 得到所有参数的名字
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
// 得到其中一个名字
String name = parameterNames.nextElement();
System.out.println("param:" + name + ",value:" +
req.getParameter(name));
}
// 得到所有的键和值
Map<String, String[]> map = req.getParameterMap();
map.forEach((k,v) -> System.out.println("key:" + k + ",value:" +
Arrays.toString(v)));
}
}
??HttpServletResponse 是一个接口,该接口的实现类对象称为响应对象,用于响应数据(响应行,响应头,响应体)给浏览器。HttpServletResponse 接口包含了大量的方法。由 Tomcat 去实现这个对象,并且在 servlet 启动的时候调用 service() 将请求对象和响应对象传递进来了。于 service 方法中可直接使用。
响应体相关的方法 | 功能描述 |
---|---|
OutputStream getOutputStream() | 服务器端返回的是二进制数据(图片)使用此方法 |
PrintWriter getWriter() | 服务器端返回的是字符的文本数据,使用此方法 |
@WebServlet("/play")
public class Play extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应编码
resp.setContentType("text/html;charset=utf-8");
//响应字符信息到客户端
PrintWriter writer = resp.getWriter();
//writer.write("请求完成,响应数据返回!.......");
//可以将html标签作为字符串响应到页面
String s = "<p><a href=\"http://www.baidu.com\" style=\"color: red;background-color: aqua\">百度一下</a></p>";
writer.write(s);
}
}
解决中文乱码的方法 | 说明 |
---|---|
response.setCharacterEncoding(“字符集”) | 用于设置响应体的字符集,设置打印流使用的码表 |
void setContentType(String type) | 1. 告诉浏览器返回内容类型,2. 设置打印流编码,必须在获取流之前设置,否则无效 |