案例:用户登陆
需求:
1.编写login.html登录页面
username & passwprd两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登陆成功跳转到SuccessServlet展示:登陆成功!用户名,欢迎您
5.登陆失败跳转到FailServlet展示:登录失败,用户名或密码错误
分析:
1.编写login.html页面,表单form的action为/day14/loginServlet
2.编写一个User类,成员变量与数据库中的user表中的字段相同, 用于封装请求参数。
3.编写一个数据库连接工具类JDBCUtils,使用Druid数据库连接池技术来连接数据库
3.1将所需的jar包导入到WEB-INF下的libs目录
3.2使用静态代码块加载配置文件,初始化连接池对象
static{
//加载配置文件
Properties pro=new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//初始化连接池对象
DataSource ds=DruidDataSourceFactroy.createDataSource(pro);
}
3.3编写两个方法
1.获取数据库连接池对象 DataSource getDataSource()
2.获取数据库连接 Connection getConnection()
4.编写一个操作数据库的类Userdao,为了操作数据库更方便(此时需要一个工具类JDBCUtils)
4.1使用jdbcTemplate技术封装JDBC
jdbcTemplate template=new jdbcTemplate(JDBCUtils.getDataSource);
4.2编写验证登陆函数
User login(User loginuser){
try{
//定义sql语句
String sql="select *from user where username=? &&password=?";
//查询
User user=termplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),
loginuser.getusername(), loginuser.getpassword());
//此时如果查询失败会报错,抛异常。
//但是该异常为运行时异常,编译时检测不到,需要用try...catych来抓取
//快捷键ctrl+alt+T
return user;
}catch(DataAccessException e){
e.printStackTrace();
return null;
}
}
5.编写登陆页面LoginServlet,资源名称为/loginServlet.注意:编写方法时:使用try..catch抓取,不要抛出异常
5.1获取表单提交的请求参数 String getParameter(String name)
String username=request.getParameter("username");
String password=request.getParameter("password");
5.2将获取的参数封装为User对象 loginuser(此时需要一个User类)
User loginuser=new User(username,password);
5.3需要将 loginuser作为参数传入到操作数据库的方法中(此时需要一操作数据库的类)
User user=new Userdao().login(loginuser);
5.4判断返回的user对象的值
if(user==null){
//跳转到FailServlet页面
request.getResquestDispatcher("/failServlet").forward(resquest,response);
}else{
//设置request域共享数据
request.setAttribute("name",user.getusername());
//跳转到SuccessServlet页面
request.getRequestDispatcher("/successServlet").forward(request,response);
}
6.编写FailServlet和SuccessServlet响应操作页面
6.1FailServlet
response.setContextType("text/html;character=utf-8");
response.getWriter().write("登陆失败,用户名或密码错误");
6.2SuccessServlet
//获取request域数据
String name=request.getAttribute("name");
response.setContextType("text/html;character=utf-8");
response.getWriter().write("登陆成功!"+name+"欢迎您");