Todos nós sabemos que existem duas formas de inclusão em jsp, a saber
<%@incluir arquivo=” ”%>
<jsp:include page=” ”flush=”true”/></P>
O primeiro é um elemento de instrução e o último é um elemento comportamental. Onde exatamente eles serão usados? Como usá-los e qual a diferença? Esta deve ser uma pergunta que muitas pessoas pensarão quando a virem. Vamos dar uma olhada abaixo. </P>
Normalmente, quando certas partes de todas as páginas do aplicativo (como títulos, rodapés e barras de navegação) são iguais, podemos considerar o uso de include. Especificamente, quando usar <%@ include file=""%> e quando usar <jsp:include page="" flush="true"/>. A primeira coisa a entender é a diferença entre eles. Somente compreendendo as diferenças em seu uso você poderá entender quando usá-los e como escolher.
<%@ include file=" ”%>, o elemento da diretiva jsp include lê o conteúdo da página especificada. E integre esses conteúdos à página original. (Este processo é realizado durante a fase de tradução: ou seja, a fase em que o jsp é convertido em servlet.</P>
Aqui está uma explicação do estágio de tradução: Sabemos que a página jsp não pode ser enviada intacta ao navegador e todos os elementos jsp devem primeiro ser processados pelo servidor. Isso é feito convertendo a página jsp em um servlet e depois executando o servlet. O servidor precisa de um contêiner jsp para processar páginas jsp. O contêiner jsp geralmente é implementado na forma de um servlet. Este servlet é configurado para lidar com todas as solicitações de páginas jsp. </P>
O contêiner Jsp é responsável por converter a página jsp em um servlet (chamado de classe de implementação de página jsp? Classe de implementação de página JSP) e compilar esse servlet. Estas duas etapas constituem a fase de tradução.</P>
A partir disso saberemos: a página jsp adiciona o conteúdo real (ou seja, o trecho de código) da página especificada pelo elemento da diretiva include à página jsp que o apresenta. Depois de ser sintetizado em um arquivo, ele é convertido em um arquivo. servlet pelo contêiner jsp. Você pode ver que um arquivo de classe temporário e um arquivo java serão gerados neste momento. Aqui está um exemplo. </P>
O servidor usa Tomcat e o arquivo jsp introduzido na página é chamado test.jsp. A página importada é chamada date.jsp. Este arquivo jsp armazena um código jsp relacionado ao tempo e a raiz de contexto atual é definida para teste.
//======Arquivo fonte de date.jsp======//
<%@page idioma="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date date=new java.util.Date();
String data_cn = "";
String dataStr = "";
switch(data.getDay())
{
case 0:date_cn = "Dia";
case 1:data_cn = "一";
case 2:data_cn = "二";
case 3:data_cn = "三";
case 4:data_cn = "四";
case 5:date_cn = "五";
case 6:data_cn = "六";
}
dateStr = (1900+date.getYear()) + "Ano" + (date.getMonth()+1) + "Mês" + date.getDate() + "Dia (dia da semana) + date_cn + ")";
%>
document.write("<%=dateStr%>");
//======A seguir está o arquivo fonte de test.jsp=============//
<%@ idioma da página=”java” contentType=”text/html;charset=gb2312”%>
<html>
<cabeça>
<title>Dois usos de include</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%--@ incluir arquivo=”data.jsp” %-->
//Usamos duas formas diferentes de inclusão aqui para apresentar o arquivo date.jsp.
<cabeça>
<corpo>
<tabela><tr><td>
Preste atenção aos dois usos de include em jsp.
</td></tr></table>
</body>
</html></P>
No arquivo test.jsp, geramos apenas uma linha de texto "Sobre dois usos de include em jsp. Agora, vamos primeiro usar o formulário <%@ include file="date.jsp" %> Introduzir o arquivo date.jsp. Você acha que algo pode dar errado? Uma mensagem de erro aparece neste momento:
Status HTTP 500?
org.apache.jasper.JasperException: /date.jsp(0,0) Diretiva de página: não pode ter múltiplas ocorrências de contentType
Há vários erros abaixo, mas só precisamos olhar para isso para ver onde está o problema. O código de status é http 500 Server Internal Error. Dê uma outra olhada nas dicas abaixo. Vários contentTypes não podem ser especificados na página date.jsp.</P>
Aqui está o porquê. Isso ocorre porque durante a fase de tradução, o código do arquivo date.jsp foi adicionado intacto à página test.jsp para sintetizar um arquivo. O arquivo sintetizado será o mesmo:
<%@ idioma da página=”java” contentType=”text/html;charset=gb2312”%>
Este código. A solução é excluir esta frase do arquivo date.jsp. Atualize e solicite a página test.jsp</P>
A solicitação test.jsp é exibida na página da seguinte forma
10 de dezembro de 2003 13:12:40
Preste atenção aos dois usos de include em jsp. </P>
Não conseguimos encontrar nada ainda. Vamos verificar os arquivos temporários no Tomcat. Vá lá e veja se o conteúdo do arquivo date.jsp foi adicionado ao arquivo test.jsp.
<Nota. O Tomcat aqui está instalado no diretório raiz da unidade E>.
Índice
E:tomcatworkStandalonelocalhosttest.
Neste diretório você verá
Existem dois arquivos test_jsp.java e test_jsp.class. </P>
O arquivo java aqui é o arquivo test_jsp.java obtido pela conversão de jsp em servlet pelo contêiner jsp. </P>
O arquivo test_jsp.class correspondente é o arquivo de classe gerado pela compilação do arquivo servlet test_jsp.java. Abra o arquivo servlet gerado (test_jsp.java). Neste ponto, descobriremos que quando o arquivo test.jsp é convertido em um arquivo servlet, algum código que não está na página test.jsp é adicionado entre a saída <haed>. jsp: Por favor, teste e veja qual novo conteúdo foi adicionado ou se o novo conteúdo foi realmente adicionado. Não entrarei em detalhes aqui.</P>
O resultado acima é o resultado que obtemos usando o formato <%@ include file="date.jsp"%>.
A seguir, usamos <jsp:include page="dae.jsp" flush="true"/>, ou seja,
Substitua <%@ include file="date.jsp"%> por <jsp:include page="dae.jsp" flush="true"/> e solicite test.jsp.
2003?ê 12??10?? 13:30:13
Preste atenção aos dois usos de include em jsp. </P>
Neste momento, você verá na página que os caracteres chineses na saída de data do date.jsp que introduzimos estão ilegíveis. Qual é o motivo? É porque o elemento de comportamento de inclusão é executado durante o estágio de processamento da solicitação (aqui nós. precisa explicar o estágio de processamento da solicitação. Além de ser responsável por converter as páginas jsp em servlets conforme mencionado acima, o contêiner Jsp também é responsável por chamar a classe de implementação da página jsp para processar cada solicitação e gerar uma resposta. estágio de processamento de solicitação. O estágio de processamento de solicitação executa apenas o arquivo de classe). </P>
Portanto, quando introduzimos o elemento de ação include na página, na verdade apenas referenciamos o arquivo de classe do servlet gerado após a conversão e compilação do arquivo date.jsp. Nesse caso, o date.jsp é testado como um arquivo separado após a execução. chamado quando o arquivo .jsp está em execução Como a codificação de caracteres não é especificada no arquivo date.jsp, aparecem caracteres ilegíveis. A solução é substituir novamente os caracteres que acabaram de ser removidos no arquivo date.jsp.
<%@ idioma da página=”java” contentType=”text/html;charset=gb2312”%>
Depois de adicionar esta linha de instrução, atualize e execute novamente. Neste momento, a página é exibida corretamente e é a mesma que quando executada normalmente com a diretiva include. Se você observar os arquivos temporários no Tomcat, verá que existem. é um arquivo date_jsp.java e um arquivo date_jsp.class. Esses dois arquivos são obtidos da mesma forma que os arquivos test_jsp.java e test_jsp.class. você descobrirá que apenas uma nova linha de código será adicionada neste momento:
JspRuntimeLibrary.include(solicitação, resposta, "date.jsp", saída, verdadeiro);</P>
Ele não adiciona o código do arquivo date.jsp ao test.jsp.</P>
Ele apenas apresenta a resposta gerada após a execução da página date.jsp em tempo de execução. Isso significa que podemos especificar qualquer recurso da Web que possa gerar uma resposta (como um servlet ou uma página jsp), desde que os tipos gerados por estes. os recursos são iguais a jsp O tipo de conteúdo gerado pela página é o mesmo O contêiner JSP executará o recurso especificado por meio de uma chamada de função interna. Portanto, esses recursos importados podem ajudar a processar a solicitação original, para que esses recursos possam acessar todos os objetos. no escopo da solicitação. E todos os parâmetros da solicitação original.</P>
Como essas páginas ainda não foram introduzidas na página principal quando a página principal é solicitada, você pode usar um valor de atributo de tempo de solicitação para o atributo de página para determinar qual página apresentar com base na situação de tempo de execução. parâmetros a serem lidos pela página recebida.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" >
<jsp:param name=”fitstParamer” valor=”primeirovalor”>
<jsp:param name=”lastParamer” valor=”lastvalue”>
</jsp:include></P>
Se a página jsp importada for modificada, a versão mais recente da página poderá ser usada imediatamente. Isso ocorre porque a página importada é tratada exatamente da mesma maneira que a página jsp chamada diretamente pelo navegador. . e entre automaticamente na fase de tradução para obter a versão mais recente da página.</P>
(Observe que o elemento de comportamento include é igual a outros elementos jsp. Se não houver corpo de comportamento, ele deve terminar com "/". Assim como o seguinte.
<jsp:include page="<%=pageSelectedAtRuntime%>" flush="true" />)</P>
A seguir está a diferença entre os dois usos de include. Existem duas diferenças principais;
1: Tempo de execução:
<%@ include file=”relativeURI”%> é executado durante a fase de tradução
<jsp:include page="relativeURI" flush="true" /> é executado durante a fase de processamento da solicitação.
2: Diferenças no conteúdo introduzido:
<%@incluir arquivo=”relativeURI”%>
Introduzir texto estático (html, jsp) e integrá-lo à página JSP antes de convertê-lo em um servlet.
<jsp:include page="relativeURI" flush="true" />Introduz o texto de resposta gerado pela página de execução ou servlet.
Além disso, em ambos os usos, os atributos do arquivo e da página são interpretados como um URI relativo. Se começar com uma barra, então é um caminho relativo ao ambiente. Será interpretado de acordo com o prefixo atribuído ao URI do aplicativo, se for. não começa com uma barra, então é um caminho relacionado à página. Será interpretado de acordo com o caminho da página onde este arquivo é introduzido. Para obter mais informações sobre como as URLs são interpretadas, consulte os materiais relevantes ou. livros.