请求&响应

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  重定向

重定向:

张三找李四借钱,李四没有,但是李四的好朋友王五有,把地址告诉给张三,张三向王五借

 转发:

张三找李四借钱,李四没有,李四朋友王五有,但是张三不好意思,于是乎让李四借王五钱给张三

2.7  文件下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值