歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 單列模式下的數據庫連接與Servlet之間頁面訪問用戶登錄的小例子

單列模式下的數據庫連接與Servlet之間頁面訪問用戶登錄的小例子

日期:2017/3/1 9:17:40   编辑:Linux編程

下面是我自己寫的一個關於servlet的例子,首先是數據庫配置,使用的是靜態的單例模式

代碼如下:

/ 數據庫地址連接
// 使用靜態單列模式
public class JdbcUtil {
private static String driverName;
private static String url;
private static String username;
private static String password;

private static Properties properties = new Properties();

private static JdbcUtil jdbcUtil;

private JdbcUtil() {

}

public static JdbcUtil getInstance() {
if (jdbcUtil == null) {
jdbcUtil = new JdbcUtil();
}

return jdbcUtil;

}

public static void main(String[] args) {
JdbcUtil model = new JdbcUtil();

}

static {
try {
// 調用resource包下的dbconfig.properties文件
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("dbconfig.properties");
properties.load(in);

driverName = properties.getProperty("driverName");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");

// 注冊
Class.forName(driverName);

} catch (Exception e) {
e.printStackTrace();
}
}

public Connection getConnection() {
Connection connection = null;

try {
// 連接
connection = DriverManager.getConnection(url, username, password);

} catch (Exception e) {
e.printStackTrace();
}
return connection;
}

public void close(Connection connection, Statement stmt, ResultSet rs) {
// 關閉
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}

if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}

if (connection != null) {
try {
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

創建一個source文件夾命名為resources,在其創建dbconfig.properties文件,裡面寫的是你數據庫的地址、用戶和密碼

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=1

接著,創建實體類User

// POJO實體類
public class User {

// 用戶名
private String username;

// 密碼
private String password;

public User() {
super();
}

// get、set方法
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}

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;
}

// toString方法
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}

}

創建接口的dao包

// 接口
public interface IUserDao {

// 增加

public abstract boolean insertUser(User model);

// 刪除

public abstract boolean deleteUser(String userName);

// 修改

public abstract boolean updateUser(User model);

// 查詢(所有)

public abstract List<User> findAll();

// 查詢(條件)

public abstract boolean findByTerm(User model);

}

然後實現接口的方法,裡面直接寫sql語句

// 接口實現
public class UserDaoImpl implements IUserDao {
/**
* 用戶增加
*/
@Override
public boolean insertUser(User model) {
boolean flag = false;
Connection connection = null;
PreparedStatement pstmt = null;

try {
// 連接
connection = JdbcUtil.getInstance().getConnection();

// SQL語句
String sql = " INSERT INTO user (username,`password`) VALUES (?,?)";

// 創建Statement對象
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, model.getUsername());
pstmt.setString(2, model.getPassword());

// 執行
int result = pstmt.executeUpdate();
System.out.println("受影響的行數" + result);
flag = true;

} catch (Exception e) {
flag = false;
e.printStackTrace();
} finally {
// 關閉
JdbcUtil.getInstance().close(connection, pstmt, null);
}

return flag;
}

/**
* 用戶刪除
*/
@Override
public boolean deleteUser(String userName) {
boolean flag = false;
Connection connection = null;
PreparedStatement pstmt = null;

try {
// 連接
connection = JdbcUtil.getInstance().getConnection();

// SQL語句
String sql = "DELETE FROM user WHERE username = ? ";

// 創建Statement對象
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, userName);

// 執行
int result = pstmt.executeUpdate();
System.out.println("受影響的行數" + result);
flag = true;

} catch (Exception e) {
flag = false;
e.printStackTrace();
} finally {
// 關閉
JdbcUtil.getInstance().close(connection, pstmt, null);
}

return flag;
}

/**
* 用戶修改
*/
@Override
public boolean updateUser(User model) {
boolean flag = false;
Connection connection = null;
PreparedStatement pstmt = null;

try {
// 連接
connection = JdbcUtil.getInstance().getConnection();

// SQL語句
String sql = "UPDATE user SET `password` = ? WHERE username = ? ";

// 創建Statement對象
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, model.getPassword());
pstmt.setString(2, model.getUsername());

System.err.println(pstmt);

// 執行
int result = pstmt.executeUpdate();
System.out.println("受影響的行數" + result);
flag = true;
} catch (Exception e) {
flag = false;
e.printStackTrace();
} finally {
// 關閉
JdbcUtil.getInstance().close(connection, pstmt, null);
}

return flag;
}

