Jsp页面登录时连接数据库出错

Domo007 2008-01-29 03:40:37
我做了一个登录验证的Jsp页面,javabean已经写好了,但是登录验证时出现错误,其错误信息如下:

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

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /default.jsp at line 15

12: if(session.getAttribute("user") ==null){
13: String loginName = request.getParameter("loginName");
14: String passWord = request.getParameter("passWord");
15: User user = UserDAO.checkUser(loginName, passWord);
16: if(user != null){
17: session.setAttribute("user", user);
18: }else{


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:435)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.test.web.CheckUserfilter.doFilter(CheckUserfilter.java:40)


root cause

java.lang.NullPointerException
com.test.dao.UserDAO.checkUser(UserDAO.java:27)
org.apache.jsp.default_jsp._jspService(default_jsp.java:73)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.test.web.CheckUserfilter.doFilter(CheckUserfilter.java:40)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

其中用到的javabean代码如下:

UserDAO:
public class UserDAO {
public static User checkUser(String loginName, String passWord){//登录验证
Connection con = null;
PreparedStatement prest = null;
ResultSet re = null;
User user = null;
try {
con= DataBaseManager.getConnection();
String strQuery = "select loginName, passWord from customer where loginName=? and passWord=?";
prest = con.prepareStatement(strQuery);
prest.setString(1, loginName);
prest.setString(2, passWord);
re = prest.executeQuery();
if(re.next()){
user = new User();
user.setLoginName(re.getString(1));
user.setPassWord(re.getString(2));
}

} catch (SQLException e) {
e.printStackTrace();
}finally{
DataBaseManager.close(re);
DataBaseManager.close(prest);
DataBaseManager.close(con);
}
return user;
}
.......//因为错误中只出现这个方法,所以后面省略了
CheckUserfilter:
public class CheckUserfilter implements Filter {

private FilterConfig filterConfig = null;

public void destroy() {

this.filterConfig = null;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession();
if(session.getAttribute("user")==null){
String uri = req.getRequestURI();
if(!(uri.contains("default.jsp")&& "login".equals(req.getParameter("action")))&&!uri.contains("login.jsp")){
RequestDispatcher dispatcher = req.getRequestDispatcher("/login.jsp");
dispatcher.forward(req, res);
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
}
希望好心人给指点一下,我初学者,谢谢!
...全文
227 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Domo007 2008-01-30
  • 打赏
  • 举报
回复
连接池也没有问题呢?你指的是server.xml文件<Context>里面的配置么?
Rain 2008-01-30
  • 打赏
  • 举报
回复
代码这是没问题的.看下你连接池配的是不是有问题啊
Domo007 2008-01-29
  • 打赏
  • 举报
回复
DataBaseManager类是这样的:
public class DataBaseManager {

public static Connection getConnection() {
Connection conn = null;
try {
Context initCtx = new InitialContext();
//获取连接池对象
Object obj = (Object) initCtx.lookup("java:comp/env/jdbc/app");
//类型转换
javax.sql.DataSource ds = (javax.sql.DataSource) obj;
conn = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

public static void close(Connection conn){
try{
if(conn != null)
conn.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}

public static void close(Statement state){
try{
if(state != null)
state.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}

public static void close(PreparedStatement state){
try{
if(state != null)
state.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}

public static void close(ResultSet re){
try{
if(re != null)
re.close();
}catch(SQLException ex){
ex.printStackTrace();
}
}

}
看了一天了,还是有问题。。。累了,明天再说吧。。谢谢大家的回答!!
mcluvin 2008-01-29
  • 打赏
  • 举报
回复
DataBaseManager类没贴出来,应该是getConnection();得到的是null
qiudawei115 2008-01-29
  • 打赏
  • 举报
回复
看错了,非常抱歉!!!
qiudawei115 2008-01-29
  • 打赏
  • 举报
回复
if(session.getAttribute("user") ==null){
13: String loginName = request.getParameter("loginName");
14: String passWord = request.getParameter("passWord");
15: User user = UserDAO.checkUser(loginName, passWord);
16: if(user != null){
17: session.setAttribute("user", user);
18: }else{

session属性值为空居然还用getter放法
session.getAttribute("user") !=null
unsalted 2008-01-29
  • 打赏
  • 举报
回复
12: if(session.getAttribute("user") ==null){
13: String loginName = request.getParameter("loginName");
14: String passWord = request.getParameter("passWord");
15: User user = UserDAO.checkUser(loginName, passWord);
16: if(user != null){
17: session.setAttribute("user", user);
18: }else{

错误信息里提示的这个地方没有错误吧?

与这块无关,就是得到的conn市NULL的缘故。检查一下为什么没有得到连接是关键。
Domo007 2008-01-29
  • 打赏
  • 举报
回复
有没有人能加我qq说?谢谢 371389808
Domo007 2008-01-29
  • 打赏
  • 举报
回复
12: if(session.getAttribute("user") ==null){
13: String loginName = request.getParameter("loginName");
14: String passWord = request.getParameter("passWord");
15: User user = UserDAO.checkUser(loginName, passWord);
16: if(user != null){
17: session.setAttribute("user", user);
18: }else{

错误信息里提示的这个地方没有错误吧?
lovekker 2008-01-29
  • 打赏
  • 举报
回复
出现java.lang.NullPointerException
从初使化实例角度发现错误
实在不行建议用debug 调试一下就OK了
Rain 2008-01-29
  • 打赏
  • 举报
回复
在这个类里做个测试看能联上不?
wafxl 2008-01-29
  • 打赏
  • 举报
回复
后台打出conn看一下
  • 打赏
  • 举报
回复
直接连库能连上吗?
Domo007 2008-01-29
  • 打赏
  • 举报
回复
getConnection()方法是这样的,好像没有错呢??
public static Connection getConnection() {
Connection conn = null;
try {
Context initCtx = new InitialContext();
//获取连接池对象
Object obj = (Object) initCtx.lookup("java:comp/env/jdbc/app");
//类型转换
javax.sql.DataSource ds = (javax.sql.DataSource) obj;
conn = ds.getConnection("xu","123");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
Rain 2008-01-29
  • 打赏
  • 举报
回复
看下你的DataBaseManager类是怎么等到Connection的吧.
你的con是null才报27行NullPointerException
Domo007 2008-01-29
  • 打赏
  • 举报
回复
第27行是这个:
try {
con= DataBaseManager.getConnection();
String strQuery = "select loginName, passWord from customer where loginName=? and passWord=?";
prest = con.prepareStatement(strQuery);//*********第27行!!*******
prest.setString(1, loginName);
prest.setString(2, passWord);
re = prest.executeQuery();
if(re.next()){
user = new User();
user.setLoginName(re.getString(1));
user.setPassWord(re.getString(2));
}
wafxl 2008-01-29
  • 打赏
  • 举报
回复
com.test.dao.UserDAO.checkUser(UserDAO.java:27)
unsalted 2008-01-29
  • 打赏
  • 举报
回复
com.test.dao.UserDAO.checkUser(UserDAO.java:27)
27行扔出空指针,看看27行的代码。
Domo007 2008-01-29
  • 打赏
  • 举报
回复
登录页面的代码如下:
<body>
<%
if(session.getAttribute("user") ==null){
String loginName = request.getParameter("loginName");
String passWord = request.getParameter("passWord");
User user = UserDAO.checkUser(loginName, passWord);
if(user != null){
session.setAttribute("user", user);
}else{
request.setAttribute("error", "login name: " + loginName +"<br>" + "passWord: "+ passWord +"<br> they were wrong! Please re-try...");
%>
<jsp:forward page="login.jsp"/>
<%
}
}

%>

<a href="customer_create.jsp">用户添加</a><br>
<a href="users_retrieve.jsp">用户查询</a><br>
<%@include file="foot.jsp" %>

</body>

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