JavaServer Pages (JSP) é uma tecnologia para o desenvolvimento de páginas da Web que suportam conteúdo dinâmico que ajuda os desenvolvedores a inserir o código java em páginas HTML usando tags JSP especiais, a maioria das quais começa com <% e termina com%>.

JSP oferece várias vantagens, conforme listado abaixo -

  • O desempenho é significativamente melhor porque o JSP permite a incorporação de elementos dinâmicos nas próprias páginas HTML.

  • O JSP é sempre compilado antes de ser processado pelo servidor, ao contrário do CGI / Perl que exige que o servidor carregue um interpretador e o script de destino cada vez que a página é solicitada.

  • JavaServer Pages são construídos sobre a API de Servlets Java, então como Servlets, JSP também tem acesso a todas as APIs Java Enterprise poderosas, incluindo JDBC, JNDI, EJB, JAXP etc.

  • As páginas JSP podem ser usadas em combinação com servlets que tratam da lógica de negócios, o modelo suportado pelos mecanismos de modelo de servlet Java.

As vantagens do JSP são duplas.

Primeiro, a parte dinâmica é escrita em Java, não em Visual Basic ou em outra linguagem específica da MS, por isso é mais poderosa e fácil de usar.

Em segundo lugar, é portátil para outros sistemas operacionais e servidores Web não Microsoft.

É mais conveniente escrever (e modificar!) HTML regular do que ter muitas instruções println que geram o HTML. Outras vantagens são -

  • Incorporação de código Java em páginas HTML.

  • Independência de plataforma.

  • Criação de aplicativos da Web baseados em banco de dados.

  • Recursos de programação do lado do servidor.

O SSI se destina apenas a inclusões simples, não a programas "reais" que usam dados de formulário, fazem conexões de banco de dados e assim por diante.

JavaScript pode gerar HTML dinamicamente no cliente, mas dificilmente pode interagir com o servidor web para realizar tarefas complexas, como acesso a banco de dados e processamento de imagens, etc.

O HTML normal, é claro, não pode conter informações dinâmicas.

Um JSP Lifecycle consiste nas seguintes etapas -

  • Compilation- Quando um navegador pede um JSP, o mecanismo JSP primeiro verifica se é necessário compilar a página. Se a página nunca foi compilada ou se o JSP foi modificado desde a última compilação, o mecanismo JSP compila a página.

    O processo de compilação envolve três etapas -

    • Analisando o JSP.

    • Transformando o JSP em um servlet.

    • Compilando o servlet.

  • Initialization - Quando um contêiner carrega um JSP, ele invoca o método jspInit () antes de atender a qualquer solicitação

  • Execution- Sempre que um navegador solicita um JSP e a página é carregada e inicializada, o mecanismo JSP invoca o método _jspService () no JSP. O método _jspService () de um JSP é invocado uma vez por pedido e é responsável por gerar a resposta para essa solicitação e este método também é responsável por gerar respostas para todos os sete métodos HTTP, ou seja. GET, POST, DELETE etc.

  • Cleanup - A fase de destruição do ciclo de vida JSP representa quando um JSP está sendo removido do uso por um contêiner. O método jspDestroy () é o equivalente JSP do método destroy para servlets.

Um scriptlet pode conter qualquer número de instruções da linguagem JAVA, declarações de variáveis ​​ou métodos ou expressões que sejam válidas na linguagem de script de página.

A seguir está a sintaxe do Scriptlet -

<% code fragment %>

Uma declaração declara uma ou mais variáveis ​​ou métodos que você pode usar no código Java posteriormente no arquivo JSP. Você deve declarar a variável ou método antes de usá-lo no arquivo JSP.

<%! declaration; [ declaration; ]+ ... %>

Um elemento de expressão JSP contém uma expressão de linguagem de script que é avaliada, convertida em uma String e inserida onde a expressão aparece no arquivo JSP.

O elemento de expressão pode conter qualquer expressão que seja válida de acordo com a Especificação da linguagem Java, mas você não pode usar um ponto-e-vírgula para encerrar uma expressão.

Sua sintaxe é -

<%= expression %>

