最近學院安排實驗,涉及到用網頁登錄連接數據庫登錄驗證,從網上搜尋資料,本文所寫代碼均爲轉載博客園夏小暑所寫經驗分享,但借鑑學習過程中並沒有那麼順利,出現了解決不了的問題,大家幫幫忙啊
轉載於https://www.cnblogs.com/xiaxiaoshu/p/6425918.html 夏小暑的文章
我的目錄結構:
login:
<%@ page import="java.sql.*" language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登錄界面</title>
</head>
<body>
<center>
<h1 style="color:red">登錄</h1>
<form id="indexform" name="indexForm" action="logincheck.jsp" method="post">
<table border="0">
<tr>
<td>賬號:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password">
</td>
</tr>
</table>
<br>
<input type="submit" value="登錄" style="color:#BC8F8F">
</form>
</center>
</body>
</html>
logincheck:
<%@ page import="java.sql.*,java.util.*" 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>Insert title here</title>
</head>
<body>
<jsp:useBean id="db" class="Bean.DBBean" scope="page"/>
<%
request.setCharacterEncoding("UTF-8");
String username=(String)request.getParameter("username");
String password=(String)request.getParameter("password");//取出login.jsp的值
db=new Bean.DBBean();
//下面是數據庫操作 *代表所有值
String sql="select * from lhT where username="+"'"+username+"'";//定義一個查詢語句
ResultSet rs=db.executeQuery(sql);//運行上面的語句
if(rs.next())
{
/* if(password.equals(rs.getString(2)))
{
} */
if(password.equals(rs.getObject("password"))){
response.sendRedirect("loginsuccess.jsp");
}
else{
out.print("<script language='javaScript'> alert('密碼錯誤');</script>");
response.setHeader("refresh", "0;url=login.jsp");
}
}
else
{
out.print("<script language='javaScript'> alert('請輸入用戶名——else');</script>");
response.setHeader("refresh", "0;url=login.jsp");
}
%>
</body>
</html>
DBBean.java:
package Bean;
import java.sql.*;
public class DBBean {
private String driverStr = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String connStr = "jdbc:sqlserver://localhost:8888; DatabaseName=lhsjk";
private String dbusername = "admin";
private String dbpassword = "123456";
private Connection conn = null;
private Statement stmt = null;
public DBBean()
{
try
{
Class.forName(driverStr);
conn = DriverManager.getConnection(connStr, dbusername, dbpassword);
stmt = conn.createStatement();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
System.out.println("數據連接失敗!");
}
}
public int executeUpdate(String s) {
int result = 0;
System.out.println("--更新語句:"+s+"\n");
try {
result = stmt.executeUpdate(s);
} catch (Exception ex) {
System.out.println("執行更新錯誤!");
}
return result;
}
public ResultSet executeQuery(String s) {
ResultSet rs = null;
System.out.print("--查詢語句:"+s+"\n");
try {
rs = stmt.executeQuery(s);
} catch (Exception ex) {
System.out.println("ִ執行查詢錯誤!");
}
return rs;
}
public void execQuery(String s){
try {
stmt.executeUpdate(s);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("執行插入錯誤!");
}
}
public void close() {
try {
stmt.close();
conn.close();
} catch (Exception e) {
}
}
public String getDriverStr() {
return driverStr;
}
public void setDriverStr(String driverStr) {
this.driverStr = driverStr;
}
public String getConnStr() {
return connStr;
}
public void setConnStr(String connStr) {
this.connStr = connStr;
}
public String getDbusername() {
return dbusername;
}
public void setDbusername(String dbusername) {
this.dbusername = dbusername;
}
public String getDbpassword() {
return dbpassword;
}
public void setDbpassword(String dbpassword) {
this.dbpassword = dbpassword;
}
public Connection getConn() {
return conn;
}
public void setConn(Connection conn) {
this.conn = conn;
}
public Statement getStmt() {
return stmt;
}
public void setStmt(Statement stmt) {
this.stmt = stmt;
}
}
loginsuccess:
<%@ page import="java.sql.*" 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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>登錄成功 </h1>
</body>
</html>
錯誤:
com.microsoft.sqlserver.jdbc.SQLServerDriver
數據連接失敗!
com.microsoft.sqlserver.jdbc.SQLServerDriver
數據連接失敗!
--查詢語句:select * from lhT where username='1'
?執行查詢錯誤!
十二月 27, 2018 11:49:49 上午 org.apache.catalina.core.StandardWrapperValve invoke
嚴重: Servlet.service() for servlet [jsp] in context with path [/1111] threw exception [在 [21] 行處理 [/logincheck.jsp] 時發生異常
18: //涓嬮潰鏄暟鎹簱鎿嶄綔 *浠h〃鎵?鏈夊??
19: String sql="select * from lhT where username="+"'"+username+"'";//瀹氫箟涓?涓煡璇㈣鍙?
20: ResultSet rs=db.executeQuery(sql);//榪愯涓婇潰鐨勮鍙?
21: if(rs.next())
22: {
23: /* if(password.equals(rs.getString(2)))
24: {
Stacktrace:] with root cause
java.lang.NullPointerException
at org.apache.jsp.logincheck_jsp._jspService(logincheck_jsp.java:145)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
解決方法是將bean類中的構造函數置空另設置getconn
代碼如下:
public void getconn()
{
try
{
Class.forName(driverStr);
conn = DriverManager.getConnection(connStr, dbusername, dbpassword);
stmt = conn.createStatement();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
System.out.println("數據連接失敗!");
}
}
同時在check.jsp中添加代碼
db.getconn();
如果有朋友知道是爲什麼可以分享一下,我這是解決了問題,但是不知道爲什麼。。。