Servlet encountered an error using HttpSession

[nobr]CookieLoginServlet

import javax.servlet.*;

import java.util.*;

import javax.servlet.http.*;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.*;

/**

* Servlet implementation class for Servlet: CookieLoginServlet

*

*/

publicclass CookieLoginServletextends javax.servlet.http.HttpServletimplements javax.servlet.Servlet{

/* (non-Java-doc)

* @see javax.servlet.http.HttpServlet#HttpServlet()

*/

public CookieLoginServlet(){

super();

}

/* (non-Java-doc)

* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{

// TODO Auto-generated method stub

sendLoginForm(response,false);

}

privatevoid sendLoginForm(HttpServletResponse response,boolean withErrorMessage)

throws ServletException, IOException{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<head>");

out.println("<title>Cookie Login Servlet</title>");

out.println("<body>");

out.println("<center>");

if(withErrorMessage){

out.println("Login failed please try again");

out.println("if you think you have entered the correct user name" +

" and password, the cookie settings in your browser might be off" +

"<br>Click <A href=InfoPage.html>here</a> for information" +

"on how to turn it on.<br>");

}

out.println("<BR>");

out.println("<BR><H2>Login Page</H2>");

out.println("<BR>");

out.println("<BR>Please enter your user name and password.");

out.println("<BR>");

out.println("<BR><FORM METHOD=POST>");

out.println("<TABLE>");

out.println("<TR>");

out.println("<TD>User Name:</TD>");

out.println("<TD><INPUT TYPE=TEXT NAME=userName></TD>");

out.println("</TR>");

out.println("<TR>");

out.println("<TD>Password:</TD>");

out.println("<TD><INPUT TYPE=PASSWORD NAME=password></TD>");

out.println("</TR>");

out.println("<TR>");

out.println("<TD ALIGN=RIGHT COLSPAN=2>");

out.println("<INPUT TYPE=SUBMIT VALUE=Login></TD>");

out.println("</TR>");

out.println("</TABLE>");

out.println("</FORM>");

out.println("</CENTER>");

out.println("</BODY>");

out.println("</HTML>");

}

/* (non-Java-doc)

* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

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

// TODO Auto-generated method stub

String userName = request.getParameter("userName");

String password = request.getParameter("password");

if(login(userName, password)){

//send cookie to the browswer

HttpSession session = request.getSession(true);

session.setAttribute("Loggedin",new String("true"));

response.sendRedirect("ContentServlet");

}

else{

sendLoginForm(response,true);

}

}

publicstaticboolean login(String userName, String password){

try{

Class.forName("org.apache.derby.jdbc.ClientDriver");

Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/sample");

Statement s = con.createStatement();

String sql ="SELECT UserName FROM USERS.posts" +

" WHERE UserName='" + fixSqlFieldValue(userName) +"'" +

" AND Password='" + fixSqlFieldValue(password) +"'";

ResultSet rs = s.executeQuery(sql);

if (rs.next()){

rs.close();

s.close();

con.close();

returntrue;

}

rs.close();

s.close();

con.close();

}

catch(ClassNotFoundException e){

System.out.println(e.toString());

}

catch (SQLException e){

System.out.println(e.toString());

}

catch (Exception e){

System.out.println(e.toString());

}

returnfalse;

}

publicstatic String fixSqlFieldValue(String value){

if (value==null)

returnnull;

int length = value.length();

StringBuffer fixedValue =new StringBuffer((int) (length * 1.1));

for (int i=0; i<length; i++){

char c = value.charAt(i);

if (c=='\'')

fixedValue.append("''");

else

fixedValue.append(c);

}

return fixedValue.toString();

}

}

and here is my ContentServlet class

package chapter5;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/**

* Servlet implementation class for Servlet: ContentServlet

*

*/

publicclass ContentServletextends javax.servlet.http.HttpServletimplements javax.servlet.Servlet{

/**

*

*/

privatestaticfinallong serialVersionUID = 1;

/* (non-Java-doc)

* @see javax.servlet.http.HttpServlet#HttpServlet()

*/

public String loginUrl ="CookieLoginServlet";

public ContentServlet(){

super();

}

/* (non-Java-doc)

* @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{

// TODO Auto-generated method stub

HttpSession session = request.getSession();

if (session==null)

response.sendRedirect(loginUrl);

else{

String loggedIn = (String) session.getAttribute("loggedIn");

if (!loggedIn.equals("true"))

response.sendRedirect(loginUrl);

}

// This is an authorized user, okay to display content

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("><HTML>");

out.println("<HEAD>");

out.println("<TITLE>Welcome</TITLE>");

out.println("</HEAD>");

out.println("<BODY>");

out.println("Welcome.");

out.println("</BODY>");

out.println("</HTML>");

}

/* (non-Java-doc)

* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

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

// TODO Auto-generated method stub

doGet(request, response);

}

}

Now when i run my cookielogin class and enter a username and a specified password it should redirect to my contentservlet and display a wellcome page if the user exist in the database if not then back to login form. But for some reason this is the error i am recieving.

type Exception report

message

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

exception

java.lang.NullPointerException

chapter5.ContentServlet.doGet(ContentServlet.java:38)

javax.servlet.http.HttpServlet.service(HttpServlet.java:743)

javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

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

--

Apache Tomcat/5.0.14

Any ideas?[/nobr]

[13866 byte] By [lrngjavaa] at [2007-11-27 7:46:54]
# 1

>java.lang.NullPointerException

> chapter5.ContentServlet.doGet(ContentServlet.java:38)

> Any ideas?

Err, you are dereferencing a null value at line 38 of ContentServlet in the doGet() method?

Is this really so mysterious that you need to waste time going to a forum?

ejpa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 2
> Is this really so mysterious that you need to waste> time going to a forum?Of course. He's learning the basics like JSPs, servlets, EJBs. The more advanced stuff like "how not to write bugs" or "how to read the docs" will come later.
CeciNEstPasUnProgrammeura at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 3

You got NullPointerException because you never set the attribute in your HttpSession. To be more precise,

String loggedIn = (String) session.getAttribute("loggedIn");

if (!loggedIn.equals("true"))

response.sendRedirect(loginUrl);

You can add the following checking.

String loggedIn = (String) session.getAttribute("loggedIn");

if (loggedIn == null || !loggedIn.equals("true"))

response.sendRedirect(loginUrl);

Hope that helps.

XCrawlera at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 4

> >java.lang.NullPointerException

> >

> chapter5.ContentServlet.doGet(ContentServlet.java:38)

>

> > Any ideas?

>

> Err, you are dereferencing a null value at line 38 of

> ContentServlet in the doGet() method?

>

> Is this really so mysterious that you need to waste

> time going to a forum?

Yes i do. I take advantage of the forums while learning a new technology. If the book code is not working then how am i suppose to know what to do what not ?

lrngjavaa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 5

> > Is this really so mysterious that you need to

> waste

> > time going to a forum?

>

> Of course. He's learning the basics like JSPs,

> servlets, EJBs. The more advanced stuff like "how not

> to write bugs" or "how to read the docs" will come

> later.

Thanks for understanding me :)

lrngjavaa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 6

> You got NullPointerException because you never set

> the attribute in your HttpSession. To be more

> precise,

>

> [code]

> String loggedIn = (String)

> session.getAttribute("loggedIn");

>if (!loggedIn.equals("true"))

>response.sendRedirect(loginUrl);

> e]

>

> You can add the following checking.

> [code]

> String loggedIn = (String)

> session.getAttribute("loggedIn");

>if (loggedIn == null || !loggedIn.equals("true"))

>response.sendRedirect(loginUrl);

> e]

>

> Hope that helps.

Ok thanks. now i dont get an error but my cookieloginservlet is not redirecting my page to contentservlet? i mean its not giving me any error nor displaying the wellcome message if the login is successful. any clues?

lrngjavaa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 7
i tried to forward the request but still not working.
lrngjavaa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 8
> i tried to forward the request but still not working.What I find interesting is that the OP expects us to diagnose his problem without any indication as to what 'not working' means.
sabre150a at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 9
no my question is why my request is not forwarding to another servlet which is contentservlet?
lrngjavaa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...
# 10

ok after some thinking i tried replacing the response.sendRedirect("ContentServlet"); to

RequestDispatcher rd = request.getRequestDispatcher("chapter5.ContentServlet");

rd.forward(request, response);

So this one is not working either it gives me http404 error .

so i tried this also

response.sendRedirect("chapter5.ContentServlet");

with this sendRedirect i dont get any error. i enter username and it stays on the same page where it asks the user to enter username and password.

lrngjavaa at 2007-7-12 19:27:54 > top of Java-index,Java Essentials,New To Java...