O comentário JSP marca o texto ou as instruções que o contêiner JSP deve ignorar. Um comentário JSP é útil quando você deseja ocultar ou "comentar" parte de sua página JSP.

A seguir está a sintaxe dos comentários JSP -

<%-- This is JSP comment --%>

Uma diretiva JSP afeta a estrutura geral da classe de servlet. Geralmente tem o seguinte formato -

<%@ directive attribute = "value" %>

As tags de diretiva de tipos são as seguintes -

  • <%@ page ... %> - Define atributos dependentes de página, como linguagem de script, página de erro e requisitos de buffer.

  • <%@ include ... %> - Inclui um arquivo durante a fase de tradução.

  • <%@ taglib ... %> - Declara uma biblioteca de tags, contendo ações personalizadas, usadas na página.

As ações JSP usam construções na sintaxe XML para controlar o comportamento do mecanismo de servlet. Você pode inserir um arquivo dinamicamente, reutilizar componentes JavaBeans, encaminhar o usuário para outra página ou gerar HTML para o plug-in Java.

Sua sintaxe é a seguinte -

<jsp:action_name attribute = "value" />

jsp: include, jsp: useBean, jsp: setProperty, jsp: getProperty, jsp: forward, jsp: plugin, jsp: elemento, jsp: attribute, jsp: body, jsp: text

Literais são os valores, como um número ou uma string de texto, que são escritos literalmente como parte de um código de programa. A linguagem de expressão JSP define os seguintes literais -

  • Boolean - verdadeiro e falso

  • Integer - como em Java

  • Floating point - como em Java

  • String- com aspas simples e duplas; "tem escape como \", 'tem escape como \' e \ tem escape como \\.

  • Null - nulo

o pagediretiva é usada para fornecer instruções ao contêiner que pertencem à página JSP atual. Você pode codificar diretivas de página em qualquer lugar em sua página JSP.

A diretiva da página contém os 13 atributos a seguir.

  1. language

  2. extends

  3. import

  4. session

  5. isThreadSafe

  6. info

  7. errorPage

  8. isErrorpage

  9. contentType

  10. isELIgnored

  11. buffer

  12. autoFlush

  13. isScriptingEnabled

O atributo buffer especifica características de buffer para o objeto de resposta de saída do servidor.

Quando o buffer é definido como “nenhum” , a saída do servlet é imediatamente direcionada para o objeto de saída de resposta.

o autoFlush atributo especifica se a saída do buffer deve ser liberada automaticamente quando o buffer é preenchido ou se uma exceção deve ser levantada para indicar o estouro do buffer.

Um valor de true (padrão) indica liberação de buffer automática e um valor de false lança uma exceção.

o contentTypeatributo define a codificação de caracteres para a página JSP e para a página de resposta gerada. O tipo de conteúdo padrão é text / html, que é o tipo de conteúdo padrão para páginas HTML.

o errorPageatributo informa ao mecanismo JSP qual página exibir se houver um erro enquanto a página atual é executada. O valor do atributo errorPage é um URL relativo.

O atributo isErrorPage indica que o JSP atual pode ser usado como a página de erro para outro JSP.

O valor de isErrorPage é verdadeiro ou falso. O valor padrão do atributo isErrorPage é falso.

o extends attribute especifica uma superclasse que o servlet gerado deve estender.

o importattribute tem a mesma função e se comporta como a instrução de importação Java. O valor da opção de importação é o nome do pacote que você deseja importar.

o info atributo permite fornecer uma descrição do JSP.

o isThreadSafeopção marca uma página como thread-safe. Por padrão, todos os JSPs são considerados thread-safe. Se você definir a opção isThreadSafe como false, o mecanismo JSP garante que apenas um encadeamento por vez esteja executando seu JSP.

o language atributo indica a linguagem de programação usada no script da página JSP.

o sessionatributo indica se a página JSP usa ou não sessões HTTP. Um valor true significa que a página JSP tem acesso a um objeto de sessão integrado e um valor false significa que a página JSP não pode acessar o objeto de sessão integrado.

o isELIgnored opção oferece a capacidade de desativar a avaliação de expressões Expression Language (EL).

