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程序员资料,自取哦!!
可及的小屋

发布了48 篇原创文章 · 获赞 9 · 访问量 2404

猜你喜欢

转载自blog.csdn.net/jjy19971023/article/details/104470397