使用MVC框架开发了一个实现用户登录注册注销的小项目

引言

今年由于疫情缘故没有开学,所有期末考试都是线上考试,同学们也都乐开了花,随着Javaweb这门课的结课,老师也布置了一个大作业,用MVC架构开发一个项目。端午佳节特来写一篇博客来记录一下我的第一个MVC项目,初来乍到,如有不足之处,还请多多包涵。

关于MVC

关于MVC这里就不过多介绍了,简单来说就是一个分层的设计理念,大致分为三层M 代表 模型(Model)V 代表 视图(View)C 代表 控制器(controller)。为什么要用分层的理念呢,因为当我们开发很大的项目的时候如果没有分层,你修改一些需求的时候需要把整个项目都改掉,而分层理念出现之后你只需要修改一小部分就可以了。

关于我这个项目

这个项目实现了注册,登录,注销三个功能,这个注销并不是把数据从数据库中删除,而是退出,也就是注销session。
效果如图:
主界面:
主界面
登录界面:
登录界面
登陆成功界面
登录成功界面
注册界面
注册页面

基本构局

构局
这是我们老师画的大致框架:
在这里插入图片描述
首先介绍一下视图,主页面index.jsp,登录注册都在JSP文件夹中,login.jsp,register.jsp。cn.mvc.code负责验证码,cn.mvc.control负责控制器,cn.mvc.service是控制器到业务逻辑层的接口,cn.mvc.Impl是负责实现业务逻辑层的,cn.mvc.D是业务逻辑层和数据访问层的接口,cn.mvc.Dao.Impl是负责实现数据访问的,cn.mvc.domain是负责数据封装的,cn.mvc.Util是工具包基本负责文件内容的读取。

核心代码

控制器:

public class UserServlet2 extends HttpServlet {
	
	private UserService us;
	
	/***
	 * 构造方法用来取出文件中的信息
	 * 然后实例化这个类
	 * 把这个类给us
	 */
	public UserServlet2(){
		super();
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("interface-info.properties");
		Properties pro = new Properties();
		try {
			pro.load(in);//读取列表的数值
			String classname = pro.getProperty("UserService");//取出对应键的值
			try {
				us = (UserService) Class.forName(classname).newInstance();//实例化这个类
			} catch (Exception e) {		
				e.printStackTrace();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/***
	 * 重写了doGet方法
	 * 将主页面发出的请求反馈给doGet方法
	 * 登录返回login,注册返回register。注销返回logout
	 * 通过request传递参数,再由不同情况重定向各种页面
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("gb2312");
		System.out.println("servlet连接成功!");
		String action = request.getParameter("action");
	
		if("login".equals(action)){//登录请求
			System.out.println("您发出的是请求命令....");

			String username = request.getParameter("username");
			String password = request.getParameter("password");
			
			try {
				if(us.login(username, password)){
					 HttpSession session = request.getSession();//创建一个session对象
					    session.setAttribute("name", username);//赋值
					response.sendRedirect(request.getContextPath()+"/index.jsp");
				}else{
					//request.setAttribute("loginerro", "用户名输入错误,请重新登录");
					request.getRequestDispatcher("/JSP/user/login.jsp").forward(request, response);//请求转发
				}
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
			
		}else if(action.equals("register")){//注册请求
			System.out.println("您发出的是处理命令....");

			UserRegister user = new UserRegister(); 
			
			String username = request.getParameter("username");
			String userpet  = request.getParameter("userpet");
			String password1 = request.getParameter("password1");
			String password2 = request.getParameter("password2");
			String useryear = request.getParameter("useryear");
			String  usersex = request.getParameter("usersex");
			//System.out.println(usersex);
			
			//判断输入的两次密码是否一致
			if(password1.equals(password2)){
				
				user.setUsername(username);
				user.setPassword1(password1);
				user.setUserpet(userpet);
				user.setUsersex(usersex);
				user.setUseryear(useryear);
				
				try {
					if(us.register(user)){
						request.getRequestDispatcher("/JSP/user/login.jsp").forward(request, response);//转发				
					}else{
						request.getRequestDispatcher("/JSP/user/register.jsp").forward(request, response); //转发
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}				
			}else{
				request.getRequestDispatcher("/JSP/user/register.jsp").forward(request, response); //转发
			}
			
		}else if(action.equals("logout")){//注销请求
			System.out.println("您发出的是注销命令....");
			HttpSession session = request.getSession();
			Enumeration<String> em = session.getAttributeNames();//获取session中所有的值
			while(em.hasMoreElements()){//遍历所有的值
				session.removeAttribute(em.nextElement().toString());//让所有的session失效
			}			
			response.sendRedirect(request.getContextPath()+"/index.jsp");//重定向
		}	
			
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       this.doGet(request, response);
	}

}

业务逻辑层代码:

public class UserServiceImpl implements UserService {
	
	/***
	 * 先把信息从文件中取出
	 * 然后对这个ud进行实例化
	 */
		
  private UserDao ud;	

  public UserServiceImpl() {
		super();
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("interface-info.properties");
		Properties pro = new Properties();
		
		try {
			pro.load(in);
			String classname = pro.getProperty("UserDao");		
			try {
				ud = (UserDao) Class.forName(classname).newInstance();
			} catch (Exception e) {			
				e.printStackTrace();
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

  @Override
  public boolean login(String username, String password) throws SQLException {
		
		/**
		 * 请求Dao,查看一下数据库中是否有数据
		 * 若果有返还true 如果没有返回false 
		 */
		
		try {
			if(ud.findUser(username, password)){
				return true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}


  @Override  
  public boolean register(UserRegister user) throws SQLException {
		
		/***
		 * 先把username从user中取出
		 * 在进行与数据库中的数据进行比较
		 * 如果数据库中没有这个username则可以进行存入
		 * 如果这个username在数据库中则返回该用户名已注册
		 */
	    String username = user.getUsername();
	    //System.out.println(username);
		if(ud.findUser(username)){
			ud.addUser(user);//进行存入		
			return true;
		}else{		
			return false;
		}	
	}
}

两个接口代码:

public interface UserService {
	
	/***
	 * 
	 * @param username : 用户名
	 * @param password : 密码
	 * @return   如果正确返回true,否则返回false
	 * register方法用作注册,先验证用户名是否唯一,不唯一返回false,唯一则把数据存入
	 */
	boolean login(String username,String password) throws SQLException;//登录

	boolean register(UserRegister user) throws SQLException;//注册
}

public interface UserDao {

	/***
	 * 第一个findUser方法用作处理登录,将用户名和密码传入与数据库进行比对
	 * 第二个findUser方法用作注册验证用户名是否唯一
	 * addUser方法是将用户注册的信息传入到UserDaoImplMysql中
	 */
	public boolean findUser (String name, String password) throws SQLException;  //处理登录
	public boolean findUser (String name) throws SQLException;  //处理注册,用户名唯一性
	public User addUser(UserRegister user) throws SQLException;
}

总结

以上就是这个MVC小项目的基本内容想要完整包的同学可以私信我哟~ 祝大家端午节快乐~

猜你喜欢

转载自blog.csdn.net/weixin_44475741/article/details/106956879