request基础

Request

  1. Request和Response对象的原理

    1. request和response这两个对象是由tomcat服务器创建的,我们不创建它们,我们只使用他们.
    2. request对象是来获取请求消息的,response对象是用来设置响应消息的.
    3. 原理图: request和response原理图.
  2. request对象的继承体系结构

    • ServletRequest(接口)
    • HttpServletRequest(接口): 继承自ServletRequest.
    • org.apache.catalina.connector.RequestFacade@1b59119e: tomcat实现了HttpServletRequest接口,编写了这个RequestFacade类,通过这个类创建request对象.
  3. request对象:

    1. 获取请求消息数据
      1. 获取请求行数据

        1. 请求行格式: GET /requestDemo(虚拟目录)/requestDemo1?name=fan HTTP/1.1
        2. 方法:
          1. 获取请求方式(GET): String getMethod().
            • 这个方法就是在service中判断判断是什么请求方法,然后由service去掉用对应的方法,所以我们不怎么用到.
          2. (重要)获取虚拟目录(/requestDemo): String getContextPath().
          3. 获取资源路径,也可以成为servlet路径(/requestDemo1): String getServletPath().
          4. 获取get方式的请求参数(name=fan): String getQueryString().
          5. (重要)获取请求的uri,即虚拟目录+资源目录(/requestDemo(虚拟目录)/requestDemo1): String getRequestURI().
            • StringBuffer getRequestURL(): 返回整个url路径,比如http://localhost:8080/requestDemo/requestDemo1.
            • url: 统一资源定位符.
            • uri: 统一资源标识符,其代表的范围大于url,可以理解为url是中华人民共和国,而uri是共和国.
          6. 获取协议和版本(HTTP/1.1): String getProtocol().
          7. 获取客户机的ip地址: String getRemoteAddr().
        3. 演示代码.
      2. 获取请求头数据

        1. 方法
          1. (重要)String getHeader(String name): 通过请求头的名称来获取请求头的值,其中name不区分大小写.
          2. Enumeration getHeaderNames(): 获取所有请求头的名称.
        2. 演示代码.
      3. 获取请求体数据

        1. 请求体只有POST请求方式才有请求体,在请求体中封装了POST请求的请求参数.
        2. 步骤:
          1. 获取流对象(字节流,字符流).
            1. BufferedReader getReader(): 获取字符输入流,只能操作字符数据.
            2. ServletInputStream getInputStream():获取字节输入流,可以操作所有类型的数据,这个在文件上传再说.
          2. 再从流对象中拿数据.
        3. 演示代码, 这个代码中文读出来是乱码,怎么搞都是乱码,果断放弃.
    2. 其它功能
      1. 获取请求参数通用方式(GET, POST都可以用来获取请求参数)
        1. String getParameter(String name): 根据参数名称来获取参数值,例如你有这样一串参数: user=饭饭&password=123,我传入参数为user就可以得到饭饭这个值.
        2. String[] getParameterValues(String name): 根据参数名称获取参数值的数组,例如: hobby=abc&def&hij,我们通过这个方法就可以获取多个值,多用于复选框.
        3. Enumeration getParameterNames(): 获取所有请求的参数名称.
        4. Map<String, String[]> getParameterMap(): 获取所有参数的键值对集合.
        5. 中文乱码问题
          1. 通过实验发现有一个问题,就是如果表单的提交方式是post,传中文就会乱码;但是如果表单提交方式是get,传中文就不会出现乱码,为什么呢?
          2. get方式: tomcat8 就已经将get方式乱码问题解决了.
          3. post方式: 在获取参数前设置request的编码格式,多写一行代码就可以了: request.setCharacterEncoding("UTF-8");,括号中的参数和html文件中的编码格式一样就可以了,一般都是utf-8.
        6. 获取请求参数通用方式示例代码.
      2. 请求转发: 可以理解为一种在服务器内部的一种资源跳转方式,形象一点就是在同一个tomcat中,多个serevlet类之间互相跳转的方式.
        1. 步骤:
          1. 通过request对象调用RequestDispatcher getRequestDispatcher(String path)方法,获取请求转发器对象.
          2. 使用RequestDispatcher对象调用void forward(ServletRequest request, ServletResponse response)方法进行转发.
          3. 请求转发示例代码.
        2. 特点:
          1. 浏览器地址栏路径没有发生改变,就算跳转到了另一个servlet,但是地址栏中还是原来的servlet地址.
          2. 只能转发到当前服务器的内部资源中,就是说只能转发到一个tomcat服务器下的的东西,也就是同一个src文件夹下面的不同类可以相互随便转发,不在一个包没得事.
          3. 这样子的转发只发出一次请求,通过浏览器的f12然后查看网络,当我们输入链接后,发现浏览器只有一次请求.
      3. 共享数据
        1. 域对象: 一个有作用范围的对象,可以在范围内共享数据.
        2. request域: 代表一次请求的范围,一般用于一次请求转发到多个资源中去共享数据.
        3. 方法(都是用request对象调用的)
          1. void setAttribute(String name , Object obj): 存储数据,说白了就是给name赋值,而且什么值都可以,int,String都行.
          2. Object getAttribute(String name): 通过键获取值.
          3. void removeAttribute(String name): 通过键移除键值对.
          4. 示例代码1.
          5. 示例代码2.
      4. 获取servletContext对象
        1. 方法: ServletContext getServletContext().
        2. 案例代码: System.out.println(request.getServletContext());,在浏览器输入网址:http://localhost:8080/requestDemo8后得到一个对象的地址.

