应用中的一个loginServlet登录异常:
java.lang.NullPointerException
at servlet.LoginServlet.doGet(LoginServlet.java:88)
at servlet.LoginServlet.doPost(LoginServlet.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:818)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)
以下是有关文件:web.xml,login.java和loginServlet.javaweb.xml:<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ExitServlet</servlet-name>
    <servlet-class>servlet.ExitServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>MessageServlet</servlet-name>
    <servlet-class>servlet.MessageServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>DownLoadServlet</servlet-name>
    <servlet-class>servlet.DownLoadServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ExitServlet</servlet-name>
    <url-pattern>/ExitServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>MessageServlet</servlet-name>
    <url-pattern>/MessageServlet</url-pattern>
  </servlet-mapping>
    <servlet-mapping>
    <servlet-name>DownLoadServlet</servlet-name>
    <url-pattern>/DownLoadServlet</url-pattern>
  </servlet-mapping>
  
   <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
</web-app>login.java:
package bean;import java.sql.*;
import java.util.ArrayList;import form.MessageForm;public class Login { Connection conn = null;
Connection conn1 = null;
Statement st = null;
ResultSet rs = null;
Statement st1 = null;
ResultSet rs1 = null;
boolean bool = false;
ArrayList arr =null;

/**
 * 登陆
 * @param name
 * @param pwd
 * @return
 */
public MessageForm getLogin(String name,String pwd,String type){
MessageForm messageForm = new MessageForm();
 try{
 
   String sql="";
if("0".equals(type))//0,管理员,1学生,2教师
  sql = "select * from admin where loginname='"+name+"' and loginpwd='"+pwd+"'";
  else if("1".equals(type))
  sql = "select * from student where loginname='"+name+"' and loginpwd='"+pwd+"'";
  else if("2".equals(type))
  sql = "select * from teacher where loginname='"+name+"' and loginpwd='"+pwd+"'";

            conn = DBConn.getConn(); 
            st=conn.createStatement();
            rs=st.executeQuery(sql);
            
            if(rs.next()){
            
             messageForm.setUsersId(rs.getString("id"));
             messageForm.setUsername(rs.getString("username"));
             messageForm.setLogo(type);     //0,管理员,1学生,2教师
             return messageForm;
            }else{
             return null;
            }
            
            
        }catch(Exception ex){
         System.out.println("ddddddd....");
            ex.printStackTrace();
            return null;
        }finally{
         try{
if(rs!=null)rs.close();
if(st!=null)st.close();
if(conn!=null)conn.close();
}catch(Exception ee){
System.out.println(ee);
ee.printStackTrace();
}
        }

}

}
loginServlet.java:package servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import form.MessageForm;import bean.Login;public class LoginServlet extends HttpServlet { public static final String COOKIE_ID = "IDCOOKIE";
public static final String COOKIE_PWD = "PWDCOOKIE";
public static final String COOKIE_LOGO = "LOGOCOOKIE";

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request,response);
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName ="";
String pwd =  "";
String type = "";
Login login = new Login();
RequestDispatcher rd = null;
MessageForm messageForm = null;

try{
HttpSession session = request.getSession();

request.setCharacterEncoding("GBK"); //中文转码
response.setCharacterEncoding("GBK");
userName = request.getParameter("name");    //获得用户登录名
pwd = request.getParameter("pwd");  //获得用户密码
type = request.getParameter("type");  //获得登陆类型

messageForm=login.getLogin(userName, pwd,type);//0,管理员,1学生,2教师

if(messageForm != null){ //登陆成功 session.setAttribute("login", messageForm.getLogo()); //用来判断是否通过登陆进入页面,及权限;//0,管理员,1学生,2教师
session.setAttribute("loginUser", messageForm.getUsersId()); //存上登陆人的ID号
session.setAttribute("username", messageForm.getUsername()); //存上真实姓名

//保存登陆(一周)
if(request.getParameter("logo")!=null && "1".equals(request.getParameter("logo")) ){
addCookie(response,LoginServlet.COOKIE_ID,userName,7*24*60*60);
addCookie(response,LoginServlet.COOKIE_PWD,pwd,7*24*60*60);
addCookie(response,LoginServlet.COOKIE_LOGO,request.getParameter("logo"),7*24*60*60);
}else{ //清除
removeCookie(response,LoginServlet.COOKIE_ID);
removeCookie(response,LoginServlet.COOKIE_PWD);
removeCookie(response,LoginServlet.COOKIE_LOGO);
}

}else{

request.setAttribute("ifLogin","用户名或密码错误!");
request.setAttribute("oldname",userName); rd = request.getRequestDispatcher("login.jsp");
}
}catch(Exception e){
System.out.println(e);
e.printStackTrace();
//return null;
}

rd.forward(request,response);


}

private void addCookie(HttpServletResponse rep ,String name,String value, int time){
Cookie cookie = new Cookie(name,value);
cookie.setMaxAge(time);
rep.addCookie(cookie);
} private void removeCookie(HttpServletResponse rep ,String name){
Cookie cookie = new Cookie(name,"");
cookie.setMaxAge(0);
rep.addCookie(cookie);
}}

解决方案 »

  1.   

    异常里面提示你LoginServlet类中88行有null。
      

  2.   

    LoginServlet类中88、27行有null异常。
      

  3.   

    }
    }catch(Exception e){
    System.out.println(e);
    e.printStackTrace();
    //return null;
    }

    rd.forward(request,response);//第88行


    }
      

  4.   

    rd.forward(request,response);
    你开始的时候是定义rd为空的,在else里rd是赋值了,但是如果不进入else语句呢,那么楼主的rd不是还为空么?
    你这时候去调用不就是空指针异常吗?
      

  5.   

    问题这哥们已经说完了.. 直接进if, ,没有进else, LZ这个判断不太严谨阿,  应该是成功跳到一个页面,失败跳到一个页面嘛.  你只失败了跳转登陆成功却不给rd赋值, 那你只要登陆成功就报空指针!