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");
          
    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. 分析:
        Java-1101_第1张图片

      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
          )
          
        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;
            }
          }
          
        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();
            }
          }
          
        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);
                }
              }
            }
          }
          
          
        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();
          }
          

          用于封装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( ) 最重要

你可能感兴趣的:(JAVA开发,java,servlet,tomcat)