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 ...
随机推荐
- 在 Tomcat 10.x 上部署 SpringMVC 5.x
在Tomcat10.x 上部署 SpringMVC 5.x的时候,项目一直无法访问 运行截图 原因 Tomcat10基于Jakarta EE 9,其中api的包名已经从javax更改到jakarat ...
- navisworks2021保姆级下载安装教程
navisworks2021 WIN10 64位安装步骤:1.先使用"百度网盘客户端"下载NV_CN_2021软件安装包到电脑磁盘里,并解压缩,安装前先断网,然后找到Autodes ...
- 【云原生 · Kubernetes】部署kube-apiserver集群
个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying 部署kube-apiserver集群 10.1 创建kube-apiserver 证书 10 ...
- tcp网络交互的理解 以及代码实现
服务端 import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind(("127.0. ...
- 【基础语法规范】BC1:Hello Nowcoder
语言1:Java public class Main{ public static void main(String[] args){ System.out.println("Hello N ...
- 云原生 • Kubernetes 认识 k8s、k8s 架构、核心概念点介绍
云原生 • Kubernetes 认识 k8s.k8s 架构.核心概念点介绍 一.Kubernetes 简介Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌.谷歌早在十几年之 ...
- 李宏毅机器学习笔记:从0到写AI
part1.基本介绍 1.机器学习的三个任务 一般情况下,我们在机器学习中有三个基本任务,分别是Regression Classification和Structured Regression是计算数值 ...
- Blazor组件自做十二 : Blazor Pdf Reader PDF阅读器 组件 (新版 7.1 移除pdfobject)
Blazor Pdf Reader PDF阅读器 组件 示例: https://www.blazor.zone/PdfReaders https://blazor.app1.es/pdfReaders ...
- avue属性详解和使用介绍
官方文档:https://www.avuejs.com/form/form.html <template> <!-- 基础组件 --> <basic-container& ...
- RabbitMQ、RocketMQ、Kafka延迟队列实现
延迟队列在实际项目中有非常多的应用场景,最常见的比如订单未支付,超时取消订单,在创建订单的时候发送一条延迟消息,达到延迟时间之后消费者收到消息,如果订单没有支付的话,那么就取消订单. 那么,今天我们需 ...