O valor padrão do atributo é true, significando que as expressões $ {...} são avaliadas conforme ditado pela especificação JSP. Se o atributo for definido como falso, as expressões não serão avaliadas, mas tratadas como texto estático.

o isScriptingEnabled atributo determina se os elementos de script têm permissão para uso.

O valor padrão (true) ativa scriptlets, expressões e declarações. Se o valor do atributo for definido como falso, um erro de tempo de tradução será gerado se o JSP usar qualquer scriptlets, expressões (não EL) ou declarações.

A diretiva include é usada para incluir um arquivo durante a fase de tradução. Esta diretiva diz ao contêiner para mesclar o conteúdo de outros arquivos externos com o JSP atual durante a fase de tradução. Você pode incluir diretivas em qualquer lugar de sua página JSP.

A forma de uso geral desta diretiva é a seguinte -

<%@ include file = "relative url" >

A diretiva taglib segue a seguinte sintaxe -

<%@ taglib uri = "uri" prefix = "prefixOfTag">

o valor do atributo uri é resolvido para um local que o contêiner entende

O atributo prefix informa a um contêiner quais bits de marcação são ações personalizadas.

A diretiva taglib segue a seguinte sintaxe -

<%@ taglib uri = "uri" prefix = "prefixOfTag" >
  • Id attribute- O atributo id identifica exclusivamente o elemento Action e permite que a ação seja referenciada dentro da página JSP. Se a ação criar uma instância de um objeto, o valor de id pode ser usado para referenciá-lo por meio do objeto implícito PageContext

  • Scope attribute- Este atributo identifica o ciclo de vida do elemento Action. O atributo id e o atributo scope estão diretamente relacionados, pois o atributo scope determina a vida útil do objeto associado ao id. O atributo de escopo tem quatro valores possíveis: (a) página, (b) solicitação, (c) sessão e (d) aplicativo.

Esta ação permite inserir arquivos na página que está sendo gerada. A sintaxe é semelhante a esta -

<jsp:include page = "relative URL" flush = "true" />

Onde page é o URL relativo da página a ser incluída.

Flush é o atributo booleano que determina se o recurso incluído tem seu buffer liberado antes de ser incluído.

Ao contrário do include directive, que insere o arquivo no momento em que a página JSP é traduzida em um servlet, include action insere o arquivo no momento em que a página é solicitada.

o useBeana ação é bastante versátil. Ele primeiro procura por um objeto existente utilizando as variáveis ​​id e escopo. Se um objeto não for encontrado, ele tenta criar o objeto especificado.

A maneira mais simples de carregar um bean é a seguinte -

<jsp:useBean id = "name" class = "package.class" />

o setPropertyação define as propriedades de um Bean. O Bean deve ter sido definido previamente antes desta ação.

o getProperty action é usado para recuperar o valor de uma determinada propriedade e convertê-lo em uma string e, finalmente, inseri-lo na saída.

o forward action termina a ação da página atual e encaminha a solicitação para outro recurso, como uma página estática, outra página JSP ou um Servlet Java.

A sintaxe simples desta ação é a seguinte -

<jsp:forward page = "Relative URL" />

o pluginação é usada para inserir componentes Java em uma página JSP. Ele determina o tipo de navegador e insere as marcas <object> ou <embed> conforme necessário.

Se o plug-in necessário não estiver presente, ele baixa o plug-in e, em seguida, executa o componente Java. O componente Java pode ser um Applet ou um JavaBean.

O atributo scope identifica o ciclo de vida do elemento Action. Possui quatro valores possíveis: (a) página, (b) solicitação, (c) sessão e (d) aplicação.

Objetos JSP Implícitos são os objetos Java que o JSP Container disponibiliza aos desenvolvedores em cada página e o desenvolvedor pode chamá-los diretamente sem serem declarados explicitamente. Os objetos implícitos JSP também são chamados de variáveis ​​predefinidas.

solicitação, resposta, saída, sessão, aplicativo, configuração, pageContext, página, exceção

O objeto de solicitação é uma instância de um objeto javax.servlet.http.HttpServletRequest. Cada vez que um cliente solicita uma página, o mecanismo JSP cria um novo objeto para representar essa solicitação.

