I am studying servlets
and I made one example from book but I got nullpointerexception
.
Here are my classes:
package chala;
public class Dog {
private String breed;
public Dog(String breed) {
this.breed = breed;
}
public String getBreed() {
return breed;
}
public void setBreed(String breed) {
this.breed = breed;
}
}
Dog class is POJO class with simple functionality.
package chala;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class CtxListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent event) {
ServletContext sc = event.getServletContext();
String breed = sc.getInitParameter("breed");
Dog d = new Dog(breed);
sc.setAttribute("dog", d);
}
@Override
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
}
}
This is context listener class where I get servlet
context object, get init parameter from it, and creating Dog object, then setting attribute of servlet
context.
package chala;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class CtxListenerTester
*/
@WebServlet("/CtxListenerTester")
public class CtxListenerTester extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Servlet Context Listener Example");
out.print("<BR/>");
ServletContext sc = (ServletContext) getServletContext();
System.out.println(sc.getAttribute("dog"));
Dog dog = (Dog) getServletContext().getAttribute("dog");
out.print("Dogs breed is :" + dog.getBreed());
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
This is my servlet
where I am getting servlet
context attribute (DOG object) and calling Dogs getBreed()
method. When I start and send GET request I am getting nullpointerexception
.
Here is my web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ContextListenerDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>breed</param-name>
<param-value>Labrador</param-value>
</context-param>
<listener>
<listener-class>chala.CtxListener</listener-class>
</listener>
</web-app>
you set the attribute in contextDestroyed()
method that will invoked while context is being destroyed you need to set that attribute in contextInitialized()