1. Introdução ao JSP
JSP (Java Server Pages) é uma linguagem de script do lado do servidor. É uma tecnologia que adiciona a linguagem Java às páginas HTML para gerar páginas dinâmicas: novas tags (<%, %>,...) são adicionadas.
JSP é uma tecnologia de geração dinâmica de páginas da web desenvolvida com base em Java e Servlet. Sua implementação subjacente é Java Servlet.
As páginas JSP são compostas de código HTML e código Java incorporado nelas. O servidor processa esses códigos Java depois que a página é solicitada pelo cliente e, em seguida, retorna a página HTML gerada ao navegador do cliente.
2. Processo de execução JSP O cliente solicita a página JSP -> JSP Parser analisa *.jsp e compila-o em *.java -> o comando javac compila-o em *.class -> executa o arquivo de classe -> responde e retorna o resultado para o cliente
O código JSP contém duas categorias: elementos JSP e dados de modelo. Os dados do modelo referem-se à parte que o mecanismo JSP não processa, ou seja, o mecanismo JSP distribuirá diretamente as partes diferentes das tags <%...%> sem qualquer processamento.
Quando JSP é executado pela primeira vez ou após modificar o arquivo JSP, ele chamará o JSP Parser para compilar o arquivo *.jsp em um programa servlet, portanto será mais lento.
3. Sintaxe básica JSP
1. Dois tipos de anotação
(1) Comentário HTML Você pode adicionar um comentário em formato HTML ao código JSP. Este comentário é enviado ao cliente, mas não é exibido na página.
<!-- Comentários em formato HTML, visíveis ao visualizar o código fonte no cliente -->
<!-- Este comentário foi adicionado por <%=programmer%>-->
Se o programador for um hackiller, o comentário retornado no cliente será <!-- Este comentário foi adicionado pelo hackiller -->
(2) Os comentários JSP são escritos no código JSP, mas não são enviados ao cliente.
<%-- Comentário JSP, este comentário será ignorado quando JSP for compilado --%>
<%-- /*Comentários multilinhas no Scriptlet*/ --%>
<%-- /**Comentários de múltiplas linhas no Scriptlet, que podem ser extraídos de arquivos java usando javadoc*/ --%>
<%-- Comentário de linha única JSP--%>
2. 3 elementos de script
(1) Declaração de variáveis globais
<%!int i=0;String="Olá mundo!";
(2)Expressão
No código JSP, as expressões são frequentemente usadas para gerar o valor de uma variável, que pode estar em qualquer lugar
<%! int a=1; int b=2;
<%=a+b%> <%=str>
PS: Você não pode usar o símbolo ";" como terminador de uma expressão. Mas a mesma expressão deve terminar com ponto e vírgula no Scriptlet.
(3) Scriptlet
Um segmento de script é usado para conter um segmento de programa Java válido
<% int b=3;
3. 3 elementos de comando
(1) comando de página
<%@ page contentType="text/html;charset=utf-8"%>
Defina os atributos globais do arquivo JSP, incluindo: idioma, extensões, importação, sessão, buffer, autoflush, isThreadSafe, info, errorPage, isErrorPage, contentType (formato de saída do servidor para o cliente)
Sua localização pode ser em qualquer lugar da página, mas é recomendável colocá-lo no topo da página.
idioma: declara o tipo de linguagem de script Atualmente, apenas “java” pode ser usado.
estende: Indica o nome completo da classe Java que precisa ser adicionada ao compilar JSP. Isso limitará a capacidade de compilação do JSP, portanto, use com cuidado!
import: Lista de pacotes java que precisam ser importados.
sessão: Defina se o cliente requer sessão HTTP. O padrão é verdadeiro.
buffer: O tamanho do buffer é usado pelo objeto out para processar a saída do JSP executado para o navegador do cliente. O valor padrão é 8 KB.
autoFlush: Define se deve forçar a saída se o buffer estourar. Se for definido como verdadeiro (valor padrão), a saída será normal, se for definido como falso, ocorrerá um erro inesperado.
isThreadSafe: Define se o arquivo JSP pode ser usado em vários threads. O padrão é verdadeiro.
informações: informações de texto. Ele pode ser recuperado usando o método Servlet.getServletInfo().
errorPage: Defina o arquivo JSP que manipula eventos de exceção
sErrorPage: Defina se esta página é uma página que lida com eventos de exceção. Se definido como verdadeiro, o objeto de exceção pode ser usado.
contentType: Defina o tipo MIME e o conjunto de codificação de caracteres. O tipo MIME padrão é text/html e o conjunto de caracteres padrão é charset=ISO-8859-1.
Várias diretivas < %@page %> podem ser usadas em uma página, mas exceto pelo atributo import, outros atributos só podem ser usados uma vez.
Pacotes importados por JSP por padrão Os seguintes pacotes foram importados durante a compilação JSP, portanto não há necessidade de usar a diretiva page para introduzi-los no arquivo JSP:
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
(2)incluir diretiva
Código HTML
<%@include arquivo = "caminho relativo" %>
Use a diretiva include para incluir um arquivo estático em JSP e analisar as instruções JSP nesse arquivo.
Se o caminho começar com "/", então esse caminho se refere principalmente ao caminho de contexto do aplicativo jsp.
Se o caminho for aberto como um nome de arquivo ou diretório de arquivo, esse caminho será o caminho atual do arquivo JSP que está sendo usado.
(3) comando taglib
Código HTML
<%@ taglib uri = "TagLibrary" prefix = "mypfx" %>
Use a diretiva taglib para definir uma biblioteca de tags e seu prefixo personalizado.
uri: O Uniform Resource Identifier nomeia exclusivamente o rótulo personalizado com base no prefixo do rótulo, que pode ser um caminho relativo ou absoluto.
prefixo: o prefixo do rótulo personalizado. Não use jsp, jspx, java, javax, servlet, sun, sunw como prefixos, estes foram declarados reservados pela Sun.
4. 8 comandos de ação
(1) Salto de página: <jsp:forward>
A tag <jsp:forward> passa um objeto de solicitação contendo uma solicitação do usuário de um arquivo jsp para outro.
Contém 2 atributos no total
O atributo page é uma expressão ou string que descreve o arquivo ou URL a ser direcionado.
<jsp:param>Envia um ou mais parâmetros para um arquivo dinâmico. Se a tag <jsp:param> for usada, o arquivo de destino deverá ser um arquivo dinâmico (como Servlet ou JSP, etc.)
Código HTML
<jsp:forward page=test.jsp>
<jsp:param name="nomedeusuário" value="<%=usuário%>"/>
<jsp:param name="senha" value="12345678"/>
</jsp:avançar>
Obtenha o nome de usuário por meio de request.getParameter("username")
(2) Incluir página: <jsp:include>
<jsp:include> permite a inclusão de recursos web estáticos e dinâmicos, e os resultados dessas duas inclusões são diferentes.
Se apenas arquivos estáticos forem incluídos, essa inclusão apenas adicionará o conteúdo do arquivo incluído ao arquivo JSP, semelhante a < %@include% >;
Se um recurso web dinâmico for incluído, o arquivo incluído também será executado pelo compilador JSP.
Se este arquivo de inclusão for dinâmico, você também poderá usar <jsp:param> para passar parâmetros e valores de parâmetros.
(3) Criar Bean: <jsp:useBean>
Crie uma instância do Bean e especifique seu nome e escopo.
<jsp:useBean id="beanInstanceName" escopo="page|request|session|application" class="package.className"/>
Contém 5 atributos.
id: Confirme a variável Bean no escopo definido e use o id para usar esta instância do Bean no programa. O valor de id diferencia maiúsculas de minúsculas.
Escopo: O escopo no qual o Bean existe e o escopo válido do nome da variável id. O valor padrão é página.
class: Use a nova palavra-chave e o construtor de classe para instanciar um bean de uma classe. A classe não pode ser abstrata e deve ter um construtor público sem argumentos.
type: Se este Bean já existir no escopo especificado, usar type atribuirá um tipo de dados a este Bean. Se type for usado sem class ou beanName, o bean não será instanciado.
beanName: beanName pode ser uma string package.class ou uma expressão jsp, e seu valor será passado para o método Beans.instantiate. O valor de type pode ser igual a beanName, sua classe base ou a interface que ele implementa.
(4) Definir propriedades do Bean: <jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
name: Indica o nome da instância do Bean que foi criada em <jsp:useBean>, ou seja, id.
propriedade: Corresponde às propriedades no Bean
param: refere-se ao nome do parâmetro no objeto de solicitação e define o valor correspondente ao atributo Bean.
valor: use o valor especificado para definir a propriedade Bean. Este valor pode ser uma string ou uma expressão. Se for uma string, será convertido para o tipo do atributo Bean (por exemplo, "0,98" será convertido para o tipo duplo 0,98). Se for uma expressão, seu tipo deverá ser consistente com o tipo do atributo Bean.
PS: Atributos param e atributos de valor não podem ser usados ao mesmo tempo no mesmo <jsp:setProperty>
(5) Obtenha propriedades do Bean: <jsp:getProperty>
Obtenha o valor do atributo no objeto Bean existente e exiba-o na página.
<jsp:getProperty name="beanInstanceName property="propertyName"/>
nome: o mesmo nome da instância do objeto existente.
propriedade: o nome da propriedade no objeto
(6) Use o plug-in do miniaplicativo: <jsp:plugin>
Código HTML
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
<jsp:parmas>
<jsp:param name="way" value="Hall"/>
</jsp:params>
<jsp:fallback>
<p>Não foi possível carregar o miniaplicativo!</p>
</fallback>
</jsp:plugin>
Use <jsp:plugin> para inserir um applet ou Bean e, se necessário, baixe um plug-in Java para executá-lo.
(7) Defina parâmetros: <jsp:param>
Pode ser usado em <jsp:include>, <jsp:forward>, <jsp:plugin>.
(8) Mensagem de erro do plug-in: <jsp:fallback>
Quando o plug-in <jsp:plugin> não puder ser exibido normalmente, uma mensagem de prompt será exibida.
3. Objetos JSP integrados
1. Solicitação: Objeto de solicitação. Este objeto encapsula as informações enviadas pelo usuário. As informações encapsuladas podem ser obtidas chamando o método correspondente do objeto.
Quando o objeto da solicitação obtiver os caracteres chineses enviados pelo cliente, caracteres ilegíveis aparecerão e um processamento especial deverá ser realizado.
Métodos comumente usados:
getParameter(String parâmetroName): Obtenha as informações de envio do formulário.
getProtocol(): obtém o protocolo utilizado pelo cliente.
getServletPath(): obtém a página onde o cliente enviou as informações.
getMethod(): O método para obter as informações enviadas pelo cliente.
getHeader(String str): Obtenha os valores de Accept, Accept-encoding e Host no arquivo de cabeçalho HTTP.
getRermoteHost(): obtém o endereço IP do cliente.
getServerName: Obtenha o nome do servidor.
getServerPort: Obtenha o número da porta do servidor.
getParameterNames(): obtém os nomes de todos os parâmetros enviados pelo cliente.
2. Resposta: O objeto de resposta responde dinamicamente à solicitação do cliente e envia dados ao cliente.
(1) Responder dinamicamente ao atributo contentType Use o comando page para definir estaticamente o atributo contentType da página. Ao definir este atributo dinamicamente, use response.setContextType("text/html;charset=utf-8");
(2) Redirecionamento de resposta
resposta.sendRedirect("index.jsp");
3. Sessão: objeto de sessão
(1) O que é um objeto Session?
O objeto Session é criado automaticamente quando a primeira página JSP é carregada para concluir o gerenciamento da sessão.
Começa quando um cliente abre um navegador e se conecta ao servidor e termina quando o cliente fecha o navegador e sai do servidor.
(2) ID do objeto Session
Quando um cliente visita uma página JSP no servidor pela primeira vez, o mecanismo JSP gera um objeto Session e atribui um número de ID do tipo String. O mecanismo JSP também envia esse número de ID ao cliente e o armazena em um cookie. desta forma, o objeto Session, somente quando o cliente fecha o navegador é que o objeto Session do cliente é modificado pelo servidor e a correspondência da sessão com o cliente desaparece.
(3)Métodos comuns
public String getId(): obtém o número do objeto Session.
public void setAttribute(String str,Object obj): Adicione o objeto de parâmetro ao objeto Session.
public Object getAttribute(): Obtenha os atributos no objeto Session com base no nome do atributo.
public boolean isNew(): Determine se é um novo cliente.
4. Aplicação: objeto de aplicação
(1) O que é um objeto Aplicativo?
Este objeto Aplicativo é gerado após o servidor ser iniciado. Quando um cliente navega entre várias páginas do site visitado, o objeto Aplicativo é o mesmo e todos os clientes compartilham esse objeto Aplicativo integrado.
(2)Métodos comuns
setAttribute(String key,Object obj): Adicione o objeto de parâmetro ao objeto Application.
getAttibute(String key): Obtenha os atributos no objeto Aplicativo com base no nome do atributo
5. Fora: objeto de saída
O objeto out é um fluxo de saída usado para enviar dados aos clientes.
out.print(): gera vários tipos de dados.
out.newLine(): gera um caractere de nova linha.
out.close(): Fecha o fluxo.
6. Config: Objeto de configuração Geralmente, usamos o objeto Config para obter algumas informações de configuração de inicialização. Os métodos comumente usados são getInitParameter e getInitParameterNames para obter os parâmetros durante a inicialização do Servlet.
7.Página: objeto de página
O objeto de página representa o objeto de classe em execução gerado pelo arquivo JSP e não é recomendado para leitores em geral.
8.PageContext: objeto de contexto de página
A classe PageContext introduzida por JSP permite acessar muitas propriedades da página. A variável pageContext armazena o valor do objeto PageContext associado à página atual. A classe PageContext possui métodos como getRequest, getResponse, getOut e getSession.
9.Exceção: objeto de exceção
O objeto de exceção representa o objeto de exceção gerado quando o arquivo JSP está em execução. Este objeto não pode ser usado diretamente em arquivos JSP comuns, mas só pode ser usado em.
< %@page isErrorPage="true"%> é usado em arquivos JSP. Isso ocorre porque o objeto de erro gerado quando o arquivo JSP está em execução é descartado e só pode ser interceptado por um JSP que usa a tag < %@pageisErrorPage="true"% > para interceptar o objeto de erro. O método mais comumente usado é getMessage, usado para obter informações de erro.
4. Página de login da instância: index.jsp
Código HTML
<%@ page idioma="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<html>
<cabeça>
<title>Login do sistema</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
<style type="texto/css">
.btn {
família de fontes: "Tahoma", "宋体";
tamanho da fonte: 9pt;
cor: #001E3C;
BORDA INFERIOR: #6794BC 1px sólido;
BORDA ESQUERDA: #8BB8E0 1px sólido;
BORDA DIREITA: #6794BC 1px sólido;
BORDA SUPERIOR: #8BB8E0 1px sólido;
imagem de fundo: url(imagem/buttonbg.gif);
CURSOR: mão;
estilo de fonte: normal;
preenchimento à esquerda: 3px;
preenchimento à direita: 3px;
}
</estilo>
<script type="texto/javascript">
função doLogin(){
var vform = document.loginform;
if(!loginform.nomedeusuário.valor){
alert("Por favor, digite o nome de usuário!")
retornar;
}
if(!loginform.password.value){
alert("Por favor, digite a senha!")
retornar;
}
vform.submit();
}
</script>
</head>
<body topmargin="0" leftmargin="0" >
<form action="receive.jsp" name="longinForm" método="post">
<largura da tabela="100%" altura="100%">
<tr>
<td align="center" valign="middle">
<TABLE id = "formulário1"
cellpacing="0" cellpadding="0" border="0" style="largura: 500;">
<CAPTION style="display: nenhum">
</CAPTION>
<TR>
<TD>
<TABLE largura="100%" altura="100%" cellpacing="0"
cellpadding="0" border="0" style="layout da tabela: fixo">
<TR>
<TD valign="topo">
<FIELDSET id="form1_group0" style="largura: 100%;">
<LEGEND>Login do sistema</LEGEND>
<DIV>
<estilo DIV="largura: 100%; altura: 100%">
<TABLE largura="100%" cellpacing="0"
cellpadding="4" border="0" style="layout da tabela: fixo;">
<COLGRUPO>
<COL largura="100"></COL>
<COL largura="50%"></COL>
<COL largura="100"></COL>
<COL largura="50%"></COL>
</COLGROUP>
<TR>
<TD alinhar="direita">
nome de usuário
</TD>
<TD class="InnerTableContentCell">
<input type="text" nome="nome de usuário"
estilo="largura: 100%;">
</TD>
<TD alinhar="direita">
senha
</TD>
<TD>
<input type="senha" nome="senha"
estilo = "largura: 100%;"
<input type="hidden" name="action2" valor="0">
</TD>
</TR>
<TR>
<TD colSpan="4"
alinhar = "direita">
<input type="button" name="login" value="Login" onclick="this.form.submit();" class="btn"/>
</TD>
</TR>
</TABELA>
</DIV>
</DIV>
</FIELDSET>
</TD>
</TR>
</TABELA>
</TD>
</TR>
</TABELA>
</td>
</tr>
</tabela>
</form>
</body>
</html>
Página de recebimento de dados: recebe.jsp
Código HTML
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="action tag"%>
<jsp:useBean id="userVo" class="exercise.vo.UserVo" escopo="request">
<jsp:setProperty name="userVo" property="nome" param="nome de usuário"/>
<jsp:setProperty name="userVo" propriedade="senha" param="senha"/>
</jsp:useBean>
<html>
<cabeça>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
</head>
<corpo>
Esta é minha página JSP.
<hr>Use <jsp:getProperty> para obter o valor enviado no formulário<br>
nome:<jsp:getProperty property="name" name="userVo"/><br>
senha:<jsp:getProperty property="password" name="userVo"/>
<br><br><hr>
<%
out.println("Obter diretamente do objeto vo:<br> nome:"+userVo.getName()+
"<br>senha:"+userVo.getPassword()+"<br>");
String serviceName = request.getServerName(); //objeto de solicitação dentro de 1.jsp
out.println("<br><hr>Nome do servidor: "+serviceName);
out.println("<br>Tipo MIME: "+response.getContentType());//2.jsp objeto de resposta interna
session.setAttribute("sessionName","objeto de sessão dentro de jsp"); //3.jsp objeto de sessão interno
out.println("<br>objeto de sessão: "+session.getAttribute("sessionName"));//4.jsp objeto de saída interno
pageContext.setAttribute("pageContext","Referência do ambiente de contexto");//objeto pageContext dentro de 5.jsp
//6.aplicativo
//7.configuração da instância ServletConfig
//8. Instância da página java.lang.Object
//9. exceção deve usar uma instância de java.lang.Throwable na página com isErrorPage=true na diretiva da página.
String info = pageContext.getServletContext().getServerInfo();
out.println("Obtenha o atributo info no comando da página: "+info);
%>
</body>