1 请求对象
1.1 请求对象概述
1.2 常用方法
获取各种路径方法
获取请求头信息方法
获取请求参数信息方法
输出:
1.3 获取请求参数并封装对象
1.3.1 手动封装方式
/**
* 封装请求正文到User对象中没有使用确认密码
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void test4(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取请求正文
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
//2.创建一个User对象
User user = new User();
System.out.println("封装前:"+user.toString());
//3.把请求正文封装到user对象中
user.setUsername(username);
user.setPassword(password);
user.setGender(gender);
System.out.println("封装后:"+user.toString());
}
1.3.2 反射封装方式
/**
* 封装请求正文到javabean。使用的是反射+内省 使用了确认密码
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void test7(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.获取请求正文的映射关系
Map<String,String[]> map = request.getParameterMap();
Users user = new Users();
System.out.println("封装前:"+user.toString());
//2.遍历集合
for(Map.Entry<String,String[]> me : map.entrySet()){
String name = me.getKey();
String[] value = me.getValue();
try{
//1.拿到User对象中的属性描述器。是谁的属性描述器:是由构造函数的第一个参数决定的。第二个参数是指定javabean的字节码
PropertyDescriptor pd = new PropertyDescriptor(name, Users.class);//参数指的就是拿哪个类的哪个属性的描述器
//2.设置javabean属性的值
Method method = pd.getWriteMethod();
//3.执行方法
//判断参数到底是几个值
if(value.length > 1){//最少有2个元素
method.invoke(user, (Object)value);//第一个参数是指的给哪个对象,第二个参数指的是赋什么值
}else{
method.invoke(user, value);//第一个参数是指的给哪个对象,第二个参数指的是赋什么值
}
}catch(Exception e){
e.printStackTrace();
}
}
System.out.println("封装后:"+user.toString());
}
1.3.3 工具类封装方式
/**
* 终极方法:使用beanutils实现请求正文封装到javabean中 使用了确认密码
* 要想使用beanutils,需要先导包
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void test8(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Users user = new Users();
System.out.println("封装前:"+user.toString());
try{
BeanUtils.populate(user, request.getParameterMap());//就这一句话
}catch(Exception e){
e.printStackTrace();
}
System.out.println("封装后:"+user.toString());
}
1.4 用流的形式读取请求信息
1.5 中文乱码问题
关于请求中文乱码问题,我们需要分开讨论,第一是POST请求方式,第二是GET方式。
GET在tomcat8后面就不会乱码了,所以只有post会出现
加一行代码:
1.6 请求域
1.7 请求转发
浏览器路径走demo09的,输出是demo10的内容
2 响应对象
2.1 概述
2.2 常见响应状态码
2.3 响应消息
2.3.1 字节流响应
2.3.2 字符流响应
2.4 响应图片
上述案例报错,路径错误,应该是绝对路径
2.5 设置缓存
2.6 设置定时刷新
2.7 重定向
重定向:
张三找李四借钱,李四没有,但是李四的好朋友王五有,把地址告诉给张三,张三向王五借
转发:
张三找李四借钱,李四没有,李四朋友王五有,但是张三不好意思,于是乎让李四借王五钱给张三