MVC设计模式应用实例-登录程序

----知道自己错在哪的猿是幸福的。
基本功:


要求会用自己的话讲解、MVC设计模式特点、画出MVC处理流程图:程序编写要靠思想!!!




登录程序流程图:




程序清单及作用:整体编程思想!!!




-- 使用 zz 数据库
use zz;
-- 删除 user 表
drop table user if exists user;
-- 创建 user 表
create table user(
	userid varchar(30) primary key,
	name varchar(30) not null,
	password varchar(30) not null
);
insert into user
(userid, name , password) values
('admin', 'administrator', 'admin');



D:\ProgramFiles\webdemo\WEB-INF\classes\User.java

package zz.vo;
public class User{
		private String userid;
		private String name;
		private String password;

		public void setUserid(String userid){	// 用户ID
			this.userid = userid;
		}
		public String getUserid(){
			return this.userid;
		}
		public void setName(String name){
			this.name = name;
		}
		public String getName(){
			return this.name;
		}
		public void setPassword(String password){
			this.password = password;
		}
		public String getPassword(){
			return this.password;
		}
}

D:\ProgramFiles\webdemo\WEB-INF\classes\DatabaseConnection.java

package zz.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection{
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
	public static final String DBURL = "jdbc:mysql://localhost:3306/zz";
	public static final String DBUSER = "root";
	public static final String DBPASSWORD = "mysql";
	public Connection conn = null;
	public DatabaseConnection()throws Exception{	//在构造方法中进行数据库连接
		try{
			Class.forName("DBDRIVER");	// 加载驱动
			this.conn = DriverManager.
				getConnection(DBURL, DBUSER, DBPASSWORD);	// 连接数据库
		}catch (Exception e){
			throw e;
		}
	}
	public Connection getConnection(){	// 取得数据库连接
		return this.conn;
	}
	public void close()throws Exception{
		if (this.conn != null){
			try{
				this.conn.close();
			}catch (Exception e){
				throw e;
			}
		}
	}
}

D:\ProgramFiles\webdemo\WEB-INF\classes\IUserDAO.java

package zz.dao;
import zz.vo.User;

public interface IUserDAO{
	/****************执行查询操作************
	  *用户登录验证
	  *@param user 传入VO对象
	  *@return 验证的操作结果
	  *@throws Exception
	  */
	 public boolean findLogin(User user) throws Exception;
}

D:\ProgramFiles\webdemo\WEB-INF\classes\UserDAOImpl.java

package zz.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import zz.dao.IUserDAO;
import zz.vo.User;
// 实现类
public class UserDAOImpl implements IUserDAO{
	private PreparedStatement pstmt = null;
	private Connection conn = null;
	public UserDAOImpl(Connection conn){	// 构造方法中设置数据库连接对象!
		this.conn = conn;
	}
	public boolean findLogin(User user)throws Exception{
		boolean flag = false;
		try{
			String sql = "SELECT name From user WHERE userid=? AND password=? ";
			this.pstmt = this.conn.prepareStatement(sql);	//实例化
			this.pstmt.setString(1, user.getUserid());	// 设置userid
			this.pstmt.setString(2, user.getPassword());	// 设置password
			ResultSet rs = this.pstmt.executeQuery();	// 取得查询结果
			if (rs.next()){
				user.setName(rs.getString(1));		// 取得姓名
				flag = true;
			}
		}catch (Exception e){
			throw e;
		}finally{
			if (this.pstmt != null){
				try{
					this.pstmt.close();
				}catch (Exception e){
					throw e;
				}
			}
		}
		return flag;
	}
}

D:\ProgramFiles\webdemo\WEB-INF\classes\UserDAOProxy.java