O objeto de solicitação fornece métodos para obter informações de cabeçalho HTTP, incluindo dados de formulário, cookies, métodos HTTP etc.

Usando o método getHeaderNames () de HttpServletRequest para ler as informações do cabeçalho HTTP. Este método retorna uma Enumeration que contém as informações do cabeçalho associadas à solicitação HTTP atual.

O objeto de resposta é uma instância de um objeto javax.servlet.http.HttpServletRequest. Assim como o servidor cria o objeto de solicitação, ele também cria um objeto para representar a resposta ao cliente.

O objeto de resposta também define as interfaces que lidam com a criação de novos cabeçalhos HTTP. Por meio desse objeto, o programador JSP pode adicionar novos cookies ou carimbos de data, códigos de status HTTP etc.

o out objeto implícito é uma instância de um objeto javax.servlet.jsp.JspWriter e é usado para enviar conteúdo em uma resposta.

o JspWriterO objeto contém a maioria dos mesmos métodos da classe java.io.PrintWriter. No entanto, JspWriter possui alguns métodos adicionais projetados para lidar com o armazenamento em buffer. Ao contrário doPrintWriter objeto, JspWriter lança IOExceptions.

O objeto da sessão é uma instância de javax.servlet.http.HttpSession e é usado para rastrear a sessão do cliente entre as solicitações do cliente

O objeto do aplicativo é um wrapper direto em torno do objeto ServletContext para o Servlet gerado e, na realidade, uma instância de um objeto javax.servlet.ServletContext.

Este objeto é uma representação da página JSP em todo o seu ciclo de vida. Este objeto é criado quando a página JSP é inicializada e será removido quando a página JSP for removida pelo método jspDestroy ().

O objeto de configuração é uma instanciação de javax.servlet.ServletConfig e é um wrapper direto em torno do objeto ServletConfig para o servlet gerado.

Este objeto permite que o programador JSP acesse os parâmetros de inicialização do mecanismo Servlet ou JSP, como os caminhos ou locais de arquivo, etc.

O objeto pageContext é uma instância de um objeto javax.servlet.jsp.PageContext. O objeto pageContext é usado para representar a página JSP inteira.

Este objeto armazena referências aos objetos de solicitação e resposta para cada solicitação. O aplicativo, configuração, sessão e objetos de saída são derivados acessando os atributos deste objeto.

O objeto pageContext também contém informações sobre as diretivas emitidas para a página JSP, incluindo as informações de buffer, o errorPageURL e o escopo da página.

Este objeto é uma referência real à instância da página. Ele pode ser considerado um objeto que representa toda a página JSP.

O objeto de página é realmente um sinônimo direto para este objeto.

O objeto de exceção é um wrapper que contém a exceção lançada da página anterior. Normalmente é usado para gerar uma resposta apropriada à condição de erro.

O método GET envia as informações codificadas do usuário anexadas à solicitação de página. A página e as informações codificadas são separadas por? Personagem.

O método POST empacota as informações exatamente da mesma maneira que os métodos GET, mas em vez de enviá-las como uma string de texto após um? no URL, ele o envia como uma mensagem separada. Esta mensagem chega ao programa de back-end na forma de entrada padrão que você pode analisar e usar para o seu processamento.

JSP lida com a análise de dados de formulário automaticamente usando os seguintes métodos, dependendo da situação -

  • getParameter() - Você chama o método request.getParameter () para obter o valor de um parâmetro de formulário.

  • getParameterValues() - Chame este método se o parâmetro aparecer mais de uma vez e retornar vários valores, por exemplo, caixa de seleção.

  • getParameterNames() - Chame esse método se quiser uma lista completa de todos os parâmetros na solicitação atual.

  • getInputStream() - Chame este método para ler o fluxo de dados binários vindo do cliente.

Filtros JSP são classes Java que podem ser usadas na programação JSP para os seguintes propósitos -

  • Para interceptar solicitações de um cliente antes que eles acessem um recurso no back end.

  • Para manipular as respostas do servidor antes de serem enviadas de volta ao cliente.

