欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-25 22:51:10
...

引言

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

关于MVC

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

关于我这个项目

这个项目实现了注册,登录,注销三个功能,这个注销并不是把数据从数据库中删除,而是退出,也就是注销session。
效果如图:
主界面:
使用MVC框架开发了一个实现用户登录注册注销的小项目
登录界面:
使用MVC框架开发了一个实现用户登录注册注销的小项目
登陆成功界面
使用MVC框架开发了一个实现用户登录注册注销的小项目
注册界面
使用MVC框架开发了一个实现用户登录注册注销的小项目

基本构局

使用MVC框架开发了一个实现用户登录注册注销的小项目
这是我们老师画的大致框架:
使用MVC框架开发了一个实现用户登录注册注销的小项目
首先介绍一下视图,主页面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小项目的基本内容想要完整包的同学可以私信我哟~ 祝大家端午节快乐~