简单登录页面
这是我第一次写java web程序,所以遇到了很多问题,并且花费了许多时间去调试这个程序代码。
下面就是我写的一个简单的登录程序,用到了mysql,tomcat7,jsp,java。
程序目录
1.连接数据库
package com.jaovo.msg.Util;
import java.sql.*;
public class DBUtil {
public static Connection getConnection() {
//加载驱动
String dbDrive="com.mysql.jdbc.Driver";
try {
try {
Class.forName(dbDrive).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//连接数据库
Connection connection=null;
String url="jdbc:mysql://localhost:3307/l_user";
try {
connection=DriverManager.getConnection(url,"root","root");
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void close(Connection connection ) {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void close(PreparedStatement preparedStatement ) {
try {
if (preparedStatement != null) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet resultSet ) {
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
错误总结:(1)原来不知道url语句的参数含义,所以直接复制了老师原来写的uml值,导致很长时间连接不上数据库。
url="jdbc:数据库://端口名/即将连接的database"
(2)DriverManager.getConnection(url,"数据库登录名","密码")。
(3)连接数据库步骤
1.导入java.sql包
import java.sql.*;
2.加载数据库的连接地址,用户名和密码。
Class.forName("com.mysql.jdbc.Driver") ;
3.定义数据库的链接地址,用户名和密码。
String user = "root";
String password = "root";
String url = "jdbc:mysql://localhost:3307/jaovo_msg";
4.得到与数据库的连接对象。
connection = DriverManager.getConnection(url,user,password);
5.声明sql语句。
String sql = "select * from user1 ";
6.得到语句对象。
preparedStatement = connection.prepareStatement(sql);
7.执行Sql语句。
resultSet = preparedStatement.executeQuery();
8.处理Sql语句的返回语句。
while(resultSet.next()) {
user = new User();
user.setName(resultSet.getString("user"));
user.setPassword(resultSet.getString("password"));
users.add(user);
}
9.关闭对象
DBUtil.close(resultSet);
DBUtil.close(preparedStatement);
DBUtil.close(connection);
3.登录用户类
package com.jaovo.msg.model;
public class User {
private String name;
private String password;
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setName(String name) {
this.name=name;
}
public void setPassword(String password) {
this.password=password;
}
}
由于这只是做一个简单的用户登录页面,所以只用填入登录名和密码。所以用户类中只有name和password.
4.程序功能方法的借口。
package com.jaovo.msg.dao;
import java.util.List;
import com.jaovo.msg.model.User;
public interface IUserDao {
public List load();
public User load(String name);
}
错误总结:刚开始偷赖,认为程序实现功能简单,只用写一个实现功能的类。但到后面就因为没写接口,所以preparedStatement = connection.prepareStatement(sql);报错。
public List load()查询数据库表中的全部用户信息。public User load(String name)查询用户名为name的用户信息。
public List load();方法在此程序中可以删去,因为刚开始执行public User load(String name)方法总是报错,所以先拿查询数据库表的全部信息练练手,确认之前的连接数据库步骤成功。
5.实现功能方法的类。
package com.jaovo.msg.dao;
import com.jaovo.msg.Util.DBUtil;
import com.jaovo.msg.model.User;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl implements IUserDao{
@Override
public User load(String name) {
Connection connection = DBUtil.getConnection();
//准备sql语句
String sql = "select * from user1 where user ='"+name+"'";
//创建语句传输对象
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
//集合中只能放入user对象
User user = null;
try {
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
if(resultSet.next()) {
user = new User();
user.setPassword(resultSet.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
DBUtil.close(resultSet);
DBUtil.close(preparedStatement);
DBUtil.close(connection);
}
return user;
}
@Override
public List load() {
Connection connection = DBUtil.getConnection();
//准备sql语句
String sql = "select * from user1 ";
//创建语句传输对象
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
//集合中只能放入user对象
List users = new ArrayList();
User user = null;
try {
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
user = new User();
user.setName(resultSet.getString("user"));
user.setPassword(resultSet.getString("password"));
users.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
DBUtil.close(resultSet);
DBUtil.close(preparedStatement);
DBUtil.close(connection);
}
return users;
}
}
错误总结:(1)在public User load(String name)方法中查询用户名为name的用户信息的sql查询语句之前写成sql="select * from user1 where user =?"但是因为数据库表中user类型为varchar(30),所以这样写一直报错。
后来改成sql=select * from user1 where user ='"+name+"'"不再报错。因为sql语句写错,所以resultSet.next()为false,所以不能查询到用户信息,所以一直报空指针错误。
(2)由于刚开始这些方法是直接复制的老师的代码,所以没改查询语句中的数据库表名,也在报错。后来能运行查询数据库表中全部信息的功能,但由于查询单个用户的sql语句一直写错不能运行查询单个用户信息,所以花费了很长时间去检查出错的地方和找方法去解决。
6.用户登录界面
pageEncoding="UTF-8"%>
用户登录
用户登录
登录名:
登录密码:
错误总结: (1)因为之前jsp的基本语法知识掌握较少,所以编写的登录界面较简单。实现登录界面的jsp文件的名为doLogin.jsp,但由于之前
标签中一直写成dologin.jsp,所以一直不能呈贡跳转页面。
7.实现用户登录。
pageEncoding="UTF-8"%>
//接收客户端传递过来的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
UserDaoImpl a=new UserDaoImpl();
User user=a.load(username);
String password1=user.getPassword();//登录窗口传递过来的密码与数据库中查询到的密码相比较
if(password.equals(password1)){
out.println("登录成功");
}
else
out.println("输入密码或登录名有错!");
%>
在这个文件中要调用其他文件中的内容,由于其他文件中的错误很多,所以在登录界面跳转之后,总是会报这个文件中语句的错误。
结果截图: