站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题关于-lt;-lt;JSP数据库开发实例精粹-gt;-gt;的代码调试问题!

关于-lt;-lt;JSP数据库开发实例精粹-gt;-gt;的代码调试问题!

摘要: 关于<>的代码调试问题!


<<JSP数据库开发实例精粹>>中的第一个实例是一个网上书店.我在调试的时候连接数据库出现了问题:
  当用户登陆时出现下列错误:
  
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.NullPointerException
bookshop.run.login.excute(login.java:65)
org.apache.jsp.bookshop.login_jsp._jspService(login_jsp.java:71)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
  
  查找到run.login中第65行为 stmt = db.conn.createStatement ();
  login由DataBase派生而来 DataBase.java 代码如下:
  
package bookshop.util;
/**
*

数据库连接专用包


*

Copyright: wxy Copyright (c) 2004


*

Company:juanjuan book shop online


* @by :wxy
* @version 1.0
*/
import java.sql.*;
public class DataBase {
public Connection conn;
public Statement stmt;
public ResultSet rs=null;
public String sqlStr="";

public DataBase() {
this.connect();
}
public boolean connect(){
try{
Class.forName("org.gjt.mm.mysql.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost/bookstore","root","123");
stmt = conn.createStatement ();
}catch(Exception ee){
System.out.println("connect db error:"+ee.getMessage());
return false;
}
return true;
}
public static void main(String[] args) {
try{
DataBase db = new DataBase();
db.connect();
}catch(Exception e){
e.printStackTrace();
}
}
}

请用过该书的朋友帮忙解答,也请路过的朋友帮忙解答或帮忙顶 谢谢



单独执行 DataBase.java 看看


看看你的main函数中db.connect();返回的是不是true 如果不是就说明你的数据库连接类有问题,而且很有可能的原因是驱动没有加载,也就是驱动包(jar文件)


是jar文件问题或者就是数据库文件有没有忘拷


把驱动文件放到WEB-INF/classes/lib/下面再试


努力接分升级中...帮你up!


java.lang.NullPointerException
把login.jsp,login.java代码都贴出来.
估计是Mysql的jdbc驱动版本问题.


回"天涯"
login.jsp:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page session="true" %>

<%
String mesg = "";

if( request.getParameter("username")!=null && !request.getParameter("username").equals("")){
String username =request.getParameter("username");
String passwd = request.getParameter("passwd");
username = new String(username.getBytes("ISO8859-1"));
passwd = new String(passwd.getBytes("ISO8859-1"));
login.setUsername(username);
login.setPasswd(passwd);
out.print(username+passwd);
if (login.excute()){
session.setAttribute("username",username);
String userid = Long.toString(login.getUserid());
session.setAttribute("userid",userid);
response.sendRedirect("booklist.jsp");
%>
<%
}else {
mesg = "登录出错!";
}
}
%>
<%@include file="/bookshop/inc/head.inc"%>

<script language="javascript">

function checkform() {
if (document.form1.username.value=="" || document.form1.passwd.value==""){
alert("用户名或密码为空!");
return false;
}
return true;

}

</script>
用户登录



<% if (!mesg.equals("")){
out.println("

" + mesg + "

");}%>

<form name="form1" method="post" action="login.jsp">
<table width="400" border="0" cellspacing="1" cellpadding="1" align="center">
<tr>
<td width="147" align="right">用户名:

</td>
<td width="246" valign="top">
<input type="text" name="username" size="16" maxlength="25">
</td>
</tr>
<tr>
<td width="147" align="right">密码:</td>
<td width="246" valign="top">
<input type="password" name="passwd" maxlength="20" size="16">
</td>
</tr>
<tr>
<td width="147" align="right">&nbsp;</td>
<td width="246" valign="top">
<input type="submit" name="Submit" value="登录" onclick="javascript:return(checkform());">
<input type="reset" name="Submit2" value="取消">
</td>
</tr>
<tr>
<td colspan="2" align="center">

&nbsp;


测试用户:wxy 密码:wxy
</td>
</tr>
<tr>

<td colspan="2" align="center">

&nbsp;


如果你还不是本站用户,请在此注册


</td>
</tr>
</table>
</form>
<%@include file="/bookshop/inc/tail.inc"%>

login.java:
package bookshop.run;
/**
*

管理用户登录的类


*/
import bookshop.util.*;
public class login extends DataBase {
private String username;//登录用户名
private String passwd;//登录密码
private boolean isadmin;//是否管理员登录
private long userid=0;//用户ID号
public login() throws Exception{
super();
username = "";
passwd = "";
isadmin = false;
}
public String getUsername() {
return username;
}
public void setUsername(String newusername) {
username = newusername;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String newpasswd) {
passwd = newpasswd;
}
public boolean getIsadmin() {
return isadmin;
}
public void setIsadmin(boolean newIsadmin) {
isadmin = newIsadmin;
}
public long getUserid() {
return userid;
}
public void setUserid (long uid) {
userid = uid;
}
/**
* 获得查询用户信息的sql语句
* @return
*/
public String getSql() {
if (isadmin) {
sqlStr = "select * from BookAdmin where adminuser = '" +
dataFormat.toSql(username) + "' and adminpass = '" +
dataFormat.toSql(passwd) + "'";
}else {
sqlStr = "select * from shop_user where username = '" +
username + "' and password = '" + passwd + "'";
}
return sqlStr;
}
/**
* 执行查询
* @return
* @throws java.lang.Exception
*/
public boolean excute() throws Exception {
boolean flag = false;
DataBase db = new DataBase();
db.connect();
stmt = db.conn.createStatement ();
rs = stmt.executeQuery(getSql());
if (rs.next()){
if (!isadmin)
{
userid = rs.getLong("id");
}
flag = true;
}
rs.close();
return flag;
}
};


up


谢谢回答问题的各位.这段时间一直都没时间上网.给分晚了点,抱歉!


↑返回目录
前一篇: 想用eclipse开发struts+spring+hibernate框架的项目,有没有资料手把手教的呢?参考书上的太笼统,很多细节都没涉及到,大家多指点。。。
后一篇: 请问用什么方法能防止用户直接从地址栏登陆管理界面呢???