请求&响应 笔记记录
一、请求-request
1. 获取各种路径
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 获取虚拟目录名称 getContextPath();
String contextPath = req.getContextPath();
System.out.println("contextPath:"+contextPath);
//2.获取Servlet映射路径 getServletPath
String servletPath = req.getServletPath();
System.out.println("getServletPath:"+servletPath);
//3.获取访问者ip getRemoteAddr
String remoteAddr = req.getRemoteAddr();
System.out.println("remoteAddr:"+remoteAddr);
//4.获取请求消息数据
String queryString = req.getQueryString();
System.out.println("queryString:"+queryString);
//5.获取统一资源标识符
String requestURI = req.getRequestURI();
System.out.println("requestURI:"+requestURI);
//6.获取统一资源定位符
StringBuffer requestURL = req.getRequestURL();
System.out.println("requestURL:"+requestURL);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
- 可见:定位符就是全路径,标识符就是虚拟目录路径+请求资源路径
- 标识符的范围比定位符更广 URI>URL范围
2. 获取请求头信息
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.根据请求头名称获取一个值
String connection = req.getHeader("connection");
System.out.println("connection:"+connection);
System.out.println("----------------------");
//2.根据请求头名称获取多个值
Enumeration<String> headers = req.getHeaders("Accept-Encoding");
while (headers.hasMoreElements()){
String s = headers.nextElement();
System.out.println(s);
}
System.out.println("----------------------");
//3. 获取所有请求头名称
Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()){
String name = headerNames.nextElement();
String value = req.getHeader(name);
System.out.println(name+":"+value);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
3. 获取请求参数信息
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册页面</title>
</head>
<body>
<form action="/jou/demo5" method="get" autocomplete="off">
姓名<input type="text" name="username"><br/>
密码<input type="text" name="password"><br/>
爱好<input type="checkbox" name="hobby" value="study"> 学习
<input type="checkbox" name="hobby" value="game"> 游戏
<br/>
<button type="submit"> 注册</button>
</form>
</body>
</html>
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
@WebServlet("/demo5")
public class ServletDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 根据名称获取数据
String username = req.getParameter("username");
System.out.println("username:"+username);
String password = req.getParameter("password");
System.out.println("password:"+password);
System.out.println("---------------------");
//2.根据名称获取所有数据
String[] hobbies = req.getParameterValues("hobby");
for (String hobby : hobbies) {
System.out.println("hobby:"+hobby);
}
System.out.println("---------------------");
//3.获取所有名称
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()){
String name = parameterNames.nextElement();
String value = req.getParameter(name);
System.out.println(name+":"+value);
}
System.out.println("----------------");
//4.获取所有参数的键值对
Map<String, String[]> map = req.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
System.out.print(key+":");
for (String value : values) {
System.out.print(value+" ");
}
System.out.println();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
4. 获取参数手动封装对象
4.1 手动封装方式
import java.util.Arrays;
public class Student {
private String username;
private String password;
private String [] hobby;
public Student() {
}
public Student(String username, String password, String[] hobby) {
this.username = username;
this.password = password;
this.hobby = hobby;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "Student{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", hobby=" + Arrays.toString(hobby) +
'}';
}
}
import com.jou.bean.Student;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 手动封装
*/
@WebServlet("/test1")
public class ServletTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 根据所有数据
String username = req.getParameter("username");
String password = req.getParameter("password");
String [] hobby=req.getParameterValues("hobby");
//2.封装学生对象
Student stu=new Student(username,password,hobby);
//3.输出对象
System.out.println(stu);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
4.2 反射封装方式
import com.jou.bean.Student;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Map;
/**
* 反射方式封装
*/
@WebServlet("/test1")
public class ServletTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 获取所有的数据
Map<String, String[]> map = req.getParameterMap();
//2.封装学生对象
Student stu=new Student();
//2.1遍历集合
for (String key:map.keySet()){
String[] value = map.get(key);
//2.2 获取Student对象属性描述器
try {
PropertyDescriptor pd=new PropertyDescriptor(key,stu.getClass());
//2.3.获取对象的setXXX方法
Method writeMethod = pd.getWriteMethod();
//2.4执行方法
if (value.length>1){
writeMethod.invoke(stu,(Object) value);
}else {
writeMethod.invoke(stu,value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//3.输出对象
System.out.println(stu);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
4.3 工具类封装方式
下载beanUtils jar包
import com.jou.bean.Student;
import org.apache.catalina.mbeans.MBeanUtils;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/**
* 工具类方式方式封装
*/
@WebServlet("/test1")
public class ServletTest1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1. 获取所有的数据
Map<String, String[]> map = req.getParameterMap();
//2.封装学生对象
Student stu=new Student();
try {
BeanUtils.populate(stu,map);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(stu);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
成功:
5. 流对象获取请求信息
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet("/test2")
public class Demo1 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//字符流
// BufferedReader br = req.getReader();
// String line;
// while ((line = br.readLine()) != null) {
// System.out.println(line);
// }
//字节流
ServletInputStream is=req.getInputStream();
byte []arr=new byte[1024];
int len;
while ((len=is.read(arr))!=-1){
System.out.println(new String(arr,0,len));
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
6. 处理中文乱码问题
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test2")
public class ServletDemo02 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
String username = req.getParameter("username");
System.out.println(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
6. 请求域
6.1 请求转发
使用场景:A完不成递交给B来完成
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求转发
*/
@WebServlet("/test3")
public class ServletDemo03 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
//设置共享数据
req.setAttribute("encoding","gbk");
//获得请求调度对象
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/test4");
//实现转发功能
requestDispatcher.forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求转发
*/
@WebServlet("/test4")
public class ServletDemo04 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
//获取共享数据
Object encoding = req.getAttribute("encoding");
System.out.println(encoding);
System.out.println("test4 running");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
7 请求包含
使用场景:A实现一半 B实现一半,A去包含B,一起响应
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求包含
*/
@WebServlet("/test5")
public class ServletDemo05 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
System.out.println("test5 running");
//获取请求调度
RequestDispatcher rq = req.getRequestDispatcher("/test6");
//实现包含功能
rq.include(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 请求包含
*/
@WebServlet("/test6")
public class ServletDemo06 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
System.out.println("test6 running");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}