刚开始发现- -我好像忘记了JdbcTemp的知识了,以为自己学漏了,重新回去看了一下,还好还记得,所以今天做一个案例:

  • 案例分析:

    登录的实现

  • 步骤:

    • 先导入jar包,然后写一个简单的html页面
    • 创建数据库一个新的数据库 create database~
    • 导入数据库池的配置文件druid.properties(记得改里面的新数据库名称)
    • 写util方法包和JDBCUtils工具类
    • 开始将目录结构写了写包,我们先写了DAO层,数据库连接的部分
    • 写一个domain包,放入User类 并写setget tostring方法
    • 然后再写一个包,放道层测试类,然后可以看到我们的DAO层是没报错的
    • 所以继续写servelet,再写servelet可以发现我们的html页面里的action还没设定(红色是因为我就在这里查了一个下午错 悲伤 铭记)
    • 再写failservlet copy可以得到 successservlet 当然因为successservlet里面需要用到反射:
      -获取request域中的共享的username对象
      -再用一个if方法来避免空指针异常

  • 遇到的问题:

The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.   404

The server encountered an unexpected condition that prevented it from fulfilling the request. 500

  • 解决思路:

因为在视频里其实是对于虚拟路径不太理解,而且在test类中对与UserDao其实是没有出错的,所以没有放在那里,是不是页面输入的值没有获取,还是直接都没有跑起来呢?
于是我带着问题开始查资料,首先查看了自己的项目结构,

果然,我的lib包名字叫libs,马上改名,重新导入包;

随之发现新的问题,就是一直显示java.loginServlet的错误 doPost的问题
我就去到LoginServlet里查看,果然,

在DoPost方法里没有写doGet;

(听课一定要看着老师敲完这部分,理解了再自己敲,然后检查,我就是一边听一边敲,搞笑了)接着看到弹幕说2021的idea好像是Servlet不用加  / 所以我觉得应该是这里出问题了

Tomcat里的虚拟路径给改了,改成一个斜杠,然后再

我尝试着把前面的给删掉,然后又删掉了/和所有servlet的/ (包含fail和success的)

还是错 报错404 我就想应该是这里不对劲 再改改 就把斜杠加上了,像图上的(图上的是我改好的)

