jsp 简介
1.jsp简介
jsp的全称是 java server pages .就是java的服务器页面.
2.jsp工作原理
2.1 工作原理
-
第一次访问jsp时,服务器将jsp先翻译成xxx.java文件 , 再编译成xxx.classs文件
-
以后再访问时:
- 如果jsp文件修改 : 再次翻译&编译
- 如jsp文件未修改 : 不会翻译&编译
2.2 jsp本质是Servlet
Class xxx_jsp : org.apache.jasper.runtime.HttpJspBase : HttpServlet
3.jsp基本语法
-
指令 : 语法格式:<%@ page 属性=属性值 属性2=属性值2 %>
-
模板元素 : html css js 等
-
脚本片段 [小脚本]
-
语法:<%@ 指令名 属性=属性值 属性2=属性值2 %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
作用 : 在_jspService() 方法中 , 书写java代码
-
-
表达式
- 语法 : <%=%>
- 作用 : 将数据显示到页面中
-
声明
- 语法 : <%! %>
- 作用 : 书写java代码
-
注释:
- java
- 单行注释 : //
- 多行注释 : /**/
- html
- java
4.jsp常用指令
4.1 page指令
-
语法格式 :
-
属性
-
contentType : 与response.setContextType() 作用一致 .
-
language : 设置jsp中支持语言 , 有且只有java
-
import : 导包
-
errorpage : 如果出现异常, 跳转的目标路径
-
isErrorPage : 设置当前页面是否为处理异常页面,默认值 : false .
设置true 包含exception内置对象 .
-
4.2 include指令
-
语法格式 : <%@ include file=“设置被包含文件路径”%>
-
作用 : 静态包含指定文件
-
特点 : 被包含的文件, 不会被翻译编译 [先包含, 再翻译]
-
使用场景:在jsp中的静态资源较多时使用。【少量java代码】
5.jsp的动态标签
语法格式:<jsp:xxx></jsp:xxx>
5.1 动态包含
- 语法 : <jsp:include page=“设置被包含文件的路径”></jsp:include>
- 作用:动态包含指定文件
- 特点:被包含的文件,同时会被翻译&编译【先翻译,再包含】
- 使用场景: 在jsp中的java代码较多时使用 [静态资源少]
5.2转发
-
语法 :<jsp:forward page=“设置请求转发路径”></jsp:forward>
-
代码 :
<h3>转发</h3> <jsp:forward page="index.jsp"> <jsp:param name="stuname" value="xiaobai"/> </jsp:forward>
-
注意 : 使用jsp动态标签中转发时 , 如需参数直接添加<jsp:param xxx>中.
<jsp:forward page=“index.jsp”></jsp:forward> 中间不允许添加任何数据
6.jsp九大隐式对象[隐式对象|内置对象] - 面试题
隐式对象 : 在jsp中无需我们程序员手动创建,就可以直接使用的对象,称之为隐式对象。
jsp共有9个内置对象 , 但默认只有8个内置对象 [exception对对象需在page指令中设置isErrorPage=“true”,才可显示.]
- pageContext
- 类型 : javax.servlet.jsp.PageContext
- 作用 : 域对象【页面域】
- 在Servlet中获取方式:无
- request
- 类型 : javax.servlet.http.HttpServletRequest
- 概述 : 获取请求参数 获取URL信息 获取请求头信息 转发【路径跳转】 域对象
- 作用:
- 在Servlet中获取方式:在doGet()或doPost()中直接使用
- session
- 类型 :类型:javax.servlet.http.HttpSession
- 作用 : 域对象【会话域】
- 在Servlet中获取方式:request.getSession();
- application
- 类型 : javax.servlet.ServletContext
- 概述 :
- 作用 :
- 在Servlet中获取方式:在doGet()或doPost()中,调用getServletContext()方法获取。
- page :
- 类型:java.lang.Object
- 概述&作用:this
- response
- 类型:javax.servlet.http.HttpServletResponse
- 概述&作用:详情请查阅Servlet笔记
- out
- 类型:javax.servlet.jsp.JspWriter
- 作用:与Servlet中PrintWriter作用类似,将数据显示到页面。【JspWriter与PrintWriter是兄弟关系,都继承java.io.Writer】
- config
- 类型:javax.servlet.ServletConfig
- 概述&作用:详情请查阅Servlet笔记
- exception
- 类型: java.lang.Throwable
- 作用:捕获处理异常
7.jsp四大域对象
7.1 域对象
-
程序中域:将数据共享【传递】
-
pageContext [页面域]
- 有效范围 : 当前页面有效 .
-
request [请求域]
- 有效范围 : 当前请求有效
- 当前请求 : 只要路径跳转 , 一般就不在当前请求[如果使用转发时 , 依然在当前请求]
-
session【会话域】
-
有效范围 : 当前会话有效
-
当前会话 : 与浏览器有关, [与服务器无关 ] 只要浏览器不关闭 & 不更换就在当前会话
浏览器关闭或更换就不在当前会话。
-
-
application 【web域|上下文域】
- 有效范围 : 当前web应用中有效
- 只要web应用未卸载【未关闭】就有效。
-
7.2 代码
-
域对象共性:所有域对象都有一套通用方法【底层维护一个Map<String,Object>】
- 设置属性到域中:void setAttribute(String key , Object value);
- 从域中获取指定的属性:Object getAttribute(String key);
- 移除域中指定属性:void removeAttribute(String key);
-
<body> <% // 设置page域 pageContext.setAttribute("key","pageContext - value"); // 设置request域 request.setAttribute("key"," request - value"); // 设置session域 session.setAttribute("key", "session- value "); // 设置application域 application.setAttribute("key","application - value"); %> <%--测试当前页面作用域 --%> <%-- pageContext : <%=pageContext.getAttribute("key")%> <br> request : <%=request.getAttribute("key")%> <br> session : <%=session.getAttribute("key")%> <br> application : <%=application.getAttribute("key")%> <br>--%> <%--测试request--%> <% // 请求转发 request 有效 request.getRequestDispatcher("/context2.jsp").forward(request,response); // 重定向 request 无效 response.sendRedirect(request.getContextPath() + "/context2.jsp"); %> </body>