【JavaWeb】从零实现用户登录
1.数据库预备
1.1 SQL
创建数据库
create database db;
创建表
create table userInfo(
id int primary key ,
name varchar(20),
password varchar(20),
age int,
email varchar(20)
);
导入测试数据
insert into userInfo values(1,'super','',25,'123456@nova.com');
insert into userInfo values(2,'nova','',26,'test@nova.com');
在SQLog或Navicat执行以上SQL语句之后,即完成了数据库的基础数据的预备
2. JavaWeb编程
2.1 配置文件
考虑在后续开发中,数据库的路径、用户名、密码等内容是可能会改变的,后续的开发中,应该尽量的避免修改代码,所以创建DBConfig.properties配置文件,将后续可能发生改变的内容放在配置文件中,后续只要修改配置文件即可。DBConfig.properties文件是以键值对的形式存储的。
DBConfig.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db
user=root
password=(这里写你的数据库密码)
2.2 封装数据库工具类
在编程中,应该习惯于使用面向对象的思想,增强代码的复用性、健壮性、可读性。所以,这里我将程序中对数据库的操作封装成一个工具类,并且内部的方法使用static修饰。
用static修饰的好处在于, static修饰的方法被放在JVM的静态方法区,随着类的加载而加载,能够使用类名调用方法,并且static执行的效率高,速度快,所以,我们封装的工具类应尽量使用静态的,要注意的是,静态的方法中,只能调用静态的成员变量。
DBUtil.java
package com.nova.util; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
/**
* 数据库工具类
* @author supernova
*
*/
public class DBUtil {
private static String url;
private static String user;
private static String pwd;
//因为获取文件配置信息和加载驱动只需要执行一次,所以将这两个功能放入静态代码块中,随着类的加载而加载,能提高代码的效率
static {
//获取配置文件信息
ResourceBundle bundle = ResourceBundle.getBundle("DBConfig");
url = bundle.getString("url");
user = bundle.getString("user");
pwd = bundle.getString("password");
//利用反射,加载驱动
try {
Class.forName(bundle.getString("driver"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} //获取连接通道
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,user,pwd);
}
//关闭所有资源
public static void closeAll(Connection connection,PreparedStatement pStmt, ResultSet resultSet) throws SQLException{
if(connection != null){
connection.close();
}
if(pStmt != null){
pStmt.close();
}
if(resultSet != null){
resultSet.close();
}
}
}
2.3 JavaBean编程思想
在用户登录中,往往会需要在客户端显示当前登录用户的信息,比如当前用户名等,所以为了加强程序的可扩展性,在服务端的JDBC编程中执行数据库查询操作时,应将查询到的内容存到对象中,在后续需要使用用户信息时,只需将该对象返回给客户端即可,所以这就需要创建一个bean类,称为模型。bean类中成员变量的个数,类型应尽量与数据库表中的一致,以方便使用。
UserInfo.java
package com.nova.bean;
public class UserInfo {
private int id;
private String name;
private String password;
private int age;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public UserInfo(int id, String name, String password, int age, String email) {
super();
this.id = id;
this.name = name;
this.password = password;
this.age = age;
this.email = email;
}
public UserInfo() {
super();
}
@Override
public String toString() {
return "UserBean [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + ", email=" + email
+ "]";
}
}
2.3 服务端主程序
ServerMain.java
package com.nova.test; import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.nova.bean.UserInfo;
import com.nova.util.DBUtil;
/**
* 服务端主程序
* @author supernova
*
*/
public class ServerMain extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取客户端发来的用户名和密码
String user = req.getParameter("user");
String pwd = req.getParameter("pwd");
//打印流
PrintWriter pw = resp.getWriter();; Connection con = null;
PreparedStatement pStmt = null;
ResultSet resultSet = null;
UserInfo userInfo = null; try{
con = DBUtil.getConnection();//获取数据库连接,
String sql = "select * from userInfo where name = ? and password = ?";
pStmt = con.prepareStatement(sql);
pStmt.setString(1, user);
pStmt.setString(2, pwd);
resultSet = pStmt.executeQuery(); if(resultSet.next()){
userInfo = new UserInfo();
userInfo.setId(resultSet.getInt("id"));
userInfo.setName(resultSet.getString("name"));
userInfo.setPassword(resultSet.getString("password"));
userInfo.setEmail(resultSet.getString("email"));
}
if(userInfo != null){
//登录成功
pw.print("Login Success");
}else {
//登录失败
pw.print("Login Failed");
}
}catch(SQLException e){
e.printStackTrace();
}finally{
//最后需要把所有资源关闭
pw.close();
try {
DBUtil.closeAll(con, pStmt, resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.4 导入mysql的jar包
下载mysql驱动jar包 下载链接:https://download.csdn.net/download/xin93/10334399
下载解压后,将jar包复制到MyEclipse工程目录的WebRoot/WEB-INF/lib中,并右键build path --> Add to build path
2.4 模拟客户端(网页)
在网页客户端的body标签中添加表单:
<form action="login">
username:<input type="text" name="user"/><br/>
password:<input type="password" name="pwd"/><br/>
<input type="submit" value="login"/>
</form>
2.5 web.xml
在WebRoot/WEB-INF的目录下,打开web.xml文件,在web-app标签下添加:
<servlet>
<servlet-name>ServerMain</servlet-name>
<servlet-class>com.nova.test.ServerMain</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServerMain</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
3. 运行测试
点击Login按钮,登录成功。
输入错误的用户名密码,
登录失败
【JavaWeb】从零实现用户登录的更多相关文章
- 从零玩转JavaWeb系列7web服务器-----用户登录界面二维码的制作
1.用eclipse工具新建一个Dynamic Web Project工程如下: 2.在Java Resources的src目录下新建一个包,包名称为com.it666.code 3.在com.it6 ...
- JavaWeb 之 Filter 验证用户登录案例
需求: 1. 访问一个网站的资源.验证其是否登录 2. 如果登录了,则直接放行. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录". 代码实现: import j ...
- javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- JavaWeb用户登录功能的实现
大四快毕业了,3年多的时间中,乱七八糟得学了一大堆,想趁找工作之前把所学的东西整理一遍,所以就尝试着做一个完整的JavaWeb系统,这几天试着做了一个用户登录的功能,分享给大家,肯定有很多不完善的地方 ...
- JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)
此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...
- JavaWeb学习记录(六)——用户登录功能
使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...
随机推荐
- PHP 如何实现网址伪静态
Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态. 主要步骤如下: 1.检测Apache是否开启mod_rewrite功能 可以通过php提供 ...
- 微信小程序现实问题之低素质客户需求问题
·微信小程序已经在市场摸爬滚打很久了,但是真正是否可用以及是否真正满足客户需求,市场是否真正到了火热的程度,值得怀疑. 根据本人从事小程序开发的经验,短时间内,小程序市场依然会不温不火,而此时客户的满 ...
- jquery实用技巧之输入框提示语句
我们在编写网页的时候不可避免的会遇到输入框,那么怎么设计输入框才能更加优雅呢?不同的人会有不同的答案,下面分享一个比较不错的设计. 效果图 细节 这个效果主要是通过JQuery来实现,我的思路如下: ...
- AJAX原生JavaScript写法
GET方式 //创建XMLHttpRequest对象,为考虑兼容性问题,老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象 var ajax = windo ...
- 如何深入理解一套MQ消息中间件
怎样算是理解了一套MQ中间件呢?原来一知半解的我列了几个维度:demo跑起来,理解其投递次数的语义,理解其事务的特性等等.这是一种角度,但总有种看山不是山的一知半解的感觉.再问一层,比如为什么Kafk ...
- good pics
- AWK入门指南
一. AWK入门指南 Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务.本章是个入门指南,让你能够尽快地开始编写你自己的程序.第二章将描述整个语言,而剩下的章节将向你展示 ...
- [USACO19JAN]Exercise Route
题目 这题的数据有点水,暴力合并\(set\)好像过了 分析一下这个题的性质,发现我们一条非树边就会形成一个环,而我们要求选择两个非树边,就会形成两个环,要求不走重复的点,就是说我们需要走一个大环,且 ...
- Myeclipse 自带Tomcat启动8080端口占用
在启动Myeclipse自带的Tomcat发现报错,显示8080端口被占用 第一步:window+r 组合键,调出命令窗口. 第二步:输出命令:netstat -ano|findstr 8080 ...
- PAT——年会抽奖(错位 排序)
题目描述 今年公司年会的奖品特别给力,但获奖的规矩却很奇葩: 1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中:2. 待所有字条加入完毕,每人从箱中取一个字条:3. 如果抽到的字条上写的就是 ...