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 ...
随机推荐
- go cookie session
https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/06.1.html
- vue项目中,alert使用
methods:{ sendData() { ··· // 中间省略的代码 alert(`发送成功,连接失败的号码有:${failList}`) // failList里存的是后台返回的数据 } }
- vs同步配置
做法(整个流程的过程):1.安装插件2.在GitHub上生成token3.获取gistid4.使用2,3步生成的token和gistid 1.在vscode上安装 settings sync 插件(我 ...
- vue3响应式原理以及ref和reactive区别还有vue2/3生命周期的对比,第二天
前言: 前天我们学了 ref 和 reactive ,提到了响应式数据和 Proxy ,那我们今天就来了解一下,vue3 的响应式 在了解之前,先复习一下之前 vue2 的响应式原理 vue2 的响应 ...
- Android ViewPager2 + Fragment 联动
Android ViewPager2 + Fragment 联动 本篇主要介绍一下 ViewPager2 + Fragment , 上篇中简单使用了ViewPager2 实现了一个图片的滑动效果, 那 ...
- 4.10:Spark之wordcount
〇.概述 1.拓扑结构 2.目标 使用spark完成计数实验 一.启动环境 二.新建数据文件 三.查看文件内容 四.启动spark服务 五.编写代码 复制以下代码到shell中(复制后在终端右键-&g ...
- 【leetcode】剑指offer04二维数组查找
很巧妙地把矩阵转化为二叉搜索树(不过好像没什用) class Solution { public: bool findNumberIn2DArray(vector<vector<int&g ...
- go语言的切片特性
概述: 在使用切片进行赋值的时候,产生新的数组的指针指向原来的数组,只要修改新数组中的元素时,原来数组的元素也会改变. 测试代码: func TestSliceShareMemory(t *testi ...
- 你的 GitHub 年度报告「GitHub 热点速览 v.22.52」
辞旧迎新的日子,又是年度报告满天飞的时候.GitHub 也不落其他平台之后,推出了用户 GitHub Contributions 报告.不知道,今年的你是不是比去年搬了更多的砖呢?在本期的 News ...
- [OpenCV实战]43 使用OpenCV进行背景分割
运动背景分割法Background Segment主要是指通过不同方法拟合模型建立背景图像,将当前帧与背景图像进行相减比较获得运动区域.下图所示为检测图像: 通过前面的检测帧建立背景模型,获得背景图像 ...