登录页面(java web)


 

                                           简单登录页面

这是我第一次写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<User> load();
 public User load(String name);
 
}
错误总结:刚开始偷赖,认为程序实现功能简单,只用写一个实现功能的类。但到后面就因为没写接口,所以preparedStatement = connection.prepareStatement(sql);报错。
           public List<User> load()查询数据库表中的全部用户信息。public User load(String name)查询用户名为name的用户信息。
           public List<User> 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<User> load() {
   Connection connection = DBUtil.getConnection();
   //准备sql语句
   String sql = "select * from user1 ";
   //创建语句传输对象
   PreparedStatement preparedStatement = null;
   ResultSet resultSet = null;
   //集合中只能放入user对象
   List<User> users = new ArrayList<User>();
   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.用户登录界面
<!-- login.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
</head>
<body>
   <form action="doLogin.jsp"  method="get" >
   <h6>用户登录</h6>
   <table align="center" width="30%" border="1">
   <tr><td> 登录名:</td>                                                             s            
      <td><input type=" text" name="username"/></td></tr>
   <tr><td>  登录密码:</td>
     <td><input type="password" name="password"/></td></tr>
    <tr><td colspan="2" align="center"><input type="submit" value="登录" ><td></tr>
    </table>
   </form>
</body>
</html>
错误总结: (1)因为之前jsp的基本语法知识掌握较少,所以编写的登录界面较简单。实现登录界面的jsp文件的名为doLogin.jsp,但由于之前 <form >标签中一直写成dologin.jsp,所以一直不能呈贡跳转页面。

7.实现用户登录。
<%@page import="com.jaovo.msg.dao.UserDaoImpl" %>
<%@page import="com.jaovo.msg.model.User" %>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<%
 //接收客户端传递过来的参数
 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("输入密码或登录名有错!");
 
 
%> 

</html>
 
    在这个文件中要调用其他文件中的内容,由于其他文件中的错误很多,所以在登录界面跳转之后,总是会报这个文件中语句的错误。

结果截图:

 

 

 

 

写过这次作业后,我发现自己对java web 所用到的知识了解很少,所以我预备以后用尽量多的时间来学习java web.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM