1. El principio operativo de jsp: la esencia de jsp es servlet (entrevista)
Jsp será traducido a un servlet por el contenedor web y luego se ejecutará cuando se acceda a él por primera vez
Proceso:
Primera visita -> helloServlet.jsp (Traducido a Servlet) ——> helloServlet_jsp.java (Servlet compilado) ——> Compilar y ejecutar
PD: el servlet traducido se puede encontrar en el directorio de trabajo de Tomcat
Dos, scripts jsp y comentarios
secuencia de comandos jsp :
<% java代码 %>
—— El código java interno se traduce al método de servicio<%=java变量或表达式>
——Traducido a out.print () dentro del método de servicio, contenido de salida directamente<% ! java代码%>
-Traducido al contenido de los miembros del servlet.
jsp note : el rango visible de diferentes notas es diferente
-
Notas de HTML:
<!--注释内容-->
—— Alcance visible: código fuente jsp, servlet traducido, visualización de la página del navegador código fuente html -
Notas de Java:
//单行注释 /*多行注释*/
—— Alcance visible: servlet traducido del código fuente jsp -
jsp notas:
<%--注释内容--%>
——Rango visible: el código fuente JSP es visible
Caso:
<%@ page contentType="text/html;charset=UTF-8"language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<!--html注释-->
<h1>
JSP页面
</h1>
<%
int i=0;
System.out.println(i);
%>
<%=i%>
<%=1+1%>
//java注释
/*java多行注释*/
<%--jsp注释--%>
<%!
String str = "hello china";
%>
<%=str %>
</body>
</html>
3. Instrucción JSP- (tres instrucciones principales)
Las instrucciones de jsp son comandos que guían la traducción y operación de jsp. Jsp incluye tres instrucciones principales:
Instrucción 1.page
page指令
——La instrucción con más atributos (la instrucción de página es la predeterminada en el desarrollo real)
La instrucción con más atributos guía las características de toda la página de acuerdo con diferentes atributos- formato:
<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
Los atributos comunes son los siguientes:
language
: Tipos de lenguajes que se pueden incrustar en scripts jsppageEncoding
: La codificación del archivo jsp actual — contentType se puede incluir dentrocontentType
: Response.setContentType (texto / html; juego de caracteres = UTF-8)session
: Si jsp crea automáticamente una sesión durante la traducciónimport
: Importa el paquete java. Por ejemplo, si desea importar una lista, se informará un error y el paquete no se importará al principio.errorPage
: A qué página saltar cuando la página actual falla.isErrorPage
: La página actual es una página de manejo de errores. Por ejemplo: cuando error.jsp = ”true”. Indica que actualmente es una página de error.extends
: Por ejemplo, escriba "java.util.ArrayList". En este momento, el archivo jsp informará un error. No se usa comúnmente en el desarrollo y generalmente no se hereda de manera casual.
Caso:
Nota: preste atención a algunas instrucciones de página comunes en jsp y, al mismo tiempo, configuramos la página actual como una página que maneja errores
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="true" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%List<String> list =new ArrayList<String>(); %>
<%session.setAttribute("name","zhangsan"); %>
<% out.print("this is errorPage"); %>
</body>
</html>
Nota: En este momento, cuando accedamos a recursos que no existen en el proyecto, saltaremos a la página actual.Y necesitamos web.xml
escribir algo de la siguiente manera:
<error-page>
<error-code>404</error-code>
<location>/jspdemo.jsp</location> <!--表示jsp的文件名-->
</error-page>
El efecto es el siguiente:
2. incluir directiva
La página incluye instrucciones (inclusión estática), puede incluir una página jsp en otra página jsp
formato:<%@ include file="被包含的文件地址"%>
Por ejemplo: creamos un demo.jsp y escribimos en index.jsp
<body>
<%@include file="demo.jsp"%>
</body>
En este punto, visitamos index.jsp, el contenido del interior contendrá el contenido de demo.jsp
3. instrucciones taglib
Introduzca la biblioteca de etiquetas (biblioteca de etiquetas jstl, biblioteca de etiquetas struts2) en la página jsp
formato:<%@ taglib uri="标签库地址" prefix="前缀"%>
Similar a la introducción de archivos CSS y JavaScript en la interfaz
Cuatro objetos .jsp incorporados / implícitos (9) - (importante)
Después de que jsp se traduce a servlet, hay 9 objetos definidos e inicializados en el método de servicio, podemos usar estos 9 objetos directamente en el script jsp
nombre | Tipos de | descripción |
---|---|---|
fuera | javax.servlet.jsp.JspWriter | Para salida de página |
solicitud | javax.servlet.http.HttpServletRequest | Obtener información de solicitud de usuario |
respuesta | javax.servlet.http.HttpServletResponse | El mensaje de respuesta del servidor al cliente. |
config | javax.servlet.ServletConfig | Configuración del servidor, se pueden obtener los parámetros de inicialización |
sesión | javax.servlet.http.HttpSession | Se utiliza para guardar la información del usuario. |
solicitud | javax.servlet.ServletContext | Información compartida para todos los usuarios |
página | java.lang.Object | Se refiere a la instancia de la clase Servlet convertida de la página actual (observe el comienzo del caso a continuación) |
pageContext | javax.servlet.jsp.PageContext | Contenedor de página JSP |
excepción | java.lang.Throwable | Indica la excepción que ocurrió en la página JSP, que solo funciona en la página de error. |
1. fuera de objeto
Tipo de salida: JspWriter
El papel de out es generar contenido para el cliente-out.write ()
El búfer de salida es de 8 kb por defecto y se puede configurar en 0, lo que significa que el contenido del búfer de salida se cierra y se escribe directamente en el búfer de respuesta
Caso:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
aaaaaaaaaaaaaa
<% out.write("bbbbbbbbbbbbbbbbbb");
response.getWriter().write("ccccccccc");
%>
<%="ddddddddddddd" %>
<% out.print("ffffffff"); %>
</body>
</html>
El efecto es el siguiente: La
razón por la que ccccc se emite primero es:El motor Tomcat obtiene el contenido del búfer de respuesta y luego al búfer de salida
2. objeto pageContext
El objeto Page y el objeto pageContext son dos objetos, preste atención a la diferencia
El objeto de contexto (objeto pageContext) de la página jsp es el siguiente:
pageContext es un objeto de dominio
Al igual que otros ámbitos, pageContext también tiene los siguientes tres métodos:
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)
pageContext puede acceder a datos de otros dominios especificados
setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)
Caso:
<body>
<%
//使用pageContext向request域存数据
request.setAttribute("name","zhangsan");
//将name =zhangsan,设置到reques的域中,该行代码与上句代码作用一样
pageContext.setAttribute("name","lisi",PageContext.REQUEST_SCOPE);
//使用pageContext向session域存数据
pageContext.setAttribute("name","wangwu",PageContext.SESSION_SCOPE);
//使用pageContext向application域存数据
pageContext.setAttribute("name","tianqi",PageContext.APPLICATION_SCOPE);
%>
</body>
El objeto pageContext tiene una función más poderosa que puede encontrar automáticamente Attribute
findAttribute(String name)
Obtenga los atributos del dominio pageContext, el dominio de solicitud, el dominio de sesión y el dominio de la aplicación por turnos. Después de obtenerlo en un dominio determinado, no mirará hacia atrás.
Caso:
body>
<%
//使用pageContext向request域存数据
request.setAttribute("name","zhangsan");
//将name =zhangsan 设置到reques的域中,该行代码与上句代码作用一样 pageContext.setAttribute("name","lisi",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name","wangwu",PageContext.SESSION_SCOPE);
pageContext.setAttribute("name","tianqi",PageContext.APPLICATION_SCOPE);
%>
<%=request.getAttribute("name")%>
//获得域中的属性
<%=request.getAttribute("name")%>>
//该方法域上面的request方法一样
<%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>
//从所有域中找数据,小到大中搜索域中的范围中的name
<%--从小到大 pageContext域,request域,session域,application域--%>
<%=pageContext.findAttribute("name")%>>
</body>
Aquí hay una comparación del tamaño de un dominio.
Resumen de los cuatro alcances:
page域
: El rango de páginas jsp actualrequest域
: Una solicitud, el reenvío múltiple también se considera una solicitud.session域
: Una sesión, la página se abre y la página se cierra.application域
: Toda la aplicación web
El objeto pageContext puede obtener otros 8 objetos implícitos
Caso:
<%
pageContext.getOut();
pageContext.getRequest();
pageContext.getResponse()
%>
Five. Jsp label (acción)
- La página contiene (inclusión dinámica):
<jsp:include page="被包含的页面"/>
- Solicitud de reenvío: la
<jsp:forward page="要转发的资源" />
dirección permanece sin cambios.
¿Cuál es la diferencia entre inclusión estática y dinámica?
- Inclusión estática:
<%@include file=”/”%>
- Inclusión dinámica: la inclusión
<jsp.include page =”被包含的页面”/>
estática consiste en unir dos páginas jsp en una sola. Sin embargo, la página dinámica consta de dos páginas separadas pero no unidas.
Caso:
hacer una inclusión dinámica
Paso 1: escribe la primera página
body>
<%--include1中包含include2--%>
<jsp:include page="include2.jsp"></jsp:include>
<h1>This is include1 page</h1>
</body>
Paso 2: escribe la segunda página
<body>
<h1>This is include2 page</h1>
</body>
En este momento, cuando visitamos la primera página, se incluye el contenido de la segunda página. En realidad, hay dos páginas.