学习Request时在servlet访问数据库的问题

学习request综合练习中的问题

在学习servlet的request的时候,我们编写了一个较为综合性的代码,要求如下:
一 要求
  1.在html页面上创建两个输入框,分别输入用户名和密码,点击登录,访问数据库,
  2. 用户名和密码如果存在,显示:xxx,欢迎你,如果不存在,显示登录失败 .

二 需求分析加代码
  1.导入jar包(druid数据库连接池jar包(1个),Jdbctemplate对象简化JDBC操作的jar包(5个), JDBC注册驱动jar包(1个),BeanUtils工具jar包(1个))
  2.准备html页面,表单里面包含2个输入框(用户名和密码)和一个提交按钮
  3.创建数据库的表,表里面添加id,用户名,密码字段,并添加一些数据.
  4.创建一个User用户实体类包含了成员变量,构造方法,getter和setter和toString方法
5.写一个JDBCUtils工具类,用来获取数据库连接池对象和获取连接,这里需要druid.properties的配置文件(注意配置文件里面信息的正确性),         获取里面的注册驱动类的路径,数据库的连接路径,数据库用户名和密码
6.写一个数据库操作的类,使用Jdbctemplate操作数据库在这里插入图片描述
7.写一个测试类,测试一下上面的查询方法,正确状态下返回User对象,错误状态下返回null. 截止到这里,我们测试的结果是正确的,可以从数据库请求到对应的内容并封装为user对象,如果查询错误内容会返回null,满足我们的要求 在这里插入图片描述
8.编写Servlet类,继承HTTPServlet,重写dopost()和doget(),首先设置post获取方式的字符编码问题, 获取用户的请求数据,封装在一个map集合里面 使用BeanUtils(导包)工具类,使用apacher的类,使用存放数据的map集合和创建的一个空的User对象, BeanUtils.populate(user,map),将获取的参数封装成一个用户实体类对象,调用操作数据库类中的登录方法 获取返回值,做出判断.
  在这servlet类中,调用loginCheck()方法,始终报错空指针异常
在这里插入图片描述
9.根据返回结果,使用request对象实现两种情况的请求转发 成功:请求转发到SucessServlet页面,并获取共享数据(用户名),显示:用户名,恭喜你登陆成功 失败:请求转发到FailServlet页面,显示登录失败

讨论的问题:

  1. 使用ClassLoader的静态方法getSystemResourceAsStream(String name)和使用 类名称.class.getClassloader.getResourceAsStream(String name)在加载字节码文件进内存获取输入流时候的区别?
  2. Tomcat部署web项目地址和工作空间地址的区别.
      两个问题之间息息相关,是导致本次出错的主要原因.

解释:
  在学习JDBC的时候,我们使用druid连接池去查询数据库的时候,使用的druid.properties文件,始终是放在项目的src文件下面,我们使用ClassLoader.getSystemResourceAsStream(“druid.properties”)获取到输入流对象,然后加载到Properties集合中,进而使用DruidDataSourceFactory.createDataSource(pro)获取到数据库连接池对象,进行查询,这一切都是没有问题的,这也验证了我们在第7步使用Junit单元测试的时候为什么获取的结果是正确的.
  但是,在使用servlet调用这个方法的时候,我们无法获得返回的user对象,还报错空指针异常.我们先说一下工作空间和Tomcat部署的web项目位置的区别:
  工作空间:web项目存在于电脑的位置.
  Tomcat部署的web项目位置:在工作空间的out文件夹下面.里面包含了原src目录下的.xml文件和.properties文件以及编译之后生成的.java文件,也就是web项目下的web文件夹里面的内容.
  也就是说,在服务器启动之后,原本src目录下的.java文件和.xml文件以及.properties文件都存放到web文件夹下面.
  而使用ClassLoader的静态方法getSystemResourceAsStream(String name)只能获取到src目录下的配置文件,在服务器开启之后,.properties文件被存放到web文件夹下,使用该方法找不到对应的properties文件,所以会报错.在Junit单元测试里面,是没有开启服务器的,所以还可以找到该配置文件.
  所以我们不可以使用这个方法,那么使用类名称.class.getClassloader.getResourceAsStream("/druid.properties")的方式,默认则是从ClassPath根下(WEB-INF\classes这个目录下)获取.在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值