JavaWeb 登陆界面
实例:登陆界面
案例需求
1.编写login.html
登录页面:username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,Data_Hive数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误
分析
- 创建项目,导入html页面,配置文件,jar包 (不要忘记将lib添加到库!)
- 创建数据库环境
数据库:Data_Hive
表:USER
sudo service mysql start
mysql -u root -p
CREATE DATABASE Data_Hive;
USE Data_Hive;
CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(32) UNIQUE NOT NULL,password VARCHAR(32) NOT NULL
);
- 创建包
com.hive.domain
, 创建类User
package com.hive.domain;/*** @author Hive* Description:用户的实体类* Date: 2022/2/5 20:26*/
public class User {private int id;private String username;private String password; //Alt+Ins 生成 GetterSetter toStringpublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
接下来一般先写操作数据库逻辑的代码,再写Servlet
4.创建包com.hive..util
,编写工具类JDBCUtils
package com.hive.Dao;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;/*** @author Hive* Description:JDBC工具类 使用Durid连接池* Date: 2022/2/5 20:37*/
public class JDBCUtils {private static DataSource ds;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();}
}
- 创建包
com.hive.dao
,创建类UserDao
,提供login
方法
DAO(Data Access Object) 数据访问对象,是一个面向对象的数据库接口
package com.hive.Dao;import com.hive.domain.User;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;/*** @author Hive* Description:操作数据库中User表的类* Date: 2022/2/5 20:34*/
public class UserDao {//声明JDBCTemplate对象供本类中所有方法共用// (JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。)private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 登录方法* @param loginUser 只有用户名和密码* @return user包含用户全部数据,若没有查询到返回null*/public User login(User loginUser){try {//1.编写sqlString sql = "select * from USER where username = ? and password = ?";//2.调用query方法User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(), loginUser.getPassword());return user;} catch (DataAccessException e) {e.printStackTrace();//记录日志return null;}}
}
写完本类后即测试,创建com.hive.test
包 创建UserDaoTest
类测试,养成良好习惯
package com.hive.test;import com.hive.Dao.UserDao;
import com.hive.domain.User;
import org.junit.Test;/*** @author Hive* Description:* Date: 2022/2/5 20:57*/
public class UserDaoTest {@Testpublic void testLogin(){User loginuser=new User();loginuser.setUsername("Hive");loginuser.setPassword("12345");UserDao dao = new UserDao();User user = dao.login(loginuser);System.out.println(user);}
}
测试通过
- 编写
com.hive.web.servlet.LoginServlet
类
package com.hive.web.servlet;import com.hive.dao.UserDao;
import com.hive.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;/*** @author Hive* Description:* Date: 2022/2/5 21:37*/
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.设置编码req.setCharacterEncoding("utf-8");//2.获取请求参数String username = req.getParameter("username");String password = req.getParameter("password");//3.封装user对象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);//4.调用UserDao的login方法UserDao dao = new UserDao();User user = dao.login(loginUser);//5.判断userif(user == null){//登录失败,转发req.getRequestDispatcher("/failServlet").forward(req,resp);}else{//登录成功//存储数据于request域中,用于转发后调用req.setAttribute("user",user);//转发req.getRequestDispatcher("/successServlet").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
- 编写
FailServlet
和SuccessServlet
类
package com.hive.web.servlet;import com.hive.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;/*** @author Hive* Description:* Date: 2022/2/5 21:59*/
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取request域中共享的user对象User user = (User) request.getAttribute("user");if(user != null){//给页面写一句话//设置编码response.setContentType("text/html;charset=utf-8");//输出response.getWriter().write("登录成功!"+user.getUsername()+",欢迎您");}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
package com.hive.web.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;/*** @author Hive* Description:* Date: 2022/2/5 21:59*/
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//给页面写一句话//设置编码response.setContentType("text/html;charset=utf-8");//输出try {response.getWriter().write("登录失败,用户名或密码错误");} catch (IOException e) {e.printStackTrace();}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/025651023f1a4f4281173375ff5005e1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQWx2ZXVz,size_20,color_FFFFFF,t_70,g_se,x_16
login.html
中form
表单的action
路径的写法虚拟目录+Servlet的资源路径
注意,mysql8 和mysql5的druid配置文件有所不同
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.64.1:3306/Data_Hive?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=pxl531
filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
- BeanUtils工具类,简化JavaBean的数据封装
当一条记录中数据项过多时手动封装太麻烦,使用BeanUtils工具类,简化数据封装
将 commons-beanutils-1.8.0.jar
添加到/web/WEB-INF/lib
更改LoginServlet.java内部分代码
//2. 获取所有请求参数Map<String, String[]> map = req.getParameterMap();//3. 创建User对象User loginUser = new User();//3.2 使用BeanUtils封装try {BeanUtils.populate(loginUser, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}
JavaBean:标准的Java类
- 要求:
- 类必须被public修饰
- 必须提供空参的构造器
- 成员变量必须使用private修饰
- 提供公共setter和getter方法
- 功能:封装数据
- 要求:
概念:
成员变量:
属性:setter和getter方法截取后的产物
例如:getUsername() --> Username–> username方法:
setProperty()
//设置属性getProperty()
//获得属性populate(Object obj , Map map)
:将map集合的键值对信息,封装到对应的JavaBean对象中
增加文件下载功能
- 页面显示超链接
- 点击超链接后弹出下载提示框
- 完成图片文件下载
- 分析:
- 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框。不满足需求
- 任何资源都必须弹出下载提示框
- 使用响应头设置资源的打开方式:
content-disposition:attachment;filename=xxx
- 步骤:
- 定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename
- 定义Servlet
- 获取文件名称
- 使用字节输入流加载文件进内存
- 指定response的响应头: content-disposition:attachment;filename=xxx
- 将数据写出到response输出流
问题:
中文文件问题
- 解决思路:
- 获取客户端使用的浏览器版本信息
- 根据不同的版本信息,设置filename的编码方式不同
- 解决思路:
JavaWeb 登陆界面相关推荐
- javaWeb项目用过滤器filter实现登陆成功后才能访问主页面,否则直接输入主页面的地址自动跳转到登陆界面
想用Filter实现一个登陆验证的功能,实现登陆成功后才能访问主页面,否则直接输入主页面的地址会自动跳转到登陆界面 原理很简单,每次登陆成功后,创建一个session域对象,将登陆成功的用户名保存在s ...
- java中登陆界面怎么连接到下一个界面啊_JavaWeb登陆成功后跳转到上一个页面
JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...
- JavaWeb登陆成功后跳转到上一个页面
JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...
- springboot整合mybaits-plusmybaits实现用户登陆界面(适合入门)+唯美界面
springboot整合mybaits-plus/mybaits实现用户登陆界面(一步步解析)+唯美界面 文章目录 springboot整合mybaits-plus/mybaits实现用户登陆界面(一 ...
- 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面
[登录异常解决]Ubuntu 输入正确的密码后重新返回到登陆界面 参考文章: (1)[登录异常解决]Ubuntu 输入正确的密码后重新返回到登陆界面 (2)https://www.cnblogs.co ...
- 描述linux系统从开机到登陆界面的启动过程
简述: 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核kernel 5.启动init进程 6.读取inittab文件,执行rc.sysinit,rc等脚本 7.启动minge ...
- QML与C++交互:登陆界面设计
环境: 主机:WIN7 开发环境:Qt5.2.1 说明: QML设计前台界面,C++后台负责逻辑 效果图: 源代码: 前台qml文件 login.qml [javascript] view plain ...
- 怎么显示全部背景图片_Windows 聚焦图片在锁屏界面和登陆界面没有显示
一. Windows 聚焦图片在锁屏界面和登陆界面没有显示 首先请确定设置中聚焦功能是否已经打开.打开设置-个性化-锁屏界面,确定一下背景下拉框选项是否已经设置为Windows聚焦.同时设置" ...
- wp-login.php 404页面,wordpress隐藏后台登陆界面,自动跳转首页或404
原标题:wordpress隐藏后台登陆界面,自动跳转首页或404 我们用wordpress程序安装建站后发现所有人的网站后台都是自己域名/wp-admin,这样是否存在安全隐患?那么我们如何来修改或是 ...
- 关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法
关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法 1. 找到以下路径 ...\Kingdee\K3ERP\KDHR\SITEFILE\WEBUI\ 找到"Login. ...
最新文章
- matlab 摄像头拍照,matlab摄像头拍照
- Struts2——学习(5):页面跳转
- SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略
- AIX 5.3安装Oracle 10g错误案例--ruInstaller
- 【HTML5CSS3进阶学习02】Header的实现·CSS中的布局
- Linux cpu亲和力
- jqgrid columnChooser列的自定义及存储和获取
- python assert_Python中何时使用断言 assert
- 遨博机器人展示_高交会:智能机器人走入大众生活
- Coded UI Test学习网站
- 蜗轮蜗杆减速机如何选择制造厂
- 19-备忘录模式Quarkus实现
- 计算机科学丛书20周年——20本跨世经典 夯筑科技基石
- Vue3+vite配置postcss-pxtorem报错[plugin:vite:css] Failed to load PostCss config
- sql增加数据的几种方法
- 计算机管理评价指标,评价指标体系
- PAT Basic level 1062 最简分数 (20分)
- Redis中存值是Hash冲突怎么解决的
- 我们已将Boost Note带到下一个高度。你体验了吗?
- js 获取复选框选中的值
热门文章
- 网站技术分析报告之——开心网_转载
- HTML鼠标悬停图片的动态效果,4种超酷鼠标滑过图片过渡动画特效
- 【PC工具】chrome谷歌浏览器最新离线安装版各种版本,最好用的浏览器没有之一...
- 寒江独钓:键盘的过滤 学习笔记
- ie11不兼容 html编辑器,IE11下使用eWebEditor编辑器
- windows 20003 扩展安装后不成功的原因
- 【CANdelaStudio编辑CDD】-0.2-将CDD转换成ODX/PDX诊断描述文件
- Oracle中的sys用户和system用户
- c语言圆周率小数点后500万位,圆周率小数点后500位数字是多少
- fedora linux搜狗输入法,GitHub - Hello-Linux/fedora-Sougou-Pinyin: fedora 搜狗拼音,安装超简单,各种精美皮肤!...