• Java-1101


    Request

    除了获取请求数据之外,还要讲一下他的其他方法:

    1. 其他方法

      1. 获取请求参数通用方法

        1. String getParameter(String name) : 根据参数名称获取参数值
        2. String[] getParameterValues(String name) 根据参数名称获取参数值的数组 (多用于一些复选框)
        3. Enumeration getParameterNames() 获取所以请求参数名称
        4. Map getParameterMap() : 获取所有参数与值的集合

        中文乱码问题:

        1. get方式:tomcat 8 已经将get方式的乱码问题解决了

        2. post方式:依然乱码

          1. 原因:get通过url获取参数,而post表面是通过getParameter方式获取,本质是通过流获取

          2. 纠正乱码:获取参数前,设置request的编码

          3. //  1.设置流的编码:
                    req.setCharacterEncoding("utf-8");
            
            • 1
            • 2
      2. 请求转发:理解为一种在服务器内部的资源跳转方式

        1. 步骤:
          1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
          2. 使用RequestDispatcher对象进行转发:forward(ServletRequest req, ServletResponse reps)
        2. 特点:
          1. 浏览器地址栏路径不发生变化
          2. 只能转发到当前服务器内部资源中
          3. 转发是一次请求,多个资源使用的是同一次请求
      3. 共享数据

        1. 域对象:一个有作用范围的对象,可以在范围内共享数据
        2. request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
        3. 方法:
          1. setAttribute(String name , Object obj):存储数据
          2. Objec getAttribute(String name): 获取数据,通过键获取值
          3. removeAttribute(String name): 通过键值移除键值对
      4. 获ServletContext:

        1. ServletContext getServletContext( )
      5. 案例实践:用户登录

        1. 需求:

          1. login.html登录页面 user&pwd 两个输入框
          2. 使用Druid数据库连接池技术,操作mysql,
          3. 使用JdbcTemplate技术封装JDBC
          4. 登录成功跳转到SuccessServlet展示:登录成功!user欢迎您
          5. 登录失败跳转到FailServlet展示:登录失败,用户名或密码错误
        2. 分析:
          请添加图片描述

        3. 步骤:

          1. 创建项目:

          2. 准备材料

            1. login.html
            2. druid.properties文件 -> src. (数据库连接池配置文件)
            3. lib目录里面下辖的jar包放到webapp/WEB-INF下
          3. 创建数据库环境

            create DATABASE NorthWind 
             
            USE NorthWind 
            
            CREATE table user(
            	id int primary key AUTO_INCREMENT,
              username VARCHAR(32) UNIQUE NOT NULL,
              password VARCHAR(32) NOT NULL
            )
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
          4. 创建包,创建user类对应user表,并且生成他的getter和setter方法、以及toString方法。

          5. 完成userDao

            public class UserDao{
              
              
              private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
              
              
              /**
             	 *	登录方法
             	 *	@param loginUser
             	 *	@return user包含用户全部数据
             	 */
              public User login(User loginUser){
                
                String sql = "select * from USER where username = ? and password = ?";
                User user = template.queryForObject(sql,
                        new BeanPropertyRowMapper<User>(User.class),
                        loginUser.getUsername(),loginUser.getPassword());
                return user;
              }
            }
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20
          6. 创建一个Util包,下面包含JDBCUtils的工具类,用于数据库连接

            public class JDBCUtils{
              
              private static DataSource ds;
              
              //	代码块用于初始化
              static {
                
                try {
                  //	1.加载配置文件
                  Properties pro = new Properties();
                  InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                  pro.load(is);
                  
                  //	2.初始化连接池对象
                  ds = DruidDataSourceFactory.createDataSource(pro);
                  
                } catch (IOException e){
                  e.printStackTrace();
                } catch (Exception e){
                  e.printStackTrace();
                }
              }
              
              // 获取链接池对象
              public static DataSource getDataSource(){
                return ds;
              }
              
              // 	获取连接Connection对象
              public static Connection getConnection() throws SQLException {
                return ds.getConnection();
              }
            }
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20
            • 21
            • 22
            • 23
            • 24
            • 25
            • 26
            • 27
            • 28
            • 29
            • 30
            • 31
            • 32
            • 33
          7. 编写LoginServlet类

            @WebServlet("/loginServlet")
            public class LoginServlet extends HttpServlet{
              
              @Override 
               protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws 		ServletException, IOException {
                 		this.doGet(req,resp);
                }
            
              	@Override
                protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                  
                  //	1.
                  req.setCharacterEncoding("utf-8");
                  
                  //	2.
                  String username = req.getParameter("username");
                  String pwd = req.getParameter("password");
                  
                  //	3.
                  User loginUser = new (username,pwd);
                  
                  //	4.
                  UserDao userDao = new UserDao();
                  User user = userDao.login(loginUser);
                  
                  //	5.
                  if(user==null){
                    //	登录失败
                    
                    req.getrequestDispatcher("/failServlet").forward(req,resp);
                  }else{
                    //	登录成功
                    req.setAttribute("user",user);
                    req.getrequestDispatcher("/successServlet").forward(req,resp);
                  }
                }
              }
            }
            
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9
            • 10
            • 11
            • 12
            • 13
            • 14
            • 15
            • 16
            • 17
            • 18
            • 19
            • 20
            • 21
            • 22
            • 23
            • 24
            • 25
            • 26
            • 27
            • 28
            • 29
            • 30
            • 31
            • 32
            • 33
            • 34
            • 35
            • 36
            • 37
            • 38
            • 39
          8. 实现FailServlet和SuccessServlet

          9. BeanUtils工具类简化数据封装

            Map<Srting ,String[]>map = req.getParameterMap();
            User loginUser = new User();
            
            //	使用BeanUtils
            try{
              BeanUtils.populate(loginUser,map);
            }catch (Exception e){
              e.printStackTrace();
            }
            
            • 1
            • 2
            • 3
            • 4
            • 5
            • 6
            • 7
            • 8
            • 9

            用于封装javaBean的工具类

            1. JavaBean:标准的Java类
              1. JavaBean的要求:
                1. 类必须被public修饰
                2. 必须提供空参数的构造器
                3. 成员变量必须使用private修饰
                4. 提供公共setter和getter方法
              2. 功能:封装数据
            2. 概念:
              1. 成员变量:就是那些变量
              2. 属性:setter和getter方法截取后的产物(大多数时候和成员变量一样,在有些特例下不一样)
                1. 例如:getUserName() -> Username --> username 这是一般情况下属性和成员变量的映射
                2. getterXingbie() 这个方法去修改gender值,类的属性叫xingbie而不是gender
            3. 方法:
              1. setProperty( )
              2. getProperty( )
              3. populate( ) 最重要
  • 相关阅读:
    Python代码自动转成其他编程语言代码
    通过股票量化交易券商接口如何减少发生亏损的风险?
    Mac 安装nvm
    基于图搜索的规划算法之A*家族(一):A*算法
    java-net-php-python-java雅思教育培训信息管理系统计算机毕业设计程序
    k8s的service mesh功能有那些
    景联文科技:3D点云标注应用场景和专业平台
    华为GAUSSDB集成
    Mysql数据库指定某数据库或某表赋予增删改查操作权限各类划分权限的方法总结实战
    高可用containerd搭建K8s集群【v1.25】
  • 原文地址:https://blog.csdn.net/lannister_awalys_pay/article/details/127643356