Невозможно получить доступ к initparam в сервлете

Я изучаю сервлеты, и я создал образец sevlet и создал initparam под названием "message", используя аннотацию. Я пытаюсь получить доступ к этому параметру в методе doGet(), но получаю исключение nullPointerException. В чем может быть проблема? Код приведен ниже:

@WebServlet(
        description = "demo for in it method", 
        urlPatterns = { "/" }, 
        initParams = { 
                @WebInitParam(name = "Message", value = "this is in it param", description = "this is in it param description")
        })
public class DemoinitMethod extends HttpServlet {
    private static final long serialVersionUID = 1L;
    String msg = "";

    /**
     * @see HttpServlet#HttpServlet()
     */
    public DemoinitMethod() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        msg = "Message from in it method.";
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println(msg);

        String msg2 = getInitParameter("Message");
        out.println("</br>"+msg2);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

1 ответ

Решение

Вы переопределили метод init в вашем сервлете, поэтому вам нужно вызвать метод init класса GenericServlet.

например:

public void init(ServletConfig config) throws ServletException {
        super.init(config);

        msg = "Message from in it method.";
    }

Чтобы избавить вас от необходимости, GenericServlet предоставляет другой метод init без аргументов, поэтому вы можете переопределить тот, который не принимает аргумент.

public void init(){
 msg = "Message from in it method.";
}

init без аргумента будет вызван в GenericServlet.

Вот код метода init в GenericServlet:

public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
Другие вопросы по тегам