Os filtros são definidos no arquivo descritor de implementação web.xml e, em seguida, mapeados para nomes de servlet ou JSP ou padrões de URL no descritor de implementação de seu aplicativo.

Quando o contêiner JSP inicia seu aplicativo da web, ele cria uma instância de cada filtro que você declarou no descritor de implementação. Os filtros são executados na ordem em que são declarados no descritor de implantação.

Cookies são arquivos de texto armazenados no computador cliente e são mantidos para diversos fins de rastreamento de informações.

Os cookies são geralmente definidos em um cabeçalho HTTP (embora o JavaScript também possa definir um cookie diretamente em um navegador). Se o navegador estiver configurado para armazenar cookies, ele manterá essas informações até a data de expiração. Se o usuário apontar o navegador para qualquer página que corresponda ao caminho e domínio do cookie, ele reenviará o cookie ao servidor.

Definir cookies com JSP envolve três etapas -

  • Creating a Cookie object - Você chama o construtor Cookie com um nome de cookie e um valor de cookie, sendo que ambos são strings.

  • Setting the maximum age - Use setMaxAge para especificar por quanto tempo (em segundos) o cookie deve ser válido.

  • Sending the Cookie into the HTTP response headers - Você usa response.addCookie para adicionar cookies no cabeçalho de resposta HTTP

Para ler cookies, você precisa criar uma matriz de objetos javax.servlet.http.Cookie chamando o método getCookies () de HttpServletRequest. Em seguida, percorra o array e use os métodos getName () e getValue () para acessar cada cookie e valor associado.

Excluir cookies é muito simples. Se você deseja excluir um cookie, basta seguir as três etapas seguintes -

  • Leia um cookie já existente e armazene-o no objeto Cookie.

  • Defina a idade do cookie como zero usando setMaxAge() método para excluir um cookie existente.

  • Adicione este cookie de volta ao cabeçalho da resposta.

O gerenciamento de sessão pode ser alcançado pelo uso de -

  • Cookies - Um servidor da web pode atribuir um ID de sessão exclusivo como um cookie para cada cliente da web e para solicitações subsequentes do cliente, eles podem ser reconhecidos usando o cookie recebido.

  • Hidden Form Fields - Um servidor da web pode enviar um campo de formulário HTML oculto junto com um ID de sessão exclusivo da seguinte maneira -

<input type = "hidden" name = "sessionid" value = "12345">

    Isso implica que, quando o formulário for enviado, o nome e o valor especificados serão incluídos no método GET ou POST.

  • URL Rewriting- Na reescrita de URL, algumas informações extras são adicionadas ao final de cada URL que identifica a sessão. Esta regravação de URL pode ser útil quando um cookie está desativado.

  • The session Object - JSP usa a interface HttpSession fornecida por servlet, que fornece uma maneira de identificar um usuário em mais de uma solicitação de página ou visita a um site da Web e armazenar informações sobre esse usuário.

Ao terminar com os dados de sessão de um usuário, você tem várias opções -

  • Remove a particular attribute- Você pode chamar o método public void removeAttribute (String name) para excluir o valor associado a uma chave específica.

  • Delete the whole session- Você pode chamar o método void invalidate () público para descartar uma sessão inteira.

  • Setting Session timeout- Você pode chamar o método public void setMaxInactiveInterval (int interval) para definir o tempo limite de uma sessão individualmente.

  • Log the user out - Os servidores que suportam servlets 2.4, você pode chamar logout para fazer o logoff do cliente do servidor Web e invalidar todas as sessões pertencentes a todos os usuários.

  • web.xml Configuration - Se você estiver usando o Tomcat, além dos métodos mencionados acima, você pode configurar o tempo limite da sessão no arquivo web.xml da seguinte maneira.

Para fazer upload de um único arquivo, você deve usar uma única tag <input ... /> com o atributo type = "file". Para permitir o upload de vários arquivos, inclua mais de uma tag de entrada com valores diferentes para o atributo name.

Você pode codificar isso em seu programa ou este nome de diretório também pode ser adicionado usando uma configuração externa, como um elemento context-param em web.xml.

O redirecionamento de página é geralmente usado quando um documento é movido para um novo local e precisamos enviar o cliente para esse novo local ou pode ser devido ao balanceamento de carga ou para randomização simples.

