Zdaj OCEWCD – pytanie 10

Co się stanie po uruchomieniu kodu poniższego servletu?

@WebServlet("/Test")
public class TestServlet extends HttpServlet
{
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        request.setAttribute("myBean", new BeanClass("SERVLET"));
        request.getRequestDispatcher("test.jsp").forward(request, response);
    }
}
public class BeanClass
{
    private String text;

    public BeanClass(String text)
    {
        this.text = text;
    }

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text = text;
    }
}
<html>
<head>
    <title>Test Page</title>
</head>
<body>
    <jsp:useBean id="myBean" class="eu.javablog.ocewcd.BeanClass">
        <jsp:setProperty name="myBean" property="text" value="DEFAULT" />
    </jsp:useBean>

    <p>${myBean.text}</p>
</body>
</html>

 

  1. Wydrukowany zostanie wyraz DEFAULT.
  2. Kod nie skompiluje się.
  3. Wydrukowany zostanie wyraz SERVLET.
  4. W trakcie działania rzucony zostanie wyjątek.
  5. Wyświetlony będzie pusty String.

 

Pokaż odpowiedź »

Poprawna jest odpowiedź nr 4.

Powodem rzucenia wyjątku jest fakt, iż tag jsp:useBean będzie próbował stworzyć nowy obiekt typu BeanClass. W tym celu wymaga on jednak bezargumentowego konstruktora, którego ta klasa nie posiada. Mylący w tym pytaniu jest także fakt dodania do obiektu żądania nowego atrybutu w kodzie servletu. Mogłoby się wydawać, że jsp:useBean wykorzysta go, i nie będzie próbował tworzyć nowej instancji. Tak się jednak nie dzieje, ponieważ domyślnym scope’em tego taga jest page scope. Nasz argument znajduje się natomiast w request scope. Do poprawy przykładu wystarczyłoby więc dodanie do naszego jsp:useBean atrybutu scope=”request”, bądź też uzupełnienie klasy BeanClass o bezargumentowy konstruktor.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>