登錄頁面(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