实例:登陆界面

案例需求

1.编写login.html登录页面:username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,Data_Hive数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

分析

  1. 创建项目,导入html页面,配置文件,jar包 (不要忘记将lib添加到库!)
  2. 创建数据库环境

数据库: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
);

  1. 创建包 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();}
}
  1. 创建包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);}
}


测试通过

  1. 编写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);}
}
  1. 编写FailServletSuccessServlet
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

  1. login.htmlform表单的action路径的写法

    • 虚拟目录+Servlet的资源路径
  2. 注意,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
  1. 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();}
  1. JavaBean:标准的Java类

    1. 要求:

      1. 类必须被public修饰
      2. 必须提供空参的构造器
      3. 成员变量必须使用private修饰
      4. 提供公共setter和getter方法
    2. 功能:封装数据
  2. 概念:
    成员变量:
    属性:setter和getter方法截取后的产物
    例如:getUsername() --> Username–> username

  3. 方法:

    1. setProperty() //设置属性
    2. getProperty() //获得属性
    3. populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中

增加文件下载功能

  1. 页面显示超链接
  2. 点击超链接后弹出下载提示框
  3. 完成图片文件下载
  • 分析:
  1. 超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框。不满足需求
  2. 任何资源都必须弹出下载提示框
  3. 使用响应头设置资源的打开方式:
    • content-disposition:attachment;filename=xxx
  • 步骤:
  1. 定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename
  2. 定义Servlet
    1. 获取文件名称
    2. 使用字节输入流加载文件进内存
    3. 指定response的响应头: content-disposition:attachment;filename=xxx
    4. 将数据写出到response输出流
  • 问题:

  • 中文文件问题

    • 解决思路:

      1. 获取客户端使用的浏览器版本信息
      2. 根据不同的版本信息,设置filename的编码方式不同

JavaWeb 登陆界面相关推荐

  1. javaWeb项目用过滤器filter实现登陆成功后才能访问主页面,否则直接输入主页面的地址自动跳转到登陆界面

    想用Filter实现一个登陆验证的功能,实现登陆成功后才能访问主页面,否则直接输入主页面的地址会自动跳转到登陆界面 原理很简单,每次登陆成功后,创建一个session域对象,将登陆成功的用户名保存在s ...

  2. java中登陆界面怎么连接到下一个界面啊_JavaWeb登陆成功后跳转到上一个页面

    JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...

  3. JavaWeb登陆成功后跳转到上一个页面

    JavaWeb登陆成功后跳转到上一个页面,这个标题注定要词不达意,你可能会遇到这样的情形,当点击页面的某个请求时,由于用户未登录,需要跳转到登录页,用户登录成功后,再跳转到上一个页面:还有一种情况,多 ...

  4. springboot整合mybaits-plusmybaits实现用户登陆界面(适合入门)+唯美界面

    springboot整合mybaits-plus/mybaits实现用户登陆界面(一步步解析)+唯美界面 文章目录 springboot整合mybaits-plus/mybaits实现用户登陆界面(一 ...

  5. 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面

    [登录异常解决]Ubuntu 输入正确的密码后重新返回到登陆界面 参考文章: (1)[登录异常解决]Ubuntu 输入正确的密码后重新返回到登陆界面 (2)https://www.cnblogs.co ...

  6. 描述linux系统从开机到登陆界面的启动过程

    简述: 1.开机BIOS自检 2.MBR引导 3.grub引导菜单 4.加载内核kernel 5.启动init进程 6.读取inittab文件,执行rc.sysinit,rc等脚本 7.启动minge ...

  7. QML与C++交互:登陆界面设计

    环境: 主机:WIN7 开发环境:Qt5.2.1 说明: QML设计前台界面,C++后台负责逻辑 效果图: 源代码: 前台qml文件 login.qml [javascript] view plain ...

  8. 怎么显示全部背景图片_Windows 聚焦图片在锁屏界面和登陆界面没有显示

    一. Windows 聚焦图片在锁屏界面和登陆界面没有显示 首先请确定设置中聚焦功能是否已经打开.打开设置-个性化-锁屏界面,确定一下背景下拉框选项是否已经设置为Windows聚焦.同时设置" ...

  9. wp-login.php 404页面,wordpress隐藏后台登陆界面,自动跳转首页或404

    原标题:wordpress隐藏后台登陆界面,自动跳转首页或404 我们用wordpress程序安装建站后发现所有人的网站后台都是自己域名/wp-admin,这样是否存在安全隐患?那么我们如何来修改或是 ...

  10. 关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法

    关于金蝶k3 wise供应生门户登陆界面屏蔽业务账套多余功能模块设置方法 1. 找到以下路径 ...\Kingdee\K3ERP\KDHR\SITEFILE\WEBUI\ 找到"Login. ...

最新文章

  1. matlab 摄像头拍照,matlab摄像头拍照
  2. Struts2——学习(5):页面跳转
  3. SAP QM初阶-执行事务代码QP02维护检验计划的时候不能为检验特性指派取样策略
  4. AIX 5.3安装Oracle 10g错误案例--ruInstaller
  5. 【HTML5CSS3进阶学习02】Header的实现·CSS中的布局
  6. Linux cpu亲和力
  7. jqgrid columnChooser列的自定义及存储和获取
  8. python assert_Python中何时使用断言 assert
  9. 遨博机器人展示_高交会:智能机器人走入大众生活
  10. Coded UI Test学习网站
  11. 蜗轮蜗杆减速机如何选择制造厂
  12. 19-备忘录模式Quarkus实现
  13. 计算机科学丛书20周年——20本跨世经典 夯筑科技基石
  14. Vue3+vite配置postcss-pxtorem报错[plugin:vite:css] Failed to load PostCss config
  15. sql增加数据的几种方法
  16. 计算机管理评价指标,评价指标体系
  17. PAT Basic level 1062 最简分数 (20分)
  18. Redis中存值是Hash冲突怎么解决的
  19. 我们已将Boost Note带到下一个高度。你体验了吗?
  20. js 获取复选框选中的值

热门文章

  1. 网站技术分析报告之——开心网_转载
  2. HTML鼠标悬停图片的动态效果,4种超酷鼠标滑过图片过渡动画特效
  3. 【PC工具】chrome谷歌浏览器最新离线安装版各种版本,最好用的浏览器没有之一...
  4. 寒江独钓:键盘的过滤 学习笔记
  5. ie11不兼容 html编辑器,IE11下使用eWebEditor编辑器
  6. windows 20003 扩展安装后不成功的原因
  7. 【CANdelaStudio编辑CDD】-0.2-将CDD转换成ODX/PDX诊断描述文件
  8. Oracle中的sys用户和system用户
  9. c语言圆周率小数点后500万位,圆周率小数点后500位数字是多少
  10. fedora linux搜狗输入法,GitHub - Hello-Linux/fedora-Sougou-Pinyin: fedora 搜狗拼音,安装超简单,各种精美皮肤!...