Atividade Pontuada 2
1. Observe o trecho de um arquivo web.xml
referente ao mapeamento de servlets para URLs.
<web-app>
<servlet>
<servlet-name>One</servlet-name>
<servlet-class>foo.DeployTestOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>One</servlet-name>
<url-pattern>*.do </url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Two</servlet-name>
<servlet-class>foo.DeployTestTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Two</servlet-name>
<url-pattern>/fooStuff/bar</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Three</servlet-name>
<servlet-class>foo.DeployTestThree</servlet-class></servlet>
<servlet-mapping>
<servlet-name>Three</servlet-name>
<url-pattern>/fooStuff/*</url-pattern>
</servlet-mapping>
</web-app>
Agora indique no quadro abaixo para qual servlet seria mapeada cada uma das URLS.
Suponha que o container está em localhost:8080 e o contexto da aplicação seja /MapTest.
One | Two | Three | 404 Not Found | |
http://localhost:8080/MapTest/blue.do | ⬤ | ◯ | ◯ | ◯ |
http://localhost:8080/MapTest/fooStuff/bar | ◯ | ⬤ | ◯ | ◯ |
http://localhost:8080/MapTest/fooStuff/bar/blue.do | ◯ | ◯ | ⬤ | ◯ |
http://localhost:8080/MapTest/fooStuff/blue.do | ◯ | ◯ | ⬤ | ◯ |
http://localhost:8080/MapTest/fred/blue.do | ⬤ | ◯ | ◯ | ◯ |
http://localhost:8080/MapTest/fooStuff | ◯ | ◯ | ⬤ | ◯ |
http://localhost:8080/MapTest/fooStuff/bar/foo.fo | ◯ | ◯ | ⬤ | ◯ |
http://localhost:8080/MapTest/fred/blue.fo | ◯ | ◯ | ◯ | ⬤ |
2. A chamada abaixo feita dentro do método doGet()
de um servlet define uma resposta em que o cliente é instruído
a redirecionar para outra URL.
response.sendRedirect("http://www.google.com/");
Qual dos trechos de código a seguir é equivalente à essa chamada.
a. ◯ |
|
b. ⬤ |
|
c. ◯ |
|
d. ◯ |
|
e. ◯ |
|
3. Observe a classe de servlet a seguir.
public class AtividadeServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String paramA = request.getParameter("a");
String paramB = request.getParameter("b");
String paramC = request.getParameter("c");
double a = (paramA == null) ? 0 : Double.parseDouble(paramA);
double b = (paramB == null) ? 0 : Double.parseDouble(paramB);
double c = (paramC == null) ? 0 : Double.parseDouble(paramC);
double delta = Math.pow(b, 2) - 4*a*c;
response.getWriter().println("Delta: " + delta);
}
}
Agora escreva uma query string que, enviada ao servlet, o fará retornar a resposta Delta: 12.0
.
O valor da variável delta vem da seguinte fórmula
\[delta = b^2 - 4 \times a \times c\]Assim, se \(b=4\), \(a=1\) e \(c=1\),
\[delta = 4^2 - 4 \times 1 \times 1 = 12\]Finalmente, se a seguinte query string for passada, teremos a saída desejada:
b=4&a=1&c=1
Lembrando que existem diversas outras formas de chegar ao mesmo resultado.
4. No servlet abaixo, é identificado o idioma solicitado pelo cliente e criada uma mensagem especializada para três idiomas suportados: inglês, português e espanhol.
No entanto, o cliente, embora receba uma resposta de sucesso (200 OK), nunca recebe a mensagem no corpo da resposta, não importa o idioma solicitado. Identifique a razão desse comportamento e forneça uma solução.
public class AtividadeServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String message = "Hi, little friend, how are you?";
String acceptLanguage = request.getHeader("Accept-Language");
switch (acceptLanguage) {
case "pt":
case "pt-BR":
message = "Oi, amiguinho, como vai?";
break;
case "es":
message = "Hola, amiguito, ¿cómo estás?";
break;
}
}
}
O problema ocorre porque o servlet em nenhum momento envia o conteúdo através do objeto response.getWriter()
.
Para solucionar o problema, basta adicionar ao final do método doGet()
o código:
response.getWriter().println(message);