----知道自己错在哪的猿是幸福的。
基本功:
要求会用自己的话讲解、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:ProgramFileswebdemoWEB-INFclassesUser.java
package zz.vo;
public class User{private String userid;private String name;private String password;public void setUserid(String userid){ // 用户IDthis.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:ProgramFileswebdemoWEB-INFclassesDatabaseConnection.java
package zz.dbc;
import java.sql.Connection;
import java.sql.DriverManager;
public class DatabaseConnection{public static final String DBDRIVER = "sql.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"); // 加载驱动 = Connection(DBURL, DBUSER, DBPASSWORD); // 连接数据库}catch (Exception e){throw e;}}public Connection getConnection(){ // 取得数据库连接;}public void close()throws Exception{if ( != null){lose();}catch (Exception e){throw e;}}}
}
D:ProgramFileswebdemoWEB-INFclassesIUserDAO.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:ProgramFileswebdemoWEB-INFclassesUserDAOImpl.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){ // 构造方法中设置数据库连接对象! = conn;}public boolean findLogin(User user)throws Exception{boolean flag = false;try{String sql = "SELECT name From user WHERE userid=? AND password=? ";this.pstmt = prepareStatement(sql); //实例化this.pstmt.setString(1, Userid()); // 设置useridthis.pstmt.setString(2, Password()); // 设置passwordResultSet rs = uteQuery(); // 取得查询结果if (rs.next()){user.String(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:ProgramFileswebdemoWEB-INFclassesUserDAOProxy.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(Connection());}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(); // 返回代理类实例 }
}
<%@ 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>)Attribute("info"); // 取得属性if (info != null){Iterator<String> iter = info.iterator();while (iter.hasNext()){
%><h4><%()%></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>
<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.IUserDAOreturn 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");%><!—缺少分号;--> |
java.lang.ClassNotFoundException:DBDRIVER
……….
java.lang.NullPointerException
……….
原因:
try{Class.forName(“DBDRIVER”); // 加载驱动,不要分号 = Connection(DBURL, DBUSER, DBPASSWORD); // 连接数据库}catch (Exception e){throw e;}
本文发布于:2024-02-03 02:02:48,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170689696447908.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |