Você está aqui: Cards de Python |
||
|
||
|
|
||
Java Servlets ::: Dicas & Truques ::: URLs, Documentos e Páginas |
Como compartilhar dados entre um Java Servlet e uma página JSP usando a requisição HttpServletRequestQuantidade de visualizações: 8638 vezes |
|
Quando usamos o método forward() da interface RequestDispatcher para direcionar para um outro Java Servlet ou página JSP, tanto o objeto de requisição ServletRequest quanto o objeto de resposta ServletResponse são enviados também. Assim, podemos tirar proveito desta funcionalidade para compartilhar dados entre um servlet e uma página JSP usando a requisição. Vamos ver como isso é possível. Comece analisando o seguinte servlet:
package estudos;
import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
public class MeuServlet extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException{
// cria uma instância da classe Pessoa
Pessoa p = new Pessoa();
p.setNome("Osmar J. Silva");
// vamos colocar o objeto p na requisição
request.setAttribute("pessoaBean", p);
// agora direcionamos para a página exibir.jsp
RequestDispatcher dispatcher =
request.getRequestDispatcher("/exibir.jsp");
dispatcher.forward(request, response);
}
}
Note que aqui eu já estou usando o pacote jakarta.servlet em vez de javax.servlet. Confirme se você está usando o Java EE ou Jakarta EE. Veja que no método doGet() deste Servlet nós temos a criação de uma instância da classe Pessoa (Pessoa.java). Esta classe tem a seguinte estrutura:
package estudos;
public class Pessoa{
private String nome;
public String getNome(){
return this.nome;
}
public void setNome(String nome){
this.nome = nome;
}
}
Depois de criada a instância da classe nós a colocamos na requisição atual usando:
// vamos colocar o objeto p na requisição
request.setAttribute("pessoaBean", p);
O passo seguinte é direcionar a requisição atual para a página exibir.jsp (a View do MVC). Veja o código para esta página:
<jsp:useBean id="pessoaBean" scope="request"
type="estudos.Pessoa" />
<html>
<head>
<title>Estudos Servlet</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-2">
</head>
<body>
<h4>Nome da pessoa: <jsp:getProperty name="pessoaBean"
property="nome" /></h4>
</body>
</html>
Aqui nós estamos usando <jsp:getProperty> para acessar um dos atributos do bean pessoaBean. Poderíamos usar JSTL e EL. Veja:
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<jsp:useBean id="pessoaBean" scope="request"
type="estudos.Pessoa" />
<html>
<head>
<title>Estudos Servlet</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-2">
</head>
<body>
<h4>Nome da pessoa: <c:out value="${pessoaBean.nome}"/></h4>
</body>
</html>
Fiz o mapeamento deste Java Servlet para a URL http://localhost:8080/estudos/meuservlet. Ao chamá-la nós teremos o seguinte resultado: Nome da pessoa: Osmar J. Silva |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Java para iniciantes - Como usar o tipo de dados byte da linguagem JavaQuantidade de visualizações: 12970 vezes |
O tipo de dados byte pode ser usado quando queremos armazenar valores inteiros na faixa ?128 à 127. Veja um exemplo:
public class Estudos{
static byte valor = 102;
public static void main(String args[]){
System.out.println("O valor da variável é: "
+ valor);
System.exit(0);
}
}
Porém, é preciso estar atento a um detalhe muito importante (testado na versão 6 do SDK). Veja o trecho de código seguinte:
public class Estudos{
public static void main(String args[]){
byte a = 5;
byte b = 6;
byte soma = a + b;
System.out.println("O resultado é: " + soma);
System.exit(0);
}
}
À primeira vista este código está correto, visto que a soma das variáveis a e b não ultrapassam a faixa do tipo byte. Porém, ao tentarmos compilar, temos a seguinte mensagem de erro:
Estudos.java:5: possible loss of precision
found : int
required: byte
byte soma = a + b;
^
1 error
Isso acontece porque o tipo de dados resultante da aplicação do operador de adição (e demais operadores binários) a dois números, é no mínimo int. Podemos, é claro, fazer uma coerção de dados (cast). Veja: byte a = 5; byte b = 6; byte soma = (byte)(a + b); O tipo de dados byte pode ser convertido (sem a necessidade de cast) para os seguintes tipos: byte -> short -> int -> long -> float -> double Um tipo byte não pode ser convertido implicitamente para o tipo char. Isso acontece porque o tipo char não possui sinal. |
Dart ::: Dicas de Estudo e Anotações ::: Estruturas de Controle |
Como usar if...else em Dart - Como usar a estrutura condicional if... else if... else da linguagem DartQuantidade de visualizações: 3606 vezes |
|
Na maioria das linguagens de programação, a estrutura condicional if... else if... else é usada para testar condições e, baseado no resultado dos testes, desviar o fluxo de execução do algorítmo. Veja um exemplo no qual pedimos para o usuário digitar um valor inteiro e efetuamos um teste para saber se o valor é maior que 10:
// Vamos importar a biblioteca dart:io
import 'dart:io';
void main() {
// vamos pedir para o usuário digitar um valor inteiro
stdout.write("Digite um número inteiro: ");
// vamos converter a entrada do usuário para um inteiro e
// e guardar na variavel valor
int valor = int.parse(stdin.readLineSync());
// vamos verificar se o valor lido é maior que 10
if (valor > 10) {
print("O valor é maior que 10.");
} else {
// não é maior que 10
print("O valor não é maior que 10.");
}
}
Este código produz as seguintes saídas: c:\estudos_dart>dart condicional_if_else.dart Digite um número inteiro: 4 O valor não é maior que 10. c:\estudos_dart>dart condicional_if_else.dart Digite um número inteiro: 10 O valor não é maior que 10. c:\estudos_dart>dart condicional_if_else.dart Digite um número inteiro: 15 O valor é maior que 10. Note que testamos apenas um condição e já desviamos para o else caso ela não seja satisfeita. A linguagem Dart nos permite usar if...else aninhados. Veja:
// Vamos importar a biblioteca dart:io
import 'dart:io';
void main() {
// vamos pedir para o usuário digitar um valor inteiro
stdout.write("Digite um número inteiro: ");
// vamos converter a entrada do usuário para um inteiro e
// e guardar na variavel valor
int valor = int.parse(stdin.readLineSync());
// vamos verificar se o valor lido é maior que 10
if (valor > 10) {
print("O valor é maior que 10.");
} else if (valor == 10) {
// é igual a 10
print("O valor é igual a 10.");
} else {
// é menor que 10
print("O valor é menor que 10.");
}
}
Execute este código, digite um valor inteiro e observe seu comportamento. |
Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar a propriedade Active da classe TClientDataSet do DelphiQuantidade de visualizações: 12626 vezes |
|
A propriedade Active de um controle TClientDataSet pode ser definida em tempo de design (pelo Object Inspector) ou em tempo de execução. Se o valor for True os dados armazenados no TClientDataSet podem ser lidos e manipulados. Se o valor for False, o client dataset está fechado (closed) e não podemos acessar nem manipular os dados contidos nele. Veja no trecho de código abaixo como definir o valor da propriedade Active em tempo de execução:
procedure TForm3.Button3Click(Sender: TObject);
begin
// vamos ativar o client dataset
ClientDataSet1.Active := True;
// vamos testar se o client dataset foi mesmo ativado
if ClientDataSet1.Active then
ShowMessage('O ClientDataSet está ativo')
else
ShowMessage('O ClientDataSet NÃO está ativo')
end;
Ao clicar no botão nós "ativamos" o client dataset e em seguida testamos o valor da propriedade Active para informar se o controle foi realmente ativado. É preciso ter muito cuidado. Tentar manipular os dados de um client dataset fechado pode resultar em uma exceção do tipo EDatabaseError com mensagens parecidas com: Project Projeto.exe raised exception class EDatabaseError with message 'ClientDataSet1: Cannot perform this operation on a closed dataset'. Ao definirmos o valor True para a propriedade Active as seguintes ações ocorrem: 1) O client dataset é preenchido com dados. Dependendo das propriedades do controle, estes dados podem vir de três formas diferentes: a) Do arquivo especificado na propriedade FileName; b) Do provider especificado na propriedade ProviderName ou por meio do método SetProvider. (algumas classes derivadas de TCustomClientDataSet possuem um componente interno que faz o papel do provider); c) Os dados que estavam ativos quando o client dataset foi desativado (somente se a aplicação foi executada durante um certo período depois que o dataset foi desativado). 2) O evento BeforeOpen é disparado. 3) O valor dsBrowse é atribuído à propriedade State do dataset. 4) Abre e posiciona um cursor no primeiro registro do conjunto de dados. 5) Dispara o evento AfterOpen. Se o client dataset nunca foi ativado, atribuir o valor True para a propriedade Active faz com que a estrutura (metadata) do client dataset seja definida. Esta estrutura é obtida juntamente com o pacote de dados a partir do provider ou armazenado em disco. Se não houver pacote de dados, tal estrutura é construída usando o valor atual da propriedade FieldDefs ou a partir dos componentes de campos persistentes listados na propriedade Fields. Se um erro ocorrer durante a abertura do dataset, seu estado (State) é definido como dsInactive e o cursor de navegação é fechado. Ao definirmos o valor False para a propriedade Active as seguintes ações ocorrem: 1) O evento BeforeClose é disparado. 2) O valor para a propriedade State é definido como dsInactive. 3) O cursor de navegação é fechado, salvando os dados atuais em disco se a propriedade FileName estiver definida e salvando o pacote de dados atual em cache de forma que o mesmo possa ser restaurado mais tarde quando o dataset for reaberto. 4) O evento AfterClose é disparado. Importante: Uma chamada ao método Open do TClientDataSet define a propriedade Active como True, enquanto uma chamada ao método Close a define como False. Esta dica foi escrita e testada no Delphi 2009. |
Java ::: Dicas & Truques ::: Recursão (Recursividade) |
Java Avançado - Como listar o conteúdo de um diretório recursivamenteQuantidade de visualizações: 2 vezes |
|
Nesta dica mostrarei como podemos usar recursividade (recursão) para listar todo o conteúdo de um diretório. Este é um exercício para melhorar o seu entendimento de funções recursivas em Java. Veja o código completo para o exemplo:
package arquivodecodigos;
import java.io.*;
import java.util.*;
public class Estudos {
static int indentLevel = -1;
public static void main(String[] args) {
listPath(new File("c:\\estudos_c"));
}
static void listPath(File path) {
File files[];
indentLevel++;
files = path.listFiles();
Arrays.sort(files);
for (int i = 0, n = files.length; i < n; i++) {
for (int indent = 0; indent < indentLevel; indent++) {
System.out.print(" ");
}
System.out.println(files[i].getName());
if(files[i].isDirectory()) {
listPath(files[i]);
}
}
indentLevel--;
}
}
Ao executar este código nós teremos o seguinte resultado:
DICA.txt
estudos
.vs
estudos
v16
.suo
Browse.VC.db
ipch
AutoPCH
1dcb307edee5acf8
ORIGEM.ipch
Debug
estudos.exe
estudos.exe.recipe
estudos.ilk
estudos.log
estudos.pdb
estudos.tlog
CL.command.1.tlog
CL.read.1.tlog
CL.write.1.tlog
estudos.lastbuildstate
link.command.1.tlog
link.read.1.tlog
link.write.1.tlog
estudos.vcxproj.FileListAbsolute.txt
Origem.obj
vc142.idb
vc142.pdb
estudos.sln
estudos.vcxproj
estudos.vcxproj.filters
estudos.vcxproj.user
Origem.cpp
Estudos_C.dev
Estudos_C.exe
Estudos_C.layout
main.c
main.o
Makefile.win
|
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
|
Como retornar a quantidade de palavras em uma string Java usando um objeto da classe StringTokenizer |
Dicas e truques de outras linguagens |
|
JavaScript - Como calcular o coeficiente angular de uma reta em JavaScript dados dois pontos no plano cartesiano |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






