文章目录
JSP概念
JSP:Java Server Pages Java服务页面,其本质是一个简化的Servlet设计,运行在服务端的语言。
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
JSP编译
当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
编译的过程包括三个步骤:
- 解析JSP文件。
- 将JSP文件转为servlet。
- 编译servlet。
最终形成两个文件,名称分别是:原JSP文件名+_jsp.java和 原JSP文件名+_jsp.class
JSP 语法
脚本程序
语法:<% java代码 %>
<% int i = 2; %>
脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
JSP声明
语法:<%! 声明内容 %>
<%! int a; %>
一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,和Java语言类似,必须先声明这些变量和方法然后才能使用它们。
JSP表达式
语法:<%= 表达式 %>
<%= i %> //输出i的值
一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
由于表达式的值会被转化成String,所以可以在一个文本行中使用表达式而不用去管它是否是HTML标签。
表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
JSP注释
语法:<%-- 该部分注释在网页中不会被显示–%>
<!--Html注释--> //在编译成的java文件中可见,网页源码中能看到该注释
/*Java注释 */ //在编译成的java文件中可见,网页源码中不能看到该注释
<%--Jsp注释--%> //在编译成的java文件中不可见,网页源码中不能看到该注释
JSP指令
JSP指令用来设置与整个JSP页面相关的属性。
JSP包含三个指令:page、include、taglib
指令 | 描述 |
---|---|
<%@ page … %> | 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入标签库的定义,可以是自定义标签 |
page描述页面
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
常见属性
属性 | 描述 |
---|---|
contentType | 指定当前JSP页面的MIME类型和字符编码 告诉浏览器使用utf-8的形式解码 |
pageEncoding | 当前jsp页面的编码方式设置utf-8 |
language | 定义JSP页面所用的脚本语言,默认是Java |
session | 指定JSP页面是否使用session 默认为true |
errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
isErrorPage | 当前页面是否是一个错误页面,默认是false(是否可以使用exception内置对象) |
import | 导入要使用的Java类 |
include页面包含(静态)
<%--静态包含--%>
<%@include file="header_include.jsp"%>
<h1>这是静态包含body</h1>
<%@include file="foot_include.jsp"%>
file:页面名称
效果:
当jsp页面中有静态包含时,所有jsp页面会转换成一个java文件,再编译成一个class文件
taglib(表达式引入)
jstl表达式
- jstl:JavaServer Pages Standard Tag Library,jsp标椎标签库,是一个不断完善的开放源代码的jsp标签库,使用必须jar包,standard.jar 和 jstl.jar
- jstl不能单独使用,需要结合EL表达式。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- prefix:前缀,指的是为当前的这个标签起一个别名,一般为c
- uri:标签的路径,一般是http://java.sun.com/jsp/jstl/core
jstl核心标签库
- 页面判断
<c:if text = "判断的条件" var = "a" > <%--a是text里面的值--%>
执行的代码
</c:if>
- 循环
<c:forEach items="${list }" var="pro" varStatus="status">
<td>${status.count}</td>
<td>${pro.pname }</td>
<td>¥${pro.market_price }</td>
<td>¥${pro.shop_price}</td>
<td>${pro.pdate}</td>
<td>${pro.pdesc}</td>
</c:forEach>
- 循环固定次数,不需后天传值
<c:forEach begin="${page.begin }" end="${page.end }" step="1" var="i">
<c:if test="${page.pageNumber!=i }">
<li><a href="${pageContext.request.contextPath}/PageSelectServlet?pageNumber=${i}" style="color: #000;">${i }</a></li>
</c:if>
<c:if test="${page.pageNumber==i }">
<li><a style="color: coral">${i }</a></li>
</c:if>
</c:forEach>
- 定义变量
<c:set var = "值" value = "10"></c:set>
- choose标签的使用
<c:choose>
<c:when test="判断条件">执行代码</c:when>
<c:when test="判断条件">执行代码</c:when>
<c:when test="判断条件">执行代码</c:when>
<c:otherwise>
执行代码
</c:otherwise>
</c:choose>
JSP动态标签
跳转
<jsp:forward page="具体页面"></jsp:forward>
页面包含(动态)
<jsp:include page="页面"></jsp:include>
动态包含和指令包含的区别
- 动态包含:<jsp:include page=“页面”></jsp:include>;
指令包含(静态):<%@include file=“header_include.jsp”%> - 指令包含在编译前就将两个页面整合在一起,同一编译,动态标签包含的两个页面都会编译,在一个页面的jsp_service的方法中调用第二个jsp_service方法
- 如果被包含的标签中有动态信息,静态包含时获取不到的