一、JSP是什么?
全称 Java Server Pages,服务器端负责页面展示的技术,可以嵌套java语言,和html,来生成动态页面,底层会被被转化为Servlet。
二、JSP语法
1.JSP模版元素
JSP页面中的HTML内容就是JSP模版元素。
JSP模版元素定义了网页的基本骨架,也就是定义了页面的结构和外观
2.JSP表达式
JSP脚本表达式是用来将程序数据输出到前端页面展示给用户的
JSP脚本表达式中的变量或表达式后面是没有分号的
比如:你好世界:<%="Hello World"%>
3.JSP脚本片段
JSP脚本片段,也就是在JSP页面中编写多行Java代码。
(1) JSP脚本片段中只能出现java代码
(2) JSP脚本片段中的Java代码是严格遵循Java语法的,比如每执行语句后面必须用分号结束。
语法:
<%
多行java代码
%>
案例:
1,在jsp脚本中定义一个时间变量,然后采用脚本表达式输出该变量
<%
Date date = new Date();
%>
<%=date%>
2,循环打印100行的表格
<%@ page import="java.util.Random" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <table> <tr> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>爱好</th> </tr> <% String[] sex = {"男", "女"}; int[] ages = {18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}; String[] hobbies = {"篮球", "足球", "购物"}; %> <% for (int i = 1; i < 100; i++) {%> <tr> <td><%=i%></td> <td><%=sex[new Random().nextInt(sex.length)]%></td> <td><%=ages[new Random().nextInt(ages.length)]%></td> <td><%=hobbies[new Random().nextInt(hobbies.length)]%></td> </tr> <% }%> </table> </body> </html>
4.JSP注释
JSP注释的格式:<%-- 注释信息 --%>
JSP引擎在将JSP页面翻译成Servlet程序时,忽略JSP页面中被注释的内容.
它与HTML中的注释不同之处:
(1)HTML注释:
HTML注释是标准的HTML注释语法,它被浏览器解析,但不会显示在最终呈现的页面上。
但是可以在客户端的源代码中查看到,即在浏览器的“查看源代码”功能中可以看到它们。
HTML注释的语法是:
<!-- 这是一个HTML注释 -->
(2)JSP注释:
JSP注释只在服务器端处理,不会发送到客户端,因此在浏览器的源代码中是不可见的。
这种注释主要用于注释JSP代码,不会影响页面的输出。
JSP注释的语法是:<%-- 这是一个JSP注释 --%>
(3)总结
JSP注释和HTML注释的主要区别在于: (a)JSP注释仅在服务器端处理,客户端不可见。 HTML注释在客户端源码中可见,可用于注释HTML结构,但不适用于JSP代码逻辑的注释。
(b)注释语法的不同
5.JSP指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范中共定义了三个指令:page指令 include指令 taglib指令
JSP指令的基本语法格式:
<%@ 指令 属性名="值" %>
举例:<%@ page contentType="text/html;charset=utf-8"%>
如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。
<%@ page contentType="text/html; charset=utf-8" import="java.util.Date"%>
也可以这样写
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.Date"%>
*page指令*
<%@ page
[ import="{package.class | package.*}, ..." ]
[ errorPage="relative_url" ]
[ isErrorPage="true | false" ]
[ contentType= "text/html ; charset=ISO-8859-1" ]
%>
*include指令*
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。
所以include指令引入通常也称之为静态引入。
语法:<%@ include file=“被包含页面的绝对URL或相对URL"%>
*taglib指令*
taglib指令用于在JSP页面中导入标签库
<%@ taglib uri="Oracle Java Technologies | Oracle" prefix="c" %>
6.JSP标签
jsp:include标签
用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。
它和includes指令引入的区别在于,标签引入是动态引入/逻辑引入,指令引入是静态引入/物理引入(在编译阶段(转换阶段)将一个资源的内容插入到包含它的页面中。这意味着包含的页面在第一次请求时会被编译成Servlet的一部分)
jsp:forward标签
用于把请求转发给另外一个资源。
语法: <jsp:forward page="relativeURL | <%=expression%>" />
page属性用于指定请求转发到的资源的相对路径
jsp:param标签
当使用jsp:include和jsp:forward标签引入或将请求转发给其它资源时,
可以使用jsp:param标签向这个资源传递参数。
语法1:
<jsp:include page="hhy.jsp | <%=expression%>">
<jsp:param name="参数名" value="参数值|<%= expression %>" />
语法2:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="参数名" value="参数值|<%= expression %>" />
7.JSP声明
JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,
而Jsp声明中的java代码被翻译到_jsp Service方法的外面。
也就是说会被翻译成全局/成员变量
语法:
<%!
java代码
%>
8.JSP内置对象
JSP有九大内置对象
request -- HttpServletRequest,请求域对象
response -- HttpServletResponse,响应域对象
config -- ServletConfig,配置文件对象
application -- ServletContext,全局域对象
exception(只有在page指令中具有属性isErrorPage="true"时才有效)-- Exception,当前页面的异常对象
session -- HttpSession,会话域对象
page -- 当前页面域对象
out -- JspWriter,输出流对象
pageContext -- PageContext,当前页面的上下文关系对象