O elemento <jsp: forward> encaminha o objeto de solicitação contendo as informações de solicitação do cliente de um arquivo JSP para outro arquivo. O arquivo de destino pode ser um arquivo HTML, outro arquivo JSP ou um servlet, desde que esteja no mesmo contexto de aplicativo que o arquivo JSP de encaminhamento.

sendRedirect envia resposta de redirecionamento temporário HTTP ao navegador, e o navegador cria uma nova solicitação para ir para a página redirecionada.

Um contador de visitas informa sobre o número de visitas em uma página específica de seu site.

Para implementar um contador de visitas, você pode usar o objeto Application Implicit e os métodos associados getAttribute () e setAttribute ().

Este objeto é uma representação da página JSP em todo o seu ciclo de vida. Este objeto é criado quando a página JSP é inicializada e será removido quando a página JSP for removida pelo método jspDestroy ().

Você pode seguir as etapas abaixo -

  • Defina uma tabela de banco de dados com uma única contagem, digamos hitcount. Atribua um valor zero a ele.

  • Com cada hit, leia a tabela para obter o valor de hitcount.

  • Aumente o valor de hitcount em um e atualize a tabela com o novo valor.

  • Exibe o novo valor de hitcount como contagens de visitas totais da página.

  • Se você deseja contar acessos para todas as páginas, implemente a lógica acima para todas as páginas.

Considere uma página da Web que exibe o placar do jogo ao vivo, o status do mercado de ações ou a taxa de câmbio. Para todos esses tipos de páginas, você precisa atualizar sua página da Web regularmente usando o botão Atualizar ou recarregar do navegador.

O JSP facilita esse trabalho, fornecendo a você um mecanismo onde você pode criar uma página da Web de forma que ela seja atualizada automaticamente após um determinado intervalo.

A maneira mais simples de atualizar uma página da Web é usar o método setIntHeader () do objeto de resposta. A seguir está a assinatura deste método -

public void setIntHeader(String header, int headerValue)

Este método envia de volta o cabeçalho "Atualizar" para o navegador junto com um valor inteiro que indica o intervalo de tempo em segundos.

A JavaServer Pages Standard Tag Library (JSTL) é uma coleção de tags JSP úteis que encapsula a funcionalidade central comum a muitos aplicativos JSP.

JSTL tem suporte para tarefas estruturais comuns, como iteração e condicionais, tags para manipular documentos XML, tags de internacionalização e tags SQL. Ele também fornece uma estrutura para integração de tags customizadas existentes com tags JSTL.

Os tipos de tags JSTL são -

  • Core Tags

  • Formatting tags

  • SQL tags

  • XML tags

  • JSTL Functions

A tag <c: set> é uma versão compatível com JSTL da ação setProperty. A tag é útil porque avalia uma expressão e usa os resultados para definir um valor de um objeto JavaBean ou java.util.Map.

A tag <c: remove> remove uma variável de um escopo especificado ou do primeiro escopo onde a variável é encontrada (se nenhum escopo for especificado).

A tag <c: catch> captura qualquer Throwable que ocorre em seu corpo e, opcionalmente, o expõe. Simplesmente é usado para tratamento de erros e para lidar com o problema de forma mais elegante.

A tag <c: if> avalia uma expressão e exibe seu conteúdo de corpo apenas se a expressão for avaliada como verdadeira.

O <c: choose> funciona como uma instrução switch Java, pois permite que você escolha entre várias alternativas. Onde a instrução switch possui instruções case, a tag <c: choose> possui tags <c: when>. Uma instrução switch tem uma cláusula default para especificar uma ação default e de maneira semelhante <c: choose> tem <otherwise> como cláusula default.

As tags <c: forEach>, <c: forTokens> existem como uma boa alternativa para incorporar um loop Java for, while ou do-while por meio de um scriptlet.

A tag <c: param> permite que o parâmetro de solicitação de URL adequado seja especificado com URL e faz qualquer codificação de URL necessária.

A tag <c: redirect> redireciona o navegador para um URL alternativo, fornecendo regravação automática de URL, oferece suporte a URLs relativos ao contexto e à tag <c: param>.