package zz.dao.proxy;
import zz.dao.IUserDAO;
import zz.dao.impl.UserDAOImpl;
import zz.dbc.DatabaseConnection;
import zz.vo.User;
public class UserDAOProxy implements IUserDAO{
	private DatabaseConnection dbc = null;	// 定义数据库连接
	private IUserDAO dao = null;		// 定义实现类DAO接口
	public UserDAOProxy(){
		try{
			this.dbc = new DatabaseConnection();	// 实例化数据库连接
		}catch (Exception e){
			e.printStackTrace();
		}
		this.dao = new UserDAOImpl(this.dbc.getConnection());
	}
	public boolean findLogin(User user)throws Exception{
		boolean flag = false;
		try{
			flag = this.dao.findLogin(user);	// 调用真实主题
		}catch (Exception e){
			e.printStackTrace();
		}finally{
			this.dbc.close();
		}
		return flag;
	}
}
工厂类:
package zz.factory;
import zz.dao.IUserDAO;
import zz.dao.proxy.UserDAOProxy;

public class UserFactory{
	public static IUserDAO getIUserDAOInstance()throws Exception{ // 取得DAO实例
		return new UserDAOProxy();		// 返回代理类实例 
	}
}

login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<html>
<head><title>用户登录程序</title></head>
<script language="JavaScript">
	function validate(f){
		if (!(/^\w{5,15}$/.test(f.userid.value))){
			alert("用户ID必须是5-15位!");
			f.userid.focus();
			return flase;
		}
		if (!(/^\w{5,15}$/.test(f.password.value))){
			alert("密码必须是5-15位!");
			f.password.focus();
			return flase;
		}
	}
</script>

<body>
<h2>用户登录程序</h2>
<% request.setCharacterEncoding("GBK");%>
<%
	List<String> info = (List<String>)request.getAttribute("info");	// 取得属性
	if (info != null){
		Iterator<String> iter = info.iterator();
		while (iter.hasNext()){
%>
			<h4><%=iter.next()%></h4>	
<%
		}
	}
%>
<form action= "LoginServlet" method= "post" onSubmit="retrun validate(this)">
	用户ID<input type="text" name="userid"><br>
	密  码<input type="password" name="password"><br>
	<input type="submit" value="登录">
	<input type="reset" value="重置">
</form>
</body>
<html>


Web.xml配置文件

	<servlet>
	<servlet-name>login</servlet-name>
		<servlet-class>
 			zz.servlet.LoginServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/LoginServlet</url-pattern>
	</servlet-mapping>
错误:

1、虽然之前的文件全部编译通过,但在DAOFactory.java编译出错:

DAOFactory.java:6: 不兼容的类型
找到: zz.dao.proxy.UserDAOProxy
需要: zz.dao.IUserDAO
                return new UserDAOProxy();              // 返回代理类实例
                       ^
1 错误

MLDN李祺老师一针见血指出我的错误:

“检查你的UserDAOProxy是否实现了IUserDAO接口”

 

教训:编译检查调试看包的导入情况也要看接口的实现!



2、找错误找的吐血,不可能出现的错误,但不同目录上的文件啊!!!

修改的是一个文件,编译的是另外一个目录下的文件

Webdemo目录下

和Web-Inf/Classes目录下
当然因为用的是EditPlus编译,如果用IDE,是不会犯这种错误的,但凡事有利有弊,用这种记事本编译更能体会很多运行细节,这是用太依赖IDE的人不能比的。

3、Loging.jsp文件编译错误:

<form action= "LoginServlet" method= "post" onSubmit="retrun validate(this)">

<% request.setCharacterEncoding("GBK");%><!—缺少分号;-->



<form action="LoginServlet.jsp" method= "post" onSubmit=" return validate(this)">

4、Tomcat后台错误:

java.lang.ClassNotFoundException:DBDRIVER

……….

java.lang.NullPointerException

……….


原因:

try{
			Class.forName(“DBDRIVER”);	// 加载驱动,不要分号!
			this.conn = DriverManager.
				getConnection(DBURL, DBUSER, DBPASSWORD);	// 连接数据库
		}catch (Exception e){
			throw e;
		}


界面效果图:















  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值