Java Server Pages Programação em Rede 2006

Propaganda
Programação em Rede
2006-07
IGE, ETI e EI
Java Server Pages
O código HTML pode indicar o método de arranque do servlet
gerado por um JSP : doGet ou doPost.
Exemplo em que o método get é invocado no arranque do
servlet:
<form action="show_email_entry.jsp" method="get">
<table cellspacing="5" border="0">
<tr>
<td align="right">Name:</td>
<td><input type="text" name="firstName"></td>
</tr>
<tr>
<td align="right">Email address:</td>
<td><input type="text" name="emailAddress"></td>
</tr>
<tr>
<td></td>
<td><br><input type="submit" value="Submit"></td>
Programação em Rede
2006-07
IGE, ETI e EI
Codificação de scriplets: utilizadas para embutir instruções JAVA que
terminam com “ ; ” .
Codificação de expressões: utilizadas para embutir expressões JAVA
que retornam uma String.
Exemplo de dois scriplets e de uma expressão que mostra
repetidamente uma linha HTML :
<%
int numOfTimes = 1;
while (numOfTimes <= 5){
%>
<h1> Esta linha é mostrada <%= numOfTimes %> vezes numa JSP.
</h1>
<%
numOfTimes++;
}
%>
Programação em Rede
2006-07
IGE, ETI e EI
Método getParameter : quando aplicado a um campo de texto retorna
a String introduzida pelo utilizador; quando aplicado a radio buttons ou
combo box retorna o item seleccionado. Se não existe selecção retorna
null.
Exemplo de scriplet que determina se uma checkbox foi seleccionada:
<%
// retorna o valor seleccionado; se não houver nenhum
// seleccionado retorna “nul”
String rockCheckBox = request.getParameter("Rock");
if (rockCheckBox != null){
%>
Estava um valor seleccionado na CheckBox !
<%
}
%>
Programação em Rede
2006-07
IGE, ETI e EI
Normalmente uma JSP é gravada na mesma directoria em que está a
página HTML que a invoca, (que deve ser uma directoria disponível
para o servidor web. (exemplo : directoria webapps nos projectos web
formatados pelo NetBeans).
Classes JAVA “normais” que sejam invocadas por um JSP devem ser
compiladas para a directoria WEB-INF\classes do módulo web.
Exemplo de uma tag HTML que invoca uma JSP:
<form action=“o_meu_teste.jsp" method="get">
Exemplo de dois URLs que invocam directamente ums JSP:
http://localhost:8080/jmal/email4/o_meu_teste.jsp
http://www.jmal.com/o_meu_teste.jsp
Inclusão de parâmetros na invocação de uma JSP:
o_meu_teste.jsp?primNome=John
o_meu_teste.jsp?primNome=John&ultNome=Smith
Utilização de GET ou POST
GET é o método HTTP por defeito. GET é mais rápido e guarda
os parâmetros no fim do URL.
POST é utilizado para dados confidenciais (passwords, número
de cartões de crédito, ...) pois não mostra os argumentos no fim
do URL.
Programação em Rede
2006-07
IGE, ETI e EI
Execução concorrente de JSPs
Quando uma JSP é invocada, uma instância dessa página JSP é criada e
carregada para memória da máquina. Para isso, uma THREAD executa
o código JAVA presente na JSP.
As variáveis declaradas nos scriplets são locais, i.e., são instanciadas em
cada thread.
As variáveis declaradas através de declarações JSP são instanciadas na
1ª thread e são comuns a todas as threads executadas a partir daí.
Uma JSP deve ter código “sensível” sincronizado – métodos ou blocos
de código que não devem ser executados por diferentes threads “em
simultâneo”. A sincronização permite o acesso concorrente ao código
sensível.
Exemplo:
Código que declara uma variável partilhada:
<%@ page import="business.*, data.*, java.util.Date, java.io.*" %>
Código que declara uma variável local :
<%! int accessCount = 0; %>
Programação em Rede
2006-07
IGE, ETI e EI
Código que declara um método sincronizado:
<%! public synchronized void addRecord(User user, String filename)
throws IOException{
PrintWriter out = new PrintWriter( new FileWriter(filename, true) );
out.println( user.get enderecoEmail()+ "|“
+ user.get primNome() + "|"
+ user.get ultNome() );
out.close();
}
%>
Utilização do método e exemplo de bloco de código sincronizado:
<%
String firstName = request.getParameter(“primNome");
String lastName = request.getParameter(“ultNome");
String emailAddress = request.getParameter(“enderecoEmail");
User user = new User(primNome, ultNome, enderecoEmail);
addRecord(user,
"../webapps/jmal/WEB-INF/etc/EmailUtilizadores.txt");
int localCount = 0;
synchronized (this) {
accessCount++;
localCount = accessCount;
}
%>
…
<p>
<i>This page has been accessed <%= localCount %>times.
</i></p>
Programação em Rede
2006-07
IGE, ETI e EI
Exercício :
Programe um contador de acessos numa página JSP.
Download