/**
* 用戶查詢(所有)
*/
@Override
public List<User> findAll() {
List<User> list = new ArrayList<User>();
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
// 連接
connection = JdbcUtil.getInstance().getConnection();

// SQL語句
String sql = "SELECT * FROM user";

// 創建Statement對象
pstmt = connection.prepareStatement(sql);

// 執行
rs = pstmt.executeQuery();
// 游標向下移動一行
while (rs.next()) {
User model = new User();
model.setUsername(rs.getString("username"));
model.setPassword(rs.getString("password"));
// 添加到集合
list.add(model);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.getInstance().close(connection, pstmt, null);
}

return list;
}

/**
* 用戶查詢(根據條件)
*/
public boolean findByTerm(User model) {
boolean flag = false;
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
// 連接
connection = JdbcUtil.getInstance().getConnection();

// SQL語句
String sql = "SELECT * FROM user WHERE username=? AND `password` = ? ";

// 創建Statement對象
pstmt = connection.prepareStatement(sql);
pstmt.setString(1, model.getUsername());
pstmt.setString(2, model.getPassword());

// 執行
rs = pstmt.executeQuery();

// 判斷數據庫是否為空
if (rs != null && rs.next()) {
flag = true;
}

} catch (Exception e) {
e.printStackTrace();
} finally {
// 關閉
JdbcUtil.getInstance().close(connection, pstmt, null);
}

return flag;
}

}

最後寫servlet

/**
* Servlet implementation class Login 登錄頁面
*/
@WebServlet("/Login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 在reques請求接收參數之前,先設置請求的字符編碼為UTF-8
request.setCharacterEncoding("UTF-8");
// 在response響應返回數據時,也要設置
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");

// 調用實體類
User model = new User();

// 獲取http提交過來的數據
model.setUsername(request.getParameter("username"));
model.setPassword(request.getParameter("password"));

// 調用接口實現的方法
IUserDao dao = new UserDaoImpl();

// 判斷是否為空
if (model.getUsername() == null || model.getPassword() == null) {
// 轉發到登錄界面
request.getRequestDispatcher("jsp/login.jsp").forward(request, response);
} else {

// 調用條件查找的方法,判斷數據庫有無該數據
if (dao.findByTerm(model)) {
// 重定向到進入頁面
response.sendRedirect("jsp/index.jsp");
} else {
request.setAttribute("msg", "帳戶或密碼出錯!");
// 還是留在登錄界面
request.getRequestDispatcher("jsp/login.jsp").forward(request, response);
}
}

}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);

}
}

login.jsp下面的代碼

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>C9登錄界面</title>
<meta charset="UTF-8" />
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/login.css" rel="stylesheet" type="text/css" />
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script src="js/login.js" type="text/javascript"></script>
<script src="js/image.js" type="text/javascript"></script>
</head>
<body id="main" onload="showBgImage();init();">
<form action="Login" method="post">
<div class="login_m">
<div class="login_logo">
<h1 >C9決策分析門戶登錄</h1>
</div>

<div class="login_boder">
<div class="login_padding">
<div class="form-group">
<label for="userName"></label>
<input type="text" class="form-control " id="txtUserName" name="username" placeholder="用戶名">
</div>

<div class="form-group">
<label for="passWord"></label>
<input type="password" class="form-control" id="txtPassWord" name="password" placeholder="密碼">
</div>

<div class="rem_sub">
<div class="rem_sub_l">
<input type="checkbox" name="checkbox" id="chkRemember"> <label for="chkRemember">下次自動登錄</label>
</div>

<div class="join">
<input type="submit" id="btnSubmit" name="submit" class="btn btn_block btn_success" value="登錄" />
</div>
</div>

<div class="forgot">
<a href="jsp/forget.jsp">忘記密碼?</a> <span class="split"></span> <a href="jsp/register.jsp">免費注冊</a>
</div>
</div>

<footer class="footer"> <i><a href="http://www.cnbisoft.com">經邦信息技術有限公司</a></i> <br>
<span>經邦軟件&nbsp;2010&nbsp;©2008-2016&nbsp;皖ICP備15018743號</span>
<div class="time" id="txt"></div>
</footer>
</div>
</div>
</form>

<div class="msg">
<span >
<%
String msg = (String) request.getAttribute("msg");
if (msg == null) {
out.println();
} else {
out.println(msg);
}
%>
</span>
</div>
</body>
</html>

訪問localhost:8080/項目名/Login,就能看到

注意:上面重定向之後的頁面我都沒傳,這個要自己寫jsp

說的不是怎麼好,看注釋應該可以理解到~~

Copyright © Linux教程網 All Rights Reserved