概述
一. Dao(Database Access Object)
导入jdbc驱动包:可到官网下载:https://dev.mysql.com/downloads/connector/j/
找到对应mysql版本(本文使用的是MySQL8.0版本)的下载好后,将jar包拖到 /WebRoot/lib/ 里面即可
接下来就可以开始了:
创建UserDao类:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import cn.test.bean.User;
public class UserDao {
//数据库连接
//数据库地址,其中mec为数据库名称
private static String sqlurl = "jdbc:mysql:///mec?useSSL=false&serverTimezone=UTC";
//数据库登录用户名,用户名和密码具体的值根据自己的来设置
private static String sqluser = "root";
//数据库登录密码
private static String sqlpwd = "";
//定义PreparedStatement 对象
private static PreparedStatement preparedStatement = null;
//定义ResultSet 结果集对象
private static ResultSet resultSet = null;
//定义Connection 对象
private static Connection connection = null;
//把数据库连接写在一个静态代码块里
static{
try {
//jdbc驱动,版本不同写法不同,此处的写法为mysql8.0版本,mysql5.0版本的写法为:com.mysql.jdbc.Driver
Class.forName("com.mysql.cj.jdbc.Driver");//加载MySQL驱动
connection = DriverManager.getConnection(sqlurl, sqluser, sqlpwd);//根据前面设置的数据库用户名密码来获取数据库连接
} catch (Exception e) {
e.printStackTrace();
}
}
//定义方法:根据用户名和密码查询用户,返回类型为User 对象(javabean),参数为用户从网页上输入的用户名和密码
public User selectUser(String username, String password){
User user = new User();
//确定带参数的sql语句(这是一大缺点,sql语句被写死,Mybatis通过将sql语句写入到xml配置文件中可解决此问题)
String sql = "select username, upwd from info where username = ? and upwd = ?";
try {
//将sql语句发送到sql服务中
preparedStatement = connection.prepareStatement(sql);
//对sql语句中的参数赋值
//所赋的值即为方法中所带的参数“?”,1表示第一个问号,2表示第二个问号
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);
//执行sql语句:(resultSet 为执行sql语句后返回的结果集)
resultSet=preparedStatement.executeQuery();
//取值(遍历结果集resultSet)并将取到的值赋给对象(user)属性
while (resultSet.next()) {
user.setUserName(resultSet.getString("username"));//获得数据库中的指定列名(字段username)中的值,并将其存储到user对象中
user.setPassword(resultSet.getString("upwd"));//获得数据库中的指定列名(字段password)中的值,并将其存储到user对象中
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;//返回对象
}
二. JavaBean
在Bean层中只需要封装类的属性的get和set方法即可,有需要也可以将toString重写。
例如:创建User类
public class User {
private int id;
private String username;
private String password;
public 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;
}
}
}
三. Service业务层
在Service层中,负责完成特定的方法的逻辑代码编写,如登录、注册。此处以登录为例:
public class LoginService {
private UserDao userDao = new UserDao();//创建userDao对象
//添加登录功能
public void login(User user) throws UserException{
//调用userDao中的selectUser()查询方法,并将查询结果赋值给新对象user1
User user1 = userDao.selectUser(user.getUserName(),user.getPassword());
if(user1.getUserName() == null || user1.getPassword() == null){//对登录条件进行限制
//输出用户名或密码错误。
throw new UserException("用户名或密码错误,请重新登录!");//抛出自定义异常
}
}
}
四. Exception自定义异常
创建名为UserException的类:
public class UserException extends Exception {
public UserException(){
super();
}
public UserException(String message, Throwable cause){
super(message, cause);
}
public UserException(String message){
super(message);
}
public UserException(Throwable cause){
super(cause);
}
}
可以直接快速导入:
右键-->Source --> Generate Constructors From SuperClass
五. Servlet层
在Servlet(extends HttpServlet)层中,主要实现HttpServlet中的两个方法:
doGet(HttpServletRequest req, HttpServletResponse resp){}
doPost(HttpServletRequest req, HttpServletResponse resp){}
此处没有写doGet中的内容,是由于仅以登录作为示例,登录通常使用Post请求,by the way:
doGet和doPost的区别,这个比较直观,引用自:https://www.cnblogs.com/alsf/p/9133951.html
具体如下:
public class LoginServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*此处没有写doGet中的内容,是由于仅以登录作为示例,登录通常使用Post请求,by the way:
*doGet和doPost的区别,这个比较直观,引用自:https://www.cnblogs.com/alsf/p/9133951.html
*/
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码格式
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
//接收页面传值
String username = req.getParameter("username");//获取name = "username"输入框里面你输入的内容
String password = req.getParameter("password");//获取name = "password"输入框里面你输入的内容
LoginService loginService = new LoginService();//创建loginService 对象
User user = new User();//创建user 对象
user.setUsername(username);//获取到输入框里面的你输入的值后,向user对象中的username属性赋值
user.setPassword(password);//获取到输入框里面的你输入的值后,向user对象中的password属性赋值
try {
loginService.login(user);//调用login(user)方法实现登录
//登录成功后跳转到页面
req.getRequestDispatcher("/loginSuccess.jsp").forward(req, resp);
} catch (Exception e) {
// TODO: handle exception
//获取异常信息
req.setAttribute("msg", e.getMessage());
//将异常信息发送到登录页面便于展示
req.getRequestDispatcher("/login.jsp").forward(req, resp);
}
}
}
六. JSP
以登录为例(涉及到简单的EL表达式的使用,即:${msg }):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>login</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<p style=color:red; fontweight:900>${msg }</p>
<form action="LoginServlet" method="post">
<div class="sign-in-htm">
<div class="group">
<label for="user" class="label">username</label>
<input name="username" placeholder="请输入用户名" type="text" class="input">
</div>
<div class="group">
<label for="pass" class="label">password</label>
<input type="password" class="input" data-type="password" name="password" placeholder="请输入密码">
</div>
<div>
<input type="submit" class="button" value="登录" onClick="sub()">
</div>
</div>
</div>
</form>
</body>
</html>
七. xml配置文件
在配置文件中配置好了Servlet的属性,才能实现页面之间的跳转:其中cn.test.servlet为Servlet类所在的包的路径
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>cn.test.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
最后
以上就是震动手链为你收集整理的使用JDBC实现JavaWeb登录注册(详细思路及源码,每行注释)一. Dao(Database Access Object)二. JavaBean三. Service业务层四. Exception自定义异常五. Servlet层六. JSP七. xml配置文件的全部内容,希望文章能够帮你解决使用JDBC实现JavaWeb登录注册(详细思路及源码,每行注释)一. Dao(Database Access Object)二. JavaBean三. Service业务层四. Exception自定义异常五. Servlet层六. JSP七. xml配置文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复