Javaweb項目實戰:油畫商城。第二集----實體類的創建和登錄模塊的實現!!!GOGOGOGO!!疫情當頭,學習別停!!!

嗯,長夜慢慢無心睡眠,繼續寫這個的第二篇。就當做是回顧了。
上篇我們說到,建表和包結構。接下來就是實體類啦。
Javabean
一共需要這些在這裏插入圖片描述
具體的代碼如下。用eclipse自帶的生成工具去生成對應的get和set方法,還有toString方法都可以自動生成。別自己寫。那是累傻小子呢!!!
一定注意,一定注意!

package com.imooc.domain;

public class User {
	private Integer uid;
	private String username;
	private String password;
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	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;
	}
	
}
package com.imooc.domain;
/**
 * domain
 * 
 */
public class Product {
	private Integer pid;
	private String pname;
	private String author;
    private Double price;
    private String description;
    private String filename;
    private String path;
    private Category category=new Category();
    @Override
	public String toString() {
		return "Product [pid=" + pid + ", pname=" + pname + ", author=" + author + ", price=" + price + ", description="
				+ description + ", filename=" + filename + ", path=" + path + ", category=" + category + "]";
	}
	//表中分類的ID,面向對象的語言
	public Integer getPid() {
		return pid;
	}
	public void setPid(Integer pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public Double getPrice() {
		return price;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public Category getCategory() {
		return category;
	}
	public void setCategory(Category category) {
		this.category = category;
	}
    
}
package com.imooc.domain;
import java.util.List;
public class PageBean<T> {
	private int page;//當前頁數
	private int limit;//每頁顯示的記錄數
	private int totalCount;//總記錄數
	private int totalPage;//總頁數
	private List<T> list;//每頁顯示的數據集合
	@Override
	public String toString() {
		return "PageBean [page=" + page + ", limit=" + limit + ", totalCount=" + totalCount + ", totalPage=" + totalPage
				+ ", list=" + list + "]";
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public int getLimit() {
		return limit;
	}
	public void setLimit(int limit) {
		this.limit = limit;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public List<T> getList() {
		return list;
	}
	public void setList(List<T> list) {
		this.list = list;
	}

}
package com.imooc.domain;

public class Category {
private Integer cid;
private  String cname;
private String cdesc;
@Override
public String toString() {
	return "Category [cid=" + cid + ", cname=" + cname + ", cdesc=" + cdesc + "]";
}
public Integer getCid() {
	return cid;
}
public void setCid(Integer cid) {
	this.cid = cid;
}
public String getCname() {
	return cname;
}
public void setCname(String cname) {
	this.cname = cname;
}
public String getCdesc() {
	return cdesc;
}
public void setCdesc(String cdesc) {
	this.cdesc = cdesc;
}

}

OK哦這樣我們的類就創建好了呢。
接下來我們就要去實現用戶登錄模塊了
在這裏插入圖片描述
接下來打開login.jsp
然後我們觀察頁面會向我們傳入username password
在這裏插入圖片描述
OK接下來呢我們在web.action這個包裏創建UserServlet.java 文件進行接收信息和處理服務。具體的登錄實現是我們先從頁面接收用戶名和密碼。這個時候呢我們把這兩個數據傳到servlet類中,然後我們從request中解析這兩個數據,將數據進行封裝。

然後我們調用Service層的UserService。然後我們在UserService中調用用戶是否存在,若存在返回一個用戶對象。不然返回空值。
Dao層呢在UserDaoImpl類中進行數據庫查詢。看其是否有匹配的用戶
若有的話,向Service層返回一個非空對象,否則,返回空。
Servlet接收到了Service的返回值。再進行判斷。於是根據是否爲空決定頁面的跳轉。
這就是登錄的邏輯了。
我們後續可以給其加上驗證碼。整個類進行驗證碼生成然後和頁面輸入的進行比對。若成功才訪問數據庫。不成功則提示錯誤。
驗證碼沒有實現。但是加上的邏輯並不是太難。
接下來呢。我們有了登錄就有退出
退出很簡單的邏輯
將session毀掉
然後進行跳轉到登錄頁面。無需其他層的參與。

具體的代碼實現如下
UserServlet類

package com.imooc.web.action;

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.imooc.domain.User;
import com.imooc.service.UserService;
import com.imooc.service.impl.UserServiceImpl;

/**
 * Servlet implementation class UserServlet
 */
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 接收參數
		String methodName = request.getParameter("method");
		// 判斷
		if ("login".equals(methodName)) {
			login(request, response);
		}else if("logout".equals(methodName)) {
			logout(request,response);
		}

	}
	/**
	 * 用戶退出的方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 */
private void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {

	//1將session銷燬掉
	request.getSession().invalidate();
	//2頁面進行跳轉,跳轉到登錄頁面
	response.sendRedirect(request.getContextPath()+"/login.jsp");
	
	}
/**
 * UserServlet中登錄的方法
 * @param request
 * @param response
 * @throws IOException 
 * @throws ServletException 
 */
	private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收用戶名和密碼
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		System.out.println(username+"   "+password);
		//數據的封裝
		User user=new User();
		user.setUsername(username);
		user.setPassword(password);
		//處理數據
		UserService userService=new UserServiceImpl() ;
		User existUser=userService.login(user);
		//根據處理結果,完成頁面跳轉
		if(existUser!=null) {
			//登錄成功,返回登錄頁面
			System.out.println("success");
			request.getSession().setAttribute("existUser", existUser);
			response.sendRedirect(request.getContextPath()+"/CategoryServlet?method=findAll");
		}		
		else {
			//登錄失敗返回登錄頁面
			request.setAttribute("msg", "用戶名或密碼錯誤");
			request.getRequestDispatcher("/login.jsp").forward(request,response);
			System.out.println("fuck");
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

然後是UserService 接口和其實現類

package com.imooc.service;

import com.imooc.domain.User;

public interface UserService {

	User login(User user);

}
package com.imooc.service.impl;

import com.imooc.dao.UserDao;
import com.imooc.dao.impl.UserDaoImpl;
import com.imooc.domain.User;
import com.imooc.service.UserService;

public class UserServiceImpl implements UserService {

	@Override
	public User login(User user) {
		//調用DAO方法查詢用戶是否存在
		UserDao userDao=new UserDaoImpl();
		
		
		return userDao.login(user);
	}

}

接下來就是UserDao接口何其實現類。實現類裏面用到的JDBCUtils這個類在後面有實現。我們利用自己封裝的類很輕鬆的實現了數據庫的鏈接。並且dao的實現類裏面的try-catch塊我們以後會經常用到。應牢牢記住

package com.imooc.dao;

import com.imooc.domain.User;

public interface UserDao {

	User login(User user);

}
package com.imooc.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.imooc.dao.UserDao;
import com.imooc.domain.User;
import com.imooc.utils.JDBCUtils;

public class UserDaoImpl implements UserDao {
	@Override
	public User login(User user) {
		// TODO Auto-generated method stub
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		try {
		//獲得連接
			conn=JDBCUtils.getConnection();	
		//編寫sql
			String sql="select * from user where username=? and password=?";
		//預編譯sql
			pstmt=conn.prepareStatement(sql);
		//設置參數
			pstmt.setString(1, user.getUsername());
			pstmt.setString(2, user.getPassword());
		//執行
			rs=pstmt.executeQuery();
			if(rs.next()) {
				User existUser=new User();
				existUser.setUid(rs.getInt("uid"));
				existUser.setUsername(rs.getString("username"));
				existUser.setPassword(rs.getString("password"));
				return existUser;		
			}
			else {
				return null;
			}
		}catch(Exception e) {
			e.printStackTrace();		
		}finally {
			//釋放資源
			JDBCUtils.release(rs, pstmt, conn);
		}
		return null;
	}

}

接下來爲了解釋JDBCUtils類,他在我們Utils包內,用於封裝我們內部的數據庫連接。很是方便
我們將代碼羅列如下,後面的操作我們也同樣會用到這些東西的:

package com.imooc.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * JDBC的工具類
 *
 */
public class JDBCUtils {
	public static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
	
	/**
	 * 獲得連接
	 * @throws Exception 
	 */
	public static Connection getConnection() throws Exception{
		return dataSource.getConnection();
	}
	
	/**
	 * 獲得連接池
	 */
	public static DataSource getDataSource(){
		return dataSource;
	}
	
	/**
	 * 釋放資源
	 */
	public static void release(ResultSet rs,Statement stmt,Connection conn){
		if(rs != null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null;
		}
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
	}
	
	public static void release(Statement stmt,Connection conn){
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
	}
}

都搞定了。肯定要給大家看看效果。來我們把項目發佈到TomCat中吧
然後運行。效果如下圖
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

要是錯誤登錄的話

在這裏插入圖片描述

我們慢慢的發現都是HTML–》Servlet—》service----》dao這一套。這一套爲何要這樣設計呢?
這就涉及到軟件工程的中軟件體系結構設計的MVC風格—也就是大名鼎鼎的模型model-視圖view-控制control風格
model對應DAO層
view對應HTML和Servlet層
control對應service層
具體的MVC介紹,以後有空我想起了再寫吧。各位想看的,歡迎自行百度。
到此爲止此集結束

下次我們介紹的是
分類管理的實現
有添加和刪除分類,還有修改分類以及分類的顯示。並且會完成文件上傳工具類的解析

最後宣傳下我個人的微信公衆號,微信搜索:可及的小屋,有志向整副業,娛樂的程序員們,歡迎您的到來。謝謝。
100G程序員資料,自取哦!!
可及的小屋

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章