JavaWeb(JavaEE初學小項目-BookStore)Oracle 11g+MyEclipse 【提供源碼】
文章目錄
項目要求
創建一個名為BookStore的數據庫
/1. 在BookStore數據庫中添加UserInfo表,包含如下字段:賬號、密碼、真實姓名、性別、年齡、QQ號碼、E-mail地址等,實現用戶注冊、修改密碼和登錄三個功能,具體要求如下:
(1) 提供一個DBUtil類用于連接數據庫;
(2) 提供一個4 類用于操作UserInfo表,封裝數據庫操作;
(3) 提供一個UserInfoDTO類用于在注冊時傳輸用戶信息;
(4) 三個功能對應三個獨立的Servlet,Servlet名字自定;
(5) 注冊時需要確保賬號的唯一性;
(6) 根據賬號修改密碼,需要輸入舊密碼驗證用戶身份,舊密碼錯誤不能修改密碼,新密碼需要輸入兩次,修改成功后在數據庫中保存新密碼;
(7) 注冊時密碼需要輸入兩次,兩次密碼必須一致(使用JavaScript實現);
(8) 注冊、登錄和修改密碼的JSP頁面自行設計,可增加相應的成功和失敗提示頁面;
(9) 所有的類都必須放在相應的包中,包的命名可參考如下規范:
com.sunny.bookstore.util;
com.sunny.bookstore.dao;
com.sunny.bookstore.dto;
com.sunny.bookstore.servlet
項目整體概述
至于配置tomcat方面,可以參考一下我以前寫的這篇博客~
最新的Eclipse安裝Web/JavaEE插件+Tomcat安裝+Web應用系統開發環境的搭建(中)
項目界面展示
由于一段時間沒有寫Web項目了,很多都生疏了,界面也就比較簡單,老師給我們布置的這次實驗也是為了讓我的知識撿回來,別全還給他了
UserInfoDAO.java
package com.sunny.bookstore.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.sunny.bookstore.dto.UserInfoDTO;
import com.sunny.bookstore.util.DButil;
public class UserInfoDAO {
//登錄
public boolean findUserByAccountAndPassword(String userAccount, String userPassword) {
DButil db = new DButil();
Connection conn = null;
PreparedStatement state = null;
ResultSet rs = null;
try {
conn = db.getConnection();
String sql = "select * from UserInfo where userAccount=? and userPassword=?";
state = conn.prepareStatement(sql);
state.setString(1, userAccount);
state.setString(2,userPassword);
rs = state.executeQuery();
if(rs.next()) {
return true;
}
else {
return false;
}
}
catch(Exception e) {
}
return false;
}
/**
* 1.添加數據到UserInfo表中
* 傳遞參數為dto
* 返回值為boolean
*/
public boolean insertIntoUserInfo(UserInfoDTO dto)
{
DButil db = new DButil();
Connection conn = db.getConnection();
PreparedStatement statement = null;
try {
String sql="insert into UserInfo ( useraccount, userpassword, username,sex, age, qq, email) values( ?,?,?,?,?,?,?)";
statement = conn.prepareStatement(sql);
statement.setString(1, dto.getUserAccount());
statement.setString(2, dto.getUserPassword());
statement.setString(3, dto.getUserName());
statement.setString(4, dto.getSex());
statement.setString(5, dto.getAge());
statement.setString(6, dto.getQQ());
statement.setString(7, dto.getEmail());
int result=statement.executeUpdate();
if(result>0)
{
System.out.println("插入到UserInfo表成功!");
return true;
}
}
catch(Exception e1) {
e1.printStackTrace();
System.out.println(e1.getMessage());
}
finally
{
try {
statement.close();
conn.close();
}
catch(Exception e2) {
System.out.println(e2.getMessage());
}
}
return false;
}
/**
* 2.從數據庫導入數據(全查找UserInfo表信息)
* @return
*/
public List<UserInfoDTO> findUserInfoAll() {
DButil db = new DButil();
Connection con = db.getConnection();
PreparedStatement pstmt;
ResultSet rs;
List<UserInfoDTO> list = new ArrayList<UserInfoDTO>();
try {
String sql = "select * from UserInfo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();// 執行SQL語句
while (rs.next()) {
UserInfoDTO dto = new UserInfoDTO();
dto.setUserAccount(rs.getString("useraccount"));
dto.setUserPassword(rs.getString("userpassword"));
dto.setUserName(rs.getString("username"));
dto.setSex(rs.getString("sex"));
dto.setAge(rs.getString("age"));
dto.setQQ(rs.getString("qq"));
dto.setEmail(rs.getString("email"));
list.add(dto);
}
// 關閉,釋放資源
rs.close();
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
/**
* 3.刪除功能
* 根據賬戶來刪除
*/
public boolean deleteUserInfo(UserInfoDTO dto){
DButil db = new DButil();
Connection con = db.getConnection();
PreparedStatement pstmt = null;
String sql = "delete from UserInfo where useraccount = ? ";
try{
pstmt = con.prepareStatement(sql);
pstmt.setString(1, dto.getUserAccount());
int result=pstmt.executeUpdate();
if(result>0)
{
System.out.println("刪除"+dto.getUserAccount()+"賬戶成功!");
return true;
}
}catch (SQLException e){
e.printStackTrace();
}
finally
{
try {
pstmt.close();
con.close();
}
catch(Exception e2) {
System.out.println(e2.getMessage());
}
}
return false;
}
/**
* 4.通過賬號來查詢密碼
* 傳入參數為userAccount
*/
public String findPassWordByUserAccount (String userAccount) {
DButil db = new DButil();
Connection con = db.getConnection();
PreparedStatement pstmt;
ResultSet rs;
String res="";
try {
String sql = "select * from userinfo where userAccount=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, userAccount);
rs = pstmt.executeQuery();// 執行SQL語句
if (rs.next()) {
res=rs.getString("userpassword");
}
// 關閉,釋放資源
rs.close();
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return res;
}
public boolean UpdateByUserAccount(String useraccount,String userPasswordNew){
DButil db = new DButil();
Connection con = db.getConnection();
try {
String sql="\r\n" +
"update userinfo set userpassword= ? where useraccount=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, userPasswordNew);
pstmt.setString(2, useraccount);
int res=pstmt.executeUpdate();
if(res>0){
System.out.println("更新數據成功");
return true;
}
pstmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
DButil.java
package com.sunny.bookstore.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* util工具類
* @author yangchaoyi
*
*/
public class DButil {
//1、執行靜態方法,加載數據庫驅動
static {
try {
System.out.println("正在加載數據庫驅動...");
System.out.println("Class.forName('oracle.jdbc.driver.OracleDriver');");
Class.forName("oracle.jdbc.driver.OracleDriver");//這邊參數的意義,url:jdbc數據庫網址 user:用戶名(String類型) password:密碼(String類型)[這邊的數據庫密碼和用戶名填寫自己的]。同樣由于getConnection方法會拋出SQLException,要使用try-catch
System.out.println("已加載數據庫驅動!!!\n");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//2、創建數據庫連接的方法
public Connection getConnection() {
Connection connection;
try {
System.out.println("正在連接到數據庫...");
System.out.println("connection = DriverManager.getConnection('jdbc:oracle:thin:@localhost:1521:orcl', 'scott', 'ycy');");
connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "ycy");///這邊參數的意義,url:jdbc數據庫網址 user:用戶名 password:密碼。同樣由于getConnection方法會拋出SQLException,要使用try-catch
System.out.println("已連接到scott數據庫!!!\n");
return connection;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//3、關閉數據庫連接,釋放JDBC資源的方法
public void closeConnection(Connection connection) {
if (connection != null) {
try {
System.out.println("準備釋放jdbc資源,斷開數據庫連接...");
System.out.println("connection.close();");
connection.close();//立即釋放jdbc資源,而不是等自動釋放
System.out.println("已斷開數據庫連接并且釋放了jdbc資源\n");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
changePassWordServlet.java
package com.sunny.bookstore.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sunny.bookstore.dao.UserInfoDAO;
public class changePassWordServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public changePassWordServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out=response.getWriter();
String userAccount = request.getParameter("userAccount");
System.out.println(userAccount);
String userPasswordOld = request.getParameter("userPasswordOld");
String userPasswordNew = request.getParameter("userPasswordNew");
String userPasswordNew2 = request.getParameter("userPasswordNew2");
UserInfoDAO dao=new UserInfoDAO();
String paw=dao.findPassWordByUserAccount(userAccount);
System.out.println("舊密碼:"+paw);
if(paw.equals(userPasswordOld)){
out.print("<script language='javascript'>alert('賬號驗證通過');window.location.href='changePassWord.jsp';</script>");
System.out.println("賬號驗證通過");
dao.UpdateByUserAccount(userAccount, userPasswordNew);
response.sendRedirect("success.jsp");
}
else
{
response.sendRedirect("changePassWord.jsp");
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
LoginServlet.java
package com.sunny.bookstore.servlet;
import java.io.IOException;
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 com.sunny.bookstore.dao.UserInfoDAO;
public class LoginServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public LoginServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userAccount = request.getParameter("userAccount");
String userPassword = request.getParameter("userPassword");
UserInfoDAO dao = new UserInfoDAO();
boolean result = dao.findUserByAccountAndPassword(userAccount, userPassword);
if(result) {
response.sendRedirect("success.jsp");
}
else {
response.sendRedirect("error.jsp");
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
RegisterServlet.java
package com.sunny.bookstore.servlet;
import java.io.IOException;
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 com.sunny.bookstore.dao.UserInfoDAO;
import com.sunny.bookstore.dto.UserInfoDTO;
//@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
/**
* Constructor of the object.
*/
public RegisterServlet() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); //設置請求數據的字符編碼格式
String userAccount = request.getParameter("userAccount"); //獲得請求表單中的賬號
String userPassword = request.getParameter("userPassword"); //獲得請求表單中的密碼
String userName = request.getParameter("userName"); //獲得請求表單中的姓名
String sex = request.getParameter("sex"); //獲得請求表單中的性別
String age = request.getParameter("age"); //獲得請求表單中的年齡
String QQ = request.getParameter("QQ"); //獲得請求表單中的QQ
String email = request.getParameter("email"); //獲得請求表單中的email
UserInfoDTO dto = new UserInfoDTO();
dto.setUserAccount(userAccount);
dto.setUserPassword(userPassword);
dto.setUserName(userName);
dto.setSex(sex);
dto.setAge(age);
dto.setQQ(QQ);
dto.setEmail(email);
UserInfoDAO dao = new UserInfoDAO();
if(dao.insertIntoUserInfo(dto)){
//request.getRequestDispatcher("index.jsp").forward(request, response);
response.sendRedirect("registerSuccess.jsp");
}
else {
response.sendRedirect("registerError.jsp");
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
點擊獲取BookStore項目源碼
提取碼:gtft
學如逆水行舟,不進則退
智能推薦
MySql數據庫之審計(開啟log+設置init-connect實現無插件審計)
目錄 一、查詢審計配置情況 二、永久開啟審計 三、臨時開啟審計 四、設置init-connect 1、創建用于存放連接日志的數據庫和表 2、授權某個用戶擁有對審計表的select和insert權限 3、設置init_connect參數 五、驗證 六、番外 注:有關MySql數據庫的其他操作請參見MySql目錄進行查找。 一、查詢審計配置情況 show global variables like '...
相對定位與絕對定位應用
1、子絕父相 如圖所示的導航條,是通過相對定位與絕對定位共同完成的。 在僅使用相對定位的情況下,由于相對定位在標準流中仍然占有一定的空間,會對頁面布局產生不良的影響,所以不能僅僅使用相對定位。 所以父標簽使用相對定位,而子標簽則使用絕對標簽,這樣既不會對頁面布局產生不良的影響,又可以更方便的進行布局。 2、水平居中 width: 50%,代表著把寬度變為瀏覽器當前頁面寬度的一半,不論頁面大或是小,...
python+unittest框架生成HTML測試報告
1、下載HTMLTestReportCN、HTMLTestReportEN、HTMLTestRunner.py文件并把他放到python安裝目錄下的Lib里 具體的文件需要修改,因為這三個都是根據python2語法進行編寫,我們需要把他轉換成python3語法 分享下已經適配python3語法的下載鏈接: https://download.csdn.net/download/weixin_4645...
Day06 JavaSE面向對象OOP(上) (Object-Oriented Programming)
JavaSE 面向對象OOP(上) 一、面向對象概述 1 面向過程&面向對象區別 面向過程 第一步做什么,第二步做什么… 面向過程適合處理一些簡單的問題。 面向對象 分類的思維模式,首先分類,隨后逐個解決分類下的細節。 面向對象適合處理負責的問題,適合多人協作的問題。 以類的方式組織代碼,以對象組織封裝數據 面向對象三大特性:封裝、繼承、多態 2 方法回顧+補充 方法的定義 ...
d3d程序調試方法——一個簡單的d3d程序
1、安裝directx sdk 安裝包: 解壓: 2、創建C++控制臺應用程序 3、導入頭文件和源文件 注:在x86解決方案下進行調試!!!!! 4、添加包含目錄和庫目錄 配置屬性——VC++目錄 包含目錄:D:\Software Install\D3D_SDK\Include(根據自己解壓的文件夾目錄,選擇Include文件夾路徑) 庫目錄:D:\Software Ins...
猜你喜歡
一文解析Synchronized
1 三個窗口賣50張票 1.1 TicketWindowRunnable 1.2 測試 2 synchronized 關鍵字synchronized可以保證在同一時刻,只有一個線程可以執行某個方法或某個代碼塊。 2.1 修改TicketWindowRunnable 2.2 測試 3 查看匯編 4 synchronized應用方式 4.1 對象鎖 (1) 代碼 4.2 This鎖 4.3 This鎖...
Centos 6.9安裝docker
由于docker要求運行的linux內核版本為3.8以上,因此,在安裝之前,要查看一下宿主機操作系統的內核版本,否則如果是內核低于3.8,能夠成功安裝docker,但進入docker后,會自動退出。 1、下載安裝Centos 6.9 Centos 6 系列,最新版本為6.9,由于 docker 只能運行在64位系統上,因此到Centos的官網上選擇某個鏡像 下載 ...
SSM與android端數據交互
一.前言 最近第一次用ssm與安卓端實現了數據交互,我這里數據交互通過傳送接受JSON數據來實現的。實現了登錄注冊和對某些實體類數據的增刪改查。 二.后端的具體實現 我們實體類的數據和安卓端的實體數據名字要是相同的,不然獲取不到后端發送的JSON數據,作為后端我們不用去了解安卓端是怎么實現發送和接受JSON數據,我們只要保證實體類屬性名相同,并給他們一個后端接口(一個URL地址),也...
(二)搭建Java Web開發環境
JDK和JRE是在Java環境下進行開發所必不可少的,只有很好地掌握它們的配置與使用方法,才能進行以后的Java Web開發。 1. Tomcat服務器是當今進行Java Web開發使用最廣泛的Servlet/JSP服務器。這是因為它運行穩定、性能可靠,是學習和中小企業級應用的最佳選擇。Tomcat是Servlet和JSP的容器。當通過Web瀏覽器訪問某個JSP文件時,Tomcat會將這個JSP文...