1ª Avaliação
1. Em arquivos JSP, podemos criar uma URL relativa ao contexto com a tag <c:url>
.
Por exemplo,
<c:url value="/listagem.jsp"/>
gera a url /BlogApp/listagem.jsp sendo /BlogApp o caminho do contexto.
Usando essa tag, crie três páginas JSP, page1.jsp
, page2.jsp
e page3.jsp
onde no topo das
páginas tenha um menu simples com links para todas as páginas, inclusive ela mesma.
Dica: você pode utilizar a tag <jsp:include>
para reutilizar um arquivo com o menu.
A solução mais direta possível seria criar um arquivo menu.jsp
para ser incluído nos arquivos
page1.jsp
, page2.jsp
e page3.jsp
.
Essa solução pode ser vista aqui.
2. Para obtermos uma URL relativa ao contexto da aplicação, basta usar como prefixo a string
resultante da chamada request.getContextPath()
, que é um método que obtém o caminho da aplicação
configurado no container.
Por exemplo, o servlet abaixo tem o objetivo único de redirecionar o cliente para /perfil.jsp:
public class ExemploServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String url = getUrl(request, "/perfil.jsp");
response.sendRedirect(url);
}
private static String getUrl(HttpServletRequest request, String relativePath) {
return request.getContextPath() + relativePath;
}
}
Veja que a URL resultante estará no mesmo servidor, isto é, se esse servlet estiver acessível em http://127.0.0.1/WebApp/exemplo sendo /WebApp o caminho do contexto, então:
url = "http://127.0.0.1/WebApp/perfil.jsp"
Sendo assim, como tarefa da questão, crie um servlet mapeado para /livro que identifique o idioma solicitado e redirecione
- para /livro/pt, se idioma for português
- para /livro/fr, se idioma for francês
- para /livro/en, para qualquer outro idioma
Lembre-se que todos esses são caminhos relativos ao contexto da aplicação.
Na Revisão 1.1, tem uma questão muito parecida com essa.
A solução que eu fiz para esta questão é baseada nela e pode ser vista aqui.
Note que só era necessário como resposta um servlet!
3. Para esta questão, considere o formulário de múltiplas opções a seguir:
<form method="post">
Linguagens preferidas: <br>
<input type="checkbox" name="linguagem" value="java"> Java <br>
<input type="checkbox" name="linguagem" value="python"> Python <br>
<input type="checkbox" name="linguagem" value="ruby"> Ruby <br>
<input type="checkbox" name="linguagem" value="php"> PHP <br>
<input type="checkbox" name="linguagem" value="c"> C <br>
<input type="checkbox" name="linguagem" value="haskell"> Haskell <br>
<input type="checkbox" name="linguagem" value="julia"> Julia <br>
<br>
<input type="submit">
</form>
Utilizando esse formulário, crie um servlet para gravar em um ou mais cookies as opções marcadas anteriormente pelo usuário, de forma que quando o usuário acessar o formulário novamente, essas opções apareçam já marcadas.
Note que o formulário envia por método POST, assim a gravação dos cookies devem ser implementados no
método doPost()
enquanto o formulário deve ser exibido para o usuário no método doGet()
.
Para que uma opção apareça pré-marcada, adicione o atributo checked
à tag <input>
:
<input type="checkbox" name="linguagem" value="java" checked>
Semelhante à questão anterior, a solução foi baseada em outra questão da Revisão 1.1, porém lá havia uma lista de marcação única enquanto aqui é de marcação múltipla.
Dessa forma, existem basicamente duas estratégias de solução:
-
Utilizar um cookie para cada item da lista.
Nesse caso, cada um dos cookies teria o valor
"marcado"
quando o usuário enviasse com a opção checada e no JSP bastaria fazer algo como${cookie['java'].value == 'marcado' ? 'checked' : ''}
A desvantagem dessa estratégia é que precisamos identificar as linguagens que não foram marcadas e remover esses cookies do usuário.
Veja aqui a solução usando a estratégia 1.
-
Utilizar um único cookie para identificar os itens marcados.
A ideia é receber o array de strings com as linguagens e criar um string único para armazenar no cookie. Por exemplo, se o usuário marcou as linguagens Java, Python e PHP, então criaremos a string
"java:python:ruby"
, nesse exemplo usando:
como separador.Para que o JSP consiga identificar se a opção deva ser marcada, convertemos a string obtida nos cookies para um objeto do tipo
List
que permite consulta com o métodocontains()
Essa estratégia é um pouco mais difícil de estruturar, mas fica mais fácil de manter. Na estratégia anterior, se adicionarmos uma nova linguagem à lista? Teríamos que modificar tanto o arquivo Java como o JSP.
Nessa estratégia, só é preciso mudar apenas o JSP.
Veja no link a solução com a estratégia 2.
Citação
Às vezes você acorda. Às vezes a queda lhe mata.
E às vezes, quando você cai, você voa.