# Servlets - ServletContext nutzen



## nighty86 (21. Januar 2011)

Hallo,
Ich versuch mich ein wenig in die Servlets reinzuarbeiten, also nicht wundern, bin darin noch ganz frisch  Ich bastle gerade an einer Art "Anmeldesystem", aber nur zur Übung. Ich stecke gerade aber fest, ich will ein gemeinsames ServletContext nutzen, um dort ein Objekt zu speichern, in diesem Fall das Person Objekt :


```
public class Person 
{
	private String username;

	private String password;
	
	public Person(String username, String password)
	{
		this.username = username;
		this.password = password;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String name) {
		this.username = name;
	}


	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean isPassword(String passwd)
	{
		return this.password.equals(passwd);
	}
}
```

soviel dazu.
Dann will ich 3 Servlets nutzen. Eins zum anmelden, eins um die Personenliste anzugucken, und eins um sich wieder abzumelden.

Hier ist jetzt mein Servlet zum anmelden :


```
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class RegisterServlet extends HttpServlet
{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
	response.setContentType("text/html");
	PrintWriter out = response.getWriter();
	
	out.println("<html>");
	out.println("<head>");
	out.println("<title>Mail Liste</title>");
	out.println("</head>");
	out.println("<form method=\"post\" action=\"RegisterServlet\">");
	out.println("<p>Bitte geben Sie ihren Namen ein :</p>");
	out.println("<input type=\"text\" name=\"username\" aize=\"50\">");
	out.println("<p>Password : </p>");
	out.println("<input type=\"password\" name=\"password\" aize=\"50\">");
	out.println("<p>");
	out.println("<p>");
	out.println("<input type=\"reset\" value=\"zurücksetzen\">");
	out.println("<input type=\"submit\" value=\"abschicken\">");
	out.println("<p>");
	out.println("<a href=\"ShowServlet\">Angemeldete Personen ansehen</a>");
	out.println("<p>");
	out.println("<a href=\"SignOffServlet\">Anmeldung rückgängig machen</a>");
	
	String name;
	String passwd;
	name = request.getParameter("name");
	passwd = request.getParameter("password");
	Person person = new Person(name,passwd);
	ServletContext context = getServletContext();
	context.setAttribute("person", person);	
	
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
	doGet(request, response);
}
	
	
	
}
```

Ich denke, das müsste so +/- richtig sein. Kriege auch keine Fehlermeldung wenn ich dieses Servlet ausführe auf meinem Tomcat Server.

Nun aber zum Problem, mein Servlet um die Benutzerliste anzugucken :


```
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ShowServlet extends HttpServlet 
{
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
	{
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		ServletContext context = getServletContext();
		Person persona = (Person)context.getAttribute("Person");
		String username = persona.getUsername();
		out.println("Angemeldete Personen :" +username);
	
		
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
	{
		doGet(request, response);
	}
		
	
	

}
```

Bin jetzt erstmal nur soweit um nur eine Person anzugucken, also noch ohne Schleife um alle Benutzer rauszulesen. Aber, hier kriege ich schon folgende Fehlermeldung :


```
HTTP ERROR 500

Problem accessing /eva/ShowServlet. Reason:

    INTERNAL_SERVER_ERROR

Caused by:

java.lang.NullPointerException
	at ShowServlet.doGet(ShowServlet.java:19)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
```


Meine xml Datei noch :


```
<web-app>
<servlet>
 <servlet-name>RegisterServlet</servlet-name>
 <servlet-class>RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>RegisterServlet</servlet-name>
 <url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>

<servlet>
 <servlet-name>ShowServlet</servlet-name>
 <servlet-class>ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>ShowServlet</servlet-name>
 <url-pattern>/ShowServlet</url-pattern>
</servlet-mapping>
</web-app>
```


Hat vielleicht jemand eine Ahnung was ich falsch mache? 
Es stimmt doch so : Ich stelle den ServletContext in meinem ersten Servlet her. Dort speichere ich denn die Benutzer ins ServletContext, und im AusleseServlet lese ich sie wieder raus****


Danke erstmal im Voraus!!


----------



## nighty86 (21. Januar 2011)

Fehler gefunden. Person war klein geschrieben  So blöd...

Aber, ich krieg nun "*Angemeldete Personen :null* ", obwohl ich was eingegeben habe?


----------