最后成功啦!!喜极而泣,撒花!

  • 代码:  

    • druid.properties

      driverClassName=com.mysql.jdbc.Driver
      url=jdbc:mysql:///adminDemo
      username=root
      password=root
      #最初始化的连接数
      initialSize=5
      maxActive=10
      maxWait=3000
    • JDBCUtils

      package cn.com.util;
      
      import com.alibaba.druid.pool.DruidDataSourceFactory;
      
      import javax.sql.DataSource;
      import java.io.IOException;
      import java.io.InputStream;
      import java.sql.Connection;
      import java.sql.SQLException;
      import java.util.Properties; public class JDBCUtils { private static DataSource ds;
      /*
      用静态代码块加载数据连接池
      用druid.properties封装成键值对
      */
      static {
      try {
      //1 加载配置文件
      Properties pro = new Properties();
      // 使用classLoader加载配置文件,获取字节输入流
      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();
      }
      }

      JDBCUtils

    • UserDao(USER自己生成 不写这个)

      package cn.com.dao;
      
      import cn.com.domain.User;
      import cn.com.util.JDBCUtils;
      import org.springframework.dao.DataAccessException;
      import org.springframework.jdbc.core.BeanPropertyRowMapper;
      import org.springframework.jdbc.core.JdbcTemplate; /*
      操作数据库中的user表
      */
      public class UserDao {
      //声明jdbctmpl来共用
      private JdbcTemplate tmpl = new JdbcTemplate(JDBCUtils.getDataSource());
      /**
      * login method
      * @param loginUser username and password
      * @return User include all data
      */
      public User login(User loginUser){
      try {
      //1 编写sql
      String sql ="SELECT *FROM USER WHERE username = ? AND PASSWORD = ?;";
      //2 调用query方法
      //test中若其中不匹配,也就是sql没有返回1条数据就报错了,
      // 因为只有查询到结果才可以将数据信息返回成功,
      //那么我们就可以用一个catch住(快捷键:ctrl+alt+t)
      //原理:如果没有查询到返回值就返回null,有就返回data
      User user = tmpl.queryForObject(sql,
      new BeanPropertyRowMapper<User>(User.class),
      loginUser.getUsername(), loginUser.getPassword());
      return user;
      } catch (DataAccessException e) {
      e.printStackTrace();//记录日志
      return null;
      }
      }
      }

      UserDao

    • LoginServlet

      package cn.com.servlet;
      
      import cn.com.dao.UserDao;
      import cn.com.domain.User; import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException; @WebServlet("/LoginServlet")
      public class LoginServlet extends HttpServlet { @Override
      protected void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {
      //1 设置编码
      request.setCharacterEncoding("utf-8");
      //2 获取请求参数
      String username = request.getParameter("username");
      String password = request.getParameter("password");
      //3 封装user对象
      User loginuser = new User();
      loginuser.setUsername(username);
      loginuser.setPassword(password);
      //4 调用userdao的login方法
      UserDao userdao = new UserDao();
      //find
      // System.out.println(loginuser.getUsername());
      // System.out.println(loginuser.getPassword());
      User user = userdao.login(loginuser);
      // System.out.println("************");
      //5判断user
      if (user == null){
      //fail 需要转发
      request.getRequestDispatcher("/failServlet")
      .forward(request,response);
      }else {
      //success
      //存储数据
      request.setAttribute("user",user);
      //转发
      request.getRequestDispatcher("/successServlet")
      .forward(request,response);
      }
      } @Override
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doGet(request, response);
      }
      }

      LoginServlet

    • faiServlet

      package cn.com.servlet;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException; @WebServlet("/failServlet")
      public class failServlet extends HttpServlet {
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //给页面写一句话
      //设置编码
      response.setContentType("text/html;charset=utf-8");
      //output
      response.getWriter().write("fail,username or password is worst");
      } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doPost(request,response);
      }
      }faiServlet
    • package cn.com.servlet;
      
      import cn.com.domain.User;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException; @WebServlet("/successServlet")
      public class successServlet extends HttpServlet {
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //给页面写一句话 因为下面需要写的是用户名,所以在前面要写一个获取username
      //获取request域中的共享的username对象,因为知道这个就是user对象
      //所以给一个强制转换
      User user = (User) request.getAttribute("user");
      //用if来避免空指针异常
      if (user != null){
      //设置编码
      response.setContentType("text/html;charset=utf-8");
      //output
      response.getWriter().write("success"+
      user.getUsername()+"welcome!");
      } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doPost(request,response);
    • successServlet

      package cn.com.servlet;
      
      import cn.com.domain.User;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException; @WebServlet("/successServlet")
      public class successServlet extends HttpServlet {
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //给页面写一句话 因为下面需要写的是用户名,所以在前面要写一个获取username
      //获取request域中的共享的username对象,因为知道这个就是user对象
      //所以给一个强制转换
      User user = (User) request.getAttribute("user");
      //用if来避免空指针异常
      if (user != null){
      //设置编码
      response.setContentType("text/html;charset=utf-8");
      //output
      response.getWriter().write("success"+
      user.getUsername()+"welcome!");
      } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      this.doPost(request,response);
      }
      }

      successServlet

    • login.html
      login页面

      Hehe是属性 所以可以不一样 方法操作的是成员变量的值

       

javaweb-LoginDemo在JdbcTemp的登录实现及总结+进阶javabean改进的更多相关文章

  1. JavaWeb 使用Filter实现自动登录

    思路 使用cookie存储账号.密码,使用Filter拦截,从cookie中取出账号.密码.若用户要注销|登出.不再想使用自动登录,将cookie的有效期设置为0即可. 浏览器可以查看Cookie,不 ...

  2. JavaWeb 之 Filter 验证用户登录案例

    需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...

  3. 从零玩转JavaWeb系列7web服务器-----用户登录界面二维码的制作

    1.用eclipse工具新建一个Dynamic Web Project工程如下: 2.在Java Resources的src目录下新建一个包,包名称为com.it666.code 3.在com.it6 ...

  4. 以登录实现理解Servlet+jsp+JavaBean开发

    写在前面:菜鸟拙见,望请纠正 学过servlet的都知道,书本上一直说servlet一直作为控制器使用,它不实现view层,也不做具体的事务处理,那servlet到底是干什么的哪?怎么合理的用它呐?? ...

  5. JavaWeb_(session和application)用户登录注册模板_进阶版

    用户登录注册模板_基础版 传送门 用户登录注册模板进阶版 添加了获得获得当前登录用户信息及存储登录人数 用户登录后,在首页.注册页.登录页显示登录用户信息和存储登录人数信息 目录结构 <%@pa ...

  6. JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例

    ¨JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为: ¨<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件. ¨< ...

  7. 【Java】JavaWeb 登录检查及界面跳转

    场景 一般javaweb网站都有用户登录,而有一些操作必须用户登录才能进行,常见流程:用户请求-->后台判断是否登录-->没登录跳转到登录界面,登录用户正常操作 解决思路 在用过滤器过滤请 ...

  8. 简单登录注册实现(Java面向对象复习)

    简单登录注册的实现(面向对象的复习) 需求: 设计用户类,包含用户名和密码两个属性 设计LoginDemo类设计用户登录方法 用户有三次登录机会,如果连续三次登录失败则退出程序 功能实现页面:     ...

  9. WPF MVVM从入门到精通2:实现一个登录窗口

    原文:WPF MVVM从入门到精通2:实现一个登录窗口   WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 ...

  10. Node.js开发入门—使用cookie保持登录

    这次来做一个站点登录的小样例,后面会用到. 这个演示样例会用到Cookie.HTML表单.POST数据体(body)解析. 第一个版本号,我们的用户数据就写死在js文件中. 第二个版本号会引入Mong ...

随机推荐

  1. 【RPC和Protobuf】之Protobuf环境配置及组合工作

    Protobuf定义:是一种数据描述语言,作为接口规范的描述语言,可作为设计安全的跨语言RPC接口的基础工具 一.Protobuf入门 作用:最终保证RPC接口规范和安全 最基本的数据单元:messa ...

  2. Go实现常用软件设计模式三:生成器模式

    目录: 举个栗子 概念介绍 使用场景 1.举个栗子 2.概念介绍 使用一个中间件来帮助我们填充创建对象参数 优点: 将创建逻辑集中在一起 复用了不同参数创建逻辑 缺点: 新增生成器类 3.使用场景 m ...

  3. MongoDB - 索引知识

    索引简介 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录. 索引支持 MongoDB 查询的高效执行.如果没有索引,MongoDB 必须扫描集合中每一个文档,以选择与查询语句 ...

  4. 单节点部署 gpmall 商城

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 1 修改主机名: [root@localhost ...

  5. Training: Stegano I

    原题链接:http://www.wechall.net/challenge/training/stegano1/index.php 很明显,这是一道图像隐写题,因为他说的 我们右键图片,点击其他窗口打 ...

  6. 电脑无法自动获取ip地址

    1.按下win+r,输入cmd,打开命令提示符;2.执行ipconfig命令看下能否获取到ip地址:3.若不能,执行ipconfig /renew命令重新获取ip:4.执行ipconfig命令看下能否 ...

  7. [0x12] 132.小组队列

    题意 link(more:UVA540) 简化题意:对 \(n\) 个小组排队,每个小组有至多 \(m\) 个成员(每个成员有唯一编号 \(x\)),当一个人来到队伍时,如果队中有同组成员,直接插入其 ...

  8. [OpenCV实战]33 使用OpenCV进行Hough变换

    目录 1 什么是霍夫变换 1.1 应用霍夫变换以检测图像中的线条 1.2 累加器 1.3 线条检测 1.4 圆环的检测 2 代码 3 参考 1 什么是霍夫变换 霍夫变换是用于检测图像中的简单形状(诸如 ...

  9. vivo 故障定位平台的探索与实践

    作者:vivo 互联网服务器团队- Liu Xin.Yu Dan 本文基于故障定位项目的实践,围绕根因定位算法的原理进行展开介绍.鉴于算法有一定的复杂度,本文通过图文的方式进行说明,希望即使是不懂技术 ...

  10. 03-Verilog语法

    Verilog语法 1 Register 组合逻辑-->寄存器-->组合逻辑-->寄存器 Register是一个变量,用于存储值,并不代表一个真正的硬件DFF. reg A,C; / ...