request案例: 用户登录

  1. 需求:

    1. 编写login.html登录页面,有username和password两个输入框.
    2. 使用druid数据库连接池技术,操作mysql.
    3. 使用jdbcTemplate技术封装jdbc.
    4. 登录成功跳转到SuccessServlet,同时显示: 登录成功! 用户名, 欢迎您!字样.
    5. 登录失败跳转到FailServlet,同时显示: 登录失败! 用户名或 密码错误!字样.
  2. 开发步骤:

    1. 创建项目,创建html页面,导入druid配置文件以及一系列jar包.
    2. 创建数据库环境,在数据库中建表,插入一点数据等.
    3. 创建一个domain包,创建一个实体类User
      1. 这里有一个叫法,我们把实体类也叫做javabean,就是一般都只有get和set方法,提供属性这些的.
    4. 创建一个dao包,创建类UserDao,在类中提供login方法.
    5. 创建servlet包,同时创建loginServlet类.
      1. 注意: login.html中form表单的action的路径的写法: 虚拟目录(就是我之前说的点击tomcat->编辑结构->Deployment->Application context中的路径,如果只是一个斜杠就表示虚拟目录不用写) + servlet的资源路径.
    6. 创建SuccessServlet和FailServlet类.
    7. 建立一个BeanUtils工具类,简化数据的封装(我这里会有问题,就是用这些工具类永远获取不到用户名,我也不晓得为啥).
    8. 登录案例代码.
  3. JavaBean: 标准的Java类(一般放在domain包里面)

    1. 要求
      1. 类必须被public修饰.
      2. 必须提供空参的构造器.
      3. 成员变量必须使用private修饰.
      4. 提供公共的getter和setter方法.
    2. 功能: 封装数据的
    3. 成员变量: 如private int age中的age就是成员变量.
    4. 属性: getter()和setter()方法截取后的产物,例如: getAge()方法中的Age就是属性,一般和成员变量名字相同.
    5. 方法:
      1. setProperty(Object bean, String name, Object value): bean表示一个javabean对象,例如user; name表示一个属性名,例如getAge中的age,这个必须写成小写,虽然方法名中是大写; value表示前一个参数属性名的属性值.
      2. getProperty(Object bean, String name): 含义和上面一样.
      3. populate(Object obj, Map map):这个比较重要,将map集合中的键值对信息封装到对应的javabean对象中.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值