勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

简单登录系统的实现 基于MVC设计模式

什么是MVC设计模式

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

简单登录系统的分析

模型(JavaBean)

User

User模型用来生成包含在数据库中的合法用户的实体。将检索的到数据库合法用户生成对象可以让我们更方便、安全的使用数据库的用户信息。

package cn.llanc;

public class User
{
	String userName,passWord;

	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;
	}

	public User() {
		userName=null;
                passWord=null;
	}

}

Login

Login模型用来创建登录验证模型,核心方法为 public boolean login(String userName,String passWord) 用来判断数据是否匹配数据库,从而为“控制器”提供一个简明的数据。

package cn.llanc;

public class Login
{
	String inputName,inputPwd;

	
	 public boolean login(String userName,String passWord) {
		 if (userName.equals(inputName.trim())&&passWord.equals(inputPwd.trim()))
		{
			return true;
		} else
		{
			return false;
		}
	 }


	public Login(String inputName, String inputPwd)
	{
		super();
		this.inputName = inputName;
		this.inputPwd = inputPwd;
	}


	public String getInputName()
	{
		return inputName;
	}


	public void setInputName(String inputName)
	{
		this.inputName = inputName;
	}


	public String getInputPwd()
	{
		return inputPwd;
	}


	public void setInputPwd(String inputPwd)
	{
		this.inputPwd = inputPwd;
	}
}

DataBaseConn

DataBaseConn是数据库连接模型,这里以MySql数据库为例创建连接,并封装了查新更新关闭等方法,在其他使用数据库连接的地方极大的简化了代码。

package cn.llanc;
import java.sql.*;
public class DataBaseConn
{
	public Connection conn=null;
	public Connection getConn() {
		if(conn==null) {
			createConn();
		}
		return conn;
	}
	//创建连接
	public void createConn() {
		String url="jdbc:mysql://127.0.0.1:3306/jspdbtest?useSSL=false";
		String user="root";
		String password="root";
		
		if(conn==null) {
			try {
				Class.forName("com.mysql.jdbc.Driver");
				conn=DriverManager.getConnection(url, user, password);
			}catch(Exception e){
				
			}
		}		
	}
	//查询
	public ResultSet executeQuery(String sql) {
		ResultSet rs=null;
		if(conn==null) {
			createConn();
		}
		try {
			Statement stmt=conn.createStatement();
			rs=stmt.executeQuery(sql);
		}catch(Exception e) {
			
		}
		return rs;
	}
	//更新
	public void executeUpdate(String sql) {
		if(conn==null) {
			createConn();
		}
		try {
			Statement stmt=conn.createStatement();
			stmt.executeUpdate(sql);
		}catch(Exception e) {
			
		}
	}
	//关闭连接
	public void closeConn() {
		if(conn!=null) {
			try {
				conn.close();
				conn=null;				
			}catch(SQLException e) {
				
			}
		}
	}
}

控制器(Servlet)

YanZheng

此Servlet主要作用是验证用户登录并给出相应的交互。验证通过后创建用户session,并跳转到主页面;验证失败则给予提示并返回登录界面。

package cn.llanc.servlet;

import java.io.*;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;


import cn.llanc.*;


/**
 * Servlet implementation class YanZheng
 */
@WebServlet("/YanZheng")
public class YanZheng extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public YanZheng() {
        super();
        // TODO Auto-generated constructor stub
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//response.setCharacterEncoding("UTF-8");
		//request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();//输出对象
		//获取输入
		String inputName=request.getParameter("userName");
		String inputPwd=request.getParameter("passWord");
		if(inputName==""||inputPwd=="")
		{
			out.print("<script type=\"text/javascript\">alert(\"用户名或密码不能为空!\");location.href=\"login.jsp\";</script>");
		}else {
			DataBaseConn conn=new DataBaseConn();//数据库连接对象
			
			HttpSession session = request.getSession(); //session对象
			//创建结果集对象
			String sql="select name,password from user;";		
			//创建查询
			ResultSet rs=conn.executeQuery(sql);
			//存储数据库字符串
			String bdName="",bdPassword="";	
			try
			{
				while(rs.next())
				{
					bdName=rs.getString("name");
					bdPassword=rs.getString("password");
				}
				User user=new User();//创建数据库合法用户bean
				user.setUserName(bdName);
				user.setPassWord(bdPassword);
				//存储库字符串 end
				//关闭连接
				rs.close();
				conn.closeConn();
				
				Login isLogin=new Login(inputName, inputPwd);//创建登录对象
				
				if(isLogin.login(bdName, bdPassword))
				{
					session.setAttribute("userName",user.getUserName());
					response.sendRedirect("show.jsp");
				}
				else{
					out.print("<script type=\"text/javascript\">alert(\"用户名或密码错误!\");location.href=\"login.jsp\";</script>");
				}
				
			} catch (SQLException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
	}

}

视图(jsp)

login

又一个简单的表单(只为理解MVC,所以忽略了样式)组成。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登录</title>
</head>
<body>
	<form action="YanZheng" method="post">
		姓名:<input type="text" name="userName" id="userName">
		密码:<input type="password" name="passWord" id="passWord">
		<input type="submit" value="登录">&nbsp;<input type="reset" value="清空">
	</form>
</body>
</html>

认知

对于简单的小程序MVC模式固然做到了3种代码的高度分离、提高了重用性,但是其过程过于繁琐,适合较有规模的项目使用,如果是为了理解和熟练使用这种设计模式,则不应该因为其“规、矩”而减少使用,反而要尽可能使用,以此来加深理解和熟练应用,道理一样,举一反三

赞(0)
未经允许不得转载:喋喋不休 » 简单登录系统的实现

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选