JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
JSP里面既可以写Java代码,也可以写HTML标签,JSP = Java + HTML
JSP 和 Servlet 是本质相同的技术。当一个 JSP 文件第一次被请求时,JSP 引擎会将该 JSP编译成一个 Servlet,并执行这个 Servlet。
如果 JSP 文件被修改了,那么 JSP 引擎会重新编译这个 JSP。
JSP 引擎对 JSP 编译时会生成两个文件分别是.java
的源文件以及编译后的.class
文件,并放到Tomcat/work/Catalina
下对应的虚拟主机目录(例如localhost)中的 org/apache/jsp
目录中。两个文件的名称会使用 JSP 的名称加_jsp
表示。如:index_jsp.java
、index_jsp.class
。
.class
字节码文件部署到容器中WEB-INF/classes
目录中out.write()
方法中;而在Servlet中我们需要自己通过对字符流、输出流的操作生成响应的页面一下三个标签中间都可以写java代码,只是当JSP编译为.java
文件后,代码存在的位置不同
<%! 代码 %>
(声明标签):声明成员变量和成员方法,中间的内容会出现在编译后的Servlet的Class的{}
中<% 代码 %>
(脚本标签):会出现在service方法体的内部。<%= 代码 %>
(赋值标签):标签中的内容会出现在out.printf()
方法的参数中,会输出到页面上。<%@指令名称 属性名1=属性值1 属性名2=属性值2 %>
page
:主要是用来对jsp进行配置contentType
:是jsp翻译成servlet之后,所设置响应头,该响应头是指服务器告诉浏览器相应数据的类型和编码是什么。pageEncoding
:是指jsp翻译sevlet的时候,所使用的编码import
:导入包errorPage
:如果该jsp页面出现了错误,会跳转到指定的错误页面isErrorPage
:默认值为false,如果为false,那该jsp翻译成的servlet里面就没有exception对象;如果为true,那该jsp翻译成的servlet里面就会自动生成一个exception对象。include
:可以用来包含其他的页面
<%@include file="其他的页面"%>
,会将两个页面合并成一个,生成servlet<jsp:include page="demo4.jsp"/>
,每一个页面都会生成各自的servlet<!-- abc -->
<%-- abc --%>
内置对象:不能自己创建,直接在JSP页面中使用实例名称调用即可
实例的名称 | Java类型 | 作用 |
---|---|---|
pageContext | PageContext | 四大域对象之一,代表的范围是当前jsp页面,可以实现数据的共享 |
session | HttpSession | 四大域对象之一,代表的范围是一次会话,可以实现数据的共享 |
request | HttpServletRequest | 四大域对象之一,代表的范围是一次请求,可以实现数据的共享 |
application | ServletContext | 四大域对象之一,代表的范围是整个项目,可以实现数据的共享 |
response | HttpServletResponse | 响应对象,可以用来设置响应头,响应状态码,可以实现重定向 |
config | ServletConfig | servlet的配置对象,可以配置一些信息 |
out | JspWriter | 输出流,向页面写东西。和PrintWrite的功能类似 |
page | Object | 是指jsp编译成servlet的servlet对象 |
exception | Throwable | 异常对象,可以打印一些异常信息 |
**EL(Expression Language)**表达式语言。 目的:为了替换Java代码,使JSP写起来更加简单,简化取值过程
El表达式的格式:${表达式}
注意,如果使用Tomcat作为部署容器,Tomcat已经集成了EL,而JSP在构建阶段(mvn clean package)是不会被编译的,所以使用Tomcat作为部署容器时,不需要加入EL表达式的依赖
格式:${运算符}
算术运算符:+
、-
、*
、/
逻辑运算符:&&(and)
、||(or)
、!(not)
比较运算符:>
、<
、>=
、<=
、==
空运算符:empty
判断数组、字符串、集合的内容,是否为空,是否为null,长度为是否0
//判断是否为空
${empty xxx}
//判断是否不为空
${!empty xxx}
注意:如果我们想要在页面上显示的内容就是${1+1}
\${1+1}
isELIgnored="true"
忽略该页面中的所有的EL表达式注意:想要使用el表达式获取数据的话,只能从域对象中获取数据
${域名称.键名}
域名:
<%
String name = "jack";
request.setAttribute("name", name);
%>
${requestScope.name}
${键名}
<%
String name = "jack";
request.setAttribute("name", name);
%>
${name}
${对象名.对象属性名}
例如
<%
User user = new User();
user.setName("tom");
user.setAge(18);
request.setAttribute("user", user);
%>
${user.name}
${user.age }
${键名[索引]}
例子:List类
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
pageContext.setAttribute("list", list);
%>
${list[0] }
${list[1] }
${list[2] }
方法一:${域中的键名.map中键名}
方法二:${键名['map中键名']}
例子:Map类
<%
Map map = new HashMap();
map.put("name", "jerry");
map.put("age", 18);
application.setAttribute("map", map);
%>
${map.name }
${map.age }
${map['name'] }
${map['age'] }
el表达式里面有很多隐式对象,但是我们只需要知道一个即可:pageContext
pageContext隐式对象可以获取到其他的8个内置对象
格式:${pageContext.request.contextPath}
JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度
1、提供一组标准标签
2、可用于编写动态JSP页面
引入JSTL依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
在JSP页面添加taglib
指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
格式:
<c:if test=""></c:if>
1、test为判断部分,需要写成el表达式
格式:
<c:choose>
<c:when test="情况一">
情况一处理
</c:when>
<c:when test="情况二">
情况二处理
</c:when>
<c:otherwise>
其他情况处理
</c:otherwise>
</c:choose>
格式:
<c:forEach
begin="1"
end="5"
step="1"
var="a"
varStatus="s"
items="">
${a }...${s.index }...${s.count }
</c:forEach>
1. begin:起始索引
2. end:结束索引
3. step:步数(每次循环索引加几)
4. items:要遍历的容器对象
5. var:容器中的元素
6. varStatus:容器中的元素对象对应的状态,该状态有两个参数,index:索引;count:是第几个