A tag <c: url> formata um URL em uma string e o armazena em uma variável. Esta tag executa automaticamente a regravação de URL quando necessário.

As tags de formatação JSTL são usadas para formatar e exibir texto, data, hora e números para sites internacionalizados. A seguir está a sintaxe para incluir a biblioteca de formatação em seu JSP -

<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>

A biblioteca de tags JSTL SQL fornece tags para interagir com bancos de dados relacionais (RDBMSs), como Oracle, mySQL ou Microsoft SQL Server.

A seguir está a sintaxe para incluir a biblioteca JSTL SQL em seu JSP -

<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>

As tags JSTL XML fornecem uma maneira centrada em JSP de criar e manipular documentos XML. A seguir está a sintaxe para incluir a biblioteca JSTL XML em seu JSP.

<%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %>

Uma tag customizada é um elemento de linguagem JSP definido pelo usuário. Quando uma página JSP contendo uma tag customizada é traduzida em um servlet, a tag é convertida em operações em um objeto chamado manipulador de tag. O contêiner da Web então chama essas operações quando o servlet da página JSP é executado.

JSP Expression Language (EL) torna possível acessar facilmente os dados do aplicativo armazenados em componentes JavaBeans. JSP EL permite que você crie expressões (a) aritméticas e (b) lógicas. Uma sintaxe simples para JSP EL é -

${expr}

Aqui expr especifica a própria expressão.

A linguagem de expressão JSP suporta os seguintes objetos implícitos -

  • pageScope - Variáveis ​​com escopo do escopo da página

  • requestScope - Variáveis ​​com escopo do escopo da solicitação

  • sessionScope - Variáveis ​​com escopo do escopo da sessão

  • applicationScope - Variáveis ​​com escopo de aplicação

  • param - Solicitar parâmetros como strings

  • paramValues - Solicitar parâmetros como coleções de strings

  • headerHTTP - solicitar cabeçalhos como strings

  • headerValues - cabeçalhos de solicitação HTTP como coleções de strings

  • initParam - Parâmetros de inicialização de contexto

  • cookie - Valores de cookies

  • pageContext - O objeto JSP PageContext para a página atual

Podemos desativar o uso do atributo isELIgnored da diretiva da página -

<%@ page isELIgnored = "true|false" %>

Se for verdade, as expressões EL são ignoradas quando aparecem em texto estático ou atributos de tag. Se for falso, as expressões EL são avaliadas pelo contêiner.

  • Checked exceptions- A exceção verificada é uma exceção que normalmente é um erro do usuário ou um problema que não pode ser previsto pelo programador. Por exemplo, se um arquivo deve ser aberto, mas o arquivo não pode ser encontrado, ocorre uma exceção. Essas exceções não podem ser simplesmente ignoradas no momento da compilação.

  • Runtime exceptions- Uma exceção de tempo de execução é uma exceção que ocorre e que provavelmente poderia ter sido evitada pelo programador. Ao contrário das exceções verificadas, as exceções de tempo de execução são ignoradas no momento da conclusão.

  • Errors- Não são exceções de forma alguma, mas problemas que surgem além do controle do usuário ou do programador. Os erros são normalmente ignorados em seu código porque você raramente pode fazer algo sobre um erro. Por exemplo, se ocorrer um estouro de pilha, ocorrerá um erro. Eles também são ignorados no momento da compilação.

Podemos usar o atributo errorPage da diretiva page para que as exceções de tempo de execução não capturadas sejam encaminhadas automaticamente para uma página de processamento de erros.

Exemplo: <% @ page errorPage = "error.jsp"%>

Ele redirecionará o navegador para a página JSP error.jsp se uma exceção não detectada for encontrada durante o processamento da solicitação. Em error.jsp, terá que indicar que é uma página de processamento de erro, usando a diretiva: <% @ page isErrorPage = "true"%>

Internacionalização significa permitir que um site forneça diferentes versões de conteúdo traduzido para o idioma ou nacionalidade do visitante.

Localização significa adicionar recursos a um site para adaptá-lo a uma determinada região geográfica ou cultural, por exemplo, tradução de hindi para um site.

Esta é uma região cultural ou geográfica específica. Geralmente é referido como um símbolo de idioma seguido por um símbolo de país, que são separados por um sublinhado. Por exemplo, "en_US" representa a localidade em inglês dos EUA.

<% - comment -%> é um comentário JSP e é ignorado pelo mecanismo JSP.

<! - comment -> é um comentário HTML e é ignorado pelo navegador.

SIM. A tecnologia JSP é extensível por meio do desenvolvimento de ações customizadas, ou tags, que são encapsuladas em bibliotecas de tags.

Os recursos estáticos devem sempre ser incluídos usando o JSP include directive. Dessa forma, a inclusão é realizada apenas uma vez durante a fase de tradução. Observe que você deve sempre fornecer um URL relativo para o atributo de arquivo. Embora você também possa incluir recursos estáticos usando a ação, isso não é aconselhável, pois a inclusão é então realizada para cada solicitação.

Sim. No entanto, ao contrário do Servlet, você não precisa implementar métodos específicos do protocolo HTTP, como doGet () ou doPost () em sua página JSP. Você pode obter os dados para os elementos de entrada FORM por meio do objeto implícito de solicitação em um scriptlet ou expressão.

Use as seguintes maneiras de passar o controle de uma solicitação de um servlet para outro ou de um jsp para outro -

  • O método de encaminhamento do objeto RequestDispatcher para passar o controle.

  • Usando o método response.sendRedirect .

Não. Você deve usar apenas um objeto JSPWriter (fornecido na forma do objeto implícito out) para responder aos clientes.

Um JSPWriter pode ser visto como uma versão em buffer do objeto stream retornado por response.getWriter (), embora de uma perspectiva de implementação, não seja.

<% @ page session = "false">

Usando a tag <% jsp: param>.

Podemos sobrescrever os métodos jspinit () e jspDestroy (), mas não _jspService ().

O método _jspService () será escrito pelo contêiner, portanto, quaisquer métodos que não devam ser substituídos pelo usuário final são geralmente escritos começando com um '_'. Esta é a razão pela qual não substituímos o método _jspService () em nenhuma página JSP.

Isso causa erro de compilação, pois duas variáveis ​​com o mesmo nome não podem ser declaradas. Isso ocorre porque, quando uma página é incluída estaticamente, todo o código da página incluída torna-se parte da nova página. neste momento, existem duas declarações da variável 'a'. Daí erro de compilação.

O script é desabilitado definindo o elemento inválido de script do descritor de implantação como verdadeiro. É um subelemento de jsp-property-group. Seus valores válidos são verdadeiros e falsos. A sintaxe para desativar o script é a seguinte -

<jsp-property-group>
   <url-pattern>*.jsp</url-pattern>
   <scripting-invalid>true</scripting-invalid>
</jsp-property-group>

Se quisermos disponibilizar nossos dados para todo o aplicativo, precisamos usar o escopo do aplicativo.

Em JSP, podemos realizar a inclusão das seguintes maneiras -

  • By include directive - Por exemplo -

<%@ include file = ”header.jsp” %>
  • By include action - Por exemplo -

<%@ include file = ”header.jsp” %>
  • By using pageContext implicit object Por exemplo -

<% pageContext.include(“/header.jsp”); %>
  • By using RequestDispatcher object - Por exemplo -

<%
 RequestDispatcher rd = request.getRequestDispatcher(“/header.jsp”);
 Rd.include(request,response);
%>

Os mecanismos JSP sempre instanciarão uma nova instância do manipulador de tag toda vez que uma tag for encontrada em uma página JSP. Um pool de instâncias de tag é mantido e reutilizado quando possível. Quando uma tag é encontrada, o mecanismo JSP tentará encontrar uma instância de Tag que não esteja sendo usada e usará a mesma e então a liberará.

Os fundamentos JavaBeans e taglib foram introduzidos para reutilização. Mas a seguir estão as principais diferenças entre eles -

  • Taglibs são para gerar elementos de apresentação, enquanto JavaBeans são bons para armazenar informações e estado.

  • Use tags personalizadas para implementar ações e JavaBeans para apresentar informações.