request

来源:互联网 发布:微淘和淘宝的区别 编辑:程序博客网 时间:2024/06/05 06:04
1、注册案例实现
   需求:注册页面客户录入数据,单击注册按钮进行注册操作,如果账号已经存在,给出错误提示
        否则,数据插入数据库
   分析:
    A、编写注册页面
    B、提交到一个 Servlet
    C、Servlet 获取数据并封装成一个 JavaBean 对象
    D、调用 service 和 dao 与数据库交互,存在一个业务逻辑
    E、返回一个结果,根据结果给出提示
   实现:
    A、导入 UI
    B、导入 jar 配置文件 以及工具类
    C、设计数据库以及 JavaBean
    D、模块实现
2、注册案例知识点 ----- request
   行:
    request.getMethod();//获取请求方式
    request.getContextPath();//动态获取项目路径(非常重要,但是以后使用 --- 结合JSP)
   头:
    请求头只是简单获取意义不大,必须结合具体的解析程序,比如:文件下载工具类
    getHeader("键");//根据请求头的键获取请求头对应的值
   体:
    Map<String,String[]> map = request.getParameterMap();
    这个方法是将表单提交的数据组织成了 Map 集合,这个Map集合的键对应表单的键
    值是表单某个输入项的值组成的 String[]
    如果单独使用无意义,一会结合BeanUtils 使用可以简化 JavaBean 对象的创建代码
3、注册案例知识点 ----- UUID
   A、以后表的 ID 不使用数字类型而是 varchar 类型
      因为数字类型存在安全隐患:
      uid int primary key auto_increment
      高并发时,可能出现重复的 id 值,线程安全问题
   B、当前解决方案(不行):
      System.currentTimeMillis();//也有可能出现重复
   C、ID 生成优化:UUID
      String id = UUID.randomUUID().toString();//生成的是 36 位的
      一般使用:
      id.replace("-","");
4、注册案例知识点 ----- BeanUtils
   A、应用场景
      开发中数据库表与JavaBean字段比较多,在类似于注册的操作实现中:
      如何将客户端提交的数据设置进 JavaBean 对象?
      之前:先 getParameter("xxx"),再 setXxx("");
      显然效率低
   B、使用 BeanUtils + getParameterMap() 简化 JavaBean 数据设置
      使用流程:
      1)、导入 jar 包
      2)、request.getPatameterMap();//获取客户端提交的数据
      3)、创建 JavaBean 对象
      4)、BeanUtils.populate(JavaBean对象,map 集合);
      注意:
        如果某个JavaBean的字段在Map集合中不存在,那么必须手动设置
   C、BeanUtils 使用注意:
      1)、Map集合可以不使用泛型类型
      2)、BeanUtils 可以将字符串转换成对应的基本数据类型
      3)、但是如果字符串是时间,那么得自定义时间转换器进行转换
      //创建时间转换器对象
      DateConverter dc = new DateConverter();
      //声明可以转换的时间的格式
      dc.setPatterns(new String[]{"yyyy-MM-dd","yyyy/MM/dd"});
      //在BeanUtils中注册自己设置的时间转换器,声明转换成的数据的类型
      ConvertUtils.register(dc, Date.class);
5、注册案例知识点 ----- 页面跳转
   A、应用场景:
     比如登陆或注册完成跳转到网站首页
   B、页面跳转怎么实现?
     方案1:请求转发
     方案2:重定向
   C、请求转发实现:
     需求:访问A跳转到B
     1、A中实现:
        将B资源按照面向对象思想封装成一个 RequestDispatcher 对象
    request.getRequestDispatcher("/B路径");
    //注意:该路径无项目名
     2、A中实现:
        将请求和响应转发到B
    rd.forWard(request,response);
     简化:
        request.getRequestDispatcher("/ServletB").forward(request, response);
     常用小功能:
        源:设置数据request.setAttribute("键","值");
        目的:获取数据 request.getAttribute("键");
    常用此方式在不同的资源之间传递数据

   D、重定向
      需求:访问C跳转到D
      response.sendRedirect("/项目名/D路径");

      重定向不能像请求转发一样进行数据传递

   E、请求转发与重定向比较
      1)、请求转发浏览器地址栏不变
             而重定向地址栏改变
          为什么?

      2)、使用的路径不同
          请求转发: /资源路径
          重定向:/项目名/资源路径
      为什么?
        根据当前使用资源的场景分析(记住):
        如果服务器内部使用某个资源,那么不需要加项目名
        如果是客户端使用资源,那么需要加项目名
          
      3)、请求转发可以携带共享数据
          重定向不能共享数据
      为什么?
      请求转发在同一个程序内,而重定向跨程序
   
      请求转发和重定向的本质区别:

      前者再服务器跳转后者在客户端跳转


  
原创粉丝点击