javaweb-LoginDemo在JdbcTemp的登录实现及总结+进阶javabean改进
刚开始发现- -我好像忘记了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是属性 所以可以不一样 方法操作的是成员变量的值
- druid.properties
javaweb-LoginDemo在JdbcTemp的登录实现及总结+进阶javabean改进的更多相关文章
- JavaWeb 使用Filter实现自动登录
思路 使用cookie存储账号.密码,使用Filter拦截,从cookie中取出账号.密码.若用户要注销|登出.不再想使用自动登录,将cookie的有效期设置为0即可. 浏览器可以查看Cookie,不 ...
- JavaWeb 之 Filter 验证用户登录案例
需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...
- 从零玩转JavaWeb系列7web服务器-----用户登录界面二维码的制作
1.用eclipse工具新建一个Dynamic Web Project工程如下: 2.在Java Resources的src目录下新建一个包,包名称为com.it666.code 3.在com.it6 ...
- 以登录实现理解Servlet+jsp+JavaBean开发
写在前面:菜鸟拙见,望请纠正 学过servlet的都知道,书本上一直说servlet一直作为控制器使用,它不实现view层,也不做具体的事务处理,那servlet到底是干什么的哪?怎么合理的用它呐?? ...
- JavaWeb_(session和application)用户登录注册模板_进阶版
用户登录注册模板_基础版 传送门 用户登录注册模板进阶版 添加了获得获得当前登录用户信息及存储登录人数 用户登录后,在首页.注册页.登录页显示登录用户信息和存储登录人数信息 目录结构 <%@pa ...
- JavaWeb学习记录(二十)——Model1模式(javaBean+jsp)实现简单计算器案例
¨JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为: ¨<jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件. ¨< ...
- 【Java】JavaWeb 登录检查及界面跳转
场景 一般javaweb网站都有用户登录,而有一些操作必须用户登录才能进行,常见流程:用户请求-->后台判断是否登录-->没登录跳转到登录界面,登录用户正常操作 解决思路 在用过滤器过滤请 ...
- 简单登录注册实现(Java面向对象复习)
简单登录注册的实现(面向对象的复习) 需求: 设计用户类,包含用户名和密码两个属性 设计LoginDemo类设计用户登录方法 用户有三次登录机会,如果连续三次登录失败则退出程序 功能实现页面: ...
- WPF MVVM从入门到精通2:实现一个登录窗口
原文:WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录窗口 WPF MVVM从入门到精通3:数据绑定 ...
- Node.js开发入门—使用cookie保持登录
这次来做一个站点登录的小样例,后面会用到. 这个演示样例会用到Cookie.HTML表单.POST数据体(body)解析. 第一个版本号,我们的用户数据就写死在js文件中. 第二个版本号会引入Mong ...
随机推荐
- 【RPC和Protobuf】之Protobuf环境配置及组合工作
Protobuf定义:是一种数据描述语言,作为接口规范的描述语言,可作为设计安全的跨语言RPC接口的基础工具 一.Protobuf入门 作用:最终保证RPC接口规范和安全 最基本的数据单元:messa ...
- Go实现常用软件设计模式三:生成器模式
目录: 举个栗子 概念介绍 使用场景 1.举个栗子 2.概念介绍 使用一个中间件来帮助我们填充创建对象参数 优点: 将创建逻辑集中在一起 复用了不同参数创建逻辑 缺点: 新增生成器类 3.使用场景 m ...
- MongoDB - 索引知识
索引简介 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录. 索引支持 MongoDB 查询的高效执行.如果没有索引,MongoDB 必须扫描集合中每一个文档,以选择与查询语句 ...
- 单节点部署 gpmall 商城
个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 1 修改主机名: [root@localhost ...
- Training: Stegano I
原题链接:http://www.wechall.net/challenge/training/stegano1/index.php 很明显,这是一道图像隐写题,因为他说的 我们右键图片,点击其他窗口打 ...
- 电脑无法自动获取ip地址
1.按下win+r,输入cmd,打开命令提示符;2.执行ipconfig命令看下能否获取到ip地址:3.若不能,执行ipconfig /renew命令重新获取ip:4.执行ipconfig命令看下能否 ...
- [0x12] 132.小组队列
题意 link(more:UVA540) 简化题意:对 \(n\) 个小组排队,每个小组有至多 \(m\) 个成员(每个成员有唯一编号 \(x\)),当一个人来到队伍时,如果队中有同组成员,直接插入其 ...
- [OpenCV实战]33 使用OpenCV进行Hough变换
目录 1 什么是霍夫变换 1.1 应用霍夫变换以检测图像中的线条 1.2 累加器 1.3 线条检测 1.4 圆环的检测 2 代码 3 参考 1 什么是霍夫变换 霍夫变换是用于检测图像中的简单形状(诸如 ...
- vivo 故障定位平台的探索与实践
作者:vivo 互联网服务器团队- Liu Xin.Yu Dan 本文基于故障定位项目的实践,围绕根因定位算法的原理进行展开介绍.鉴于算法有一定的复杂度,本文通过图文的方式进行说明,希望即使是不懂技术 ...
- 03-Verilog语法
Verilog语法 1 Register 组合逻辑-->寄存器-->组合逻辑-->寄存器 Register是一个变量,用于存储值,并不代表一个真正的硬件DFF. reg A,C; / ...