簡單登錄頁面
這是我第一次寫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.
二