Jsp详解
文章目录
1. Jsp简介
Jsp,Java service page,Java动态网页技术。Jsp实际上也是Servlet。
- jsp基本结构
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
2. Jsp原理分析
在运行web程序的情况下,到tomcat中work\Catalina目录下,编译器已经将jsp文件解析成了Servlet。
3. Jsp语法
3.1 注释
第一种:HTML注释,在源码上可见
<!-- -->
第二种:Jsp注释,在源码上不可见
<%-- --%>
3.2 取值表达式
<%= 表达式 %>
(实际上就是调用输出流打印到页面上)
3.3 Java代码块
<%
java代码;
%>
3.4 Java代码块
<%!
Java代码
%>
4. Jsp三大指令
- Page : 页面指令
- Include : 包含指令
- Taglib:标签指令
4.1 Page指令
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
errorPage="/myerror.jsp" :如果当前页面出错,就跳转到对应的页面
isErrorPage="true" :这个页面是否是错误页面(当我们要在页面上直接使用exception的时候就可以加上它)
4.2 包含指令
<%@ include file="/include/a.jsp"%>
//这个页面将会把a的布局加进来,可以用来做页面的分割。
//注意:被引入的页面只需要Jsp文档声明即可,不需要body及html头等标签。
4.3 Tablib指令
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5. 九大内置对象
- pageContext(PageContext)
- request(HttpServletRequest)
- response(HttpServletResponse)
- session(HttpSession)
- exception(Throwable)
- application(ServletContext)
- config(ServletConfig)
- out(JspWriter)
- page(当前jsp对象)
6. 动作元素
<jsp:include page="/include2/a.jsp">
<%--jsp:include主要来做包含页面的功能--%>
- 动作元素与包含指令的区别:
静态包含先把页面包含进来,再翻译成java代码(只有一个文件)
动态包含先都编译成java代码,再将内容进行包含(有多个文件)
如果包含的是静态页面(html),那么使用静态包含
如果包含的是动态网页(jsp),那么使用动态包含
7. EL表达式
- 导包
el-api.jars
- mavne依赖
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
- 注意有时候EL表达式不显示
<!--在jsp声明上加上这个属性就可以解决了-->
<%@ isELIgnored="false"%>
7.1 EL表达式作用
EL表达式的作用就是从四大作用域对象中取值。
注意:EL表达式能够从四大作用域取值的前提条件是:取的值的对象必须是符合JavaBean规范的。
集合、数组等都是符合JavaBean规范的。
7.2 EL表达式语法
${key} //会到四个作用域里面去找到key对应的value
7.3 EL取值的顺序:
如果在四个作用域存入了相同名字的属性,此时EL表达式查询找的顺序为从小至大,先取小的范围的值,小的没有,再取到大的范围的值(pageContext<request<session<application
)。
${pageScope.msg} //取pageContext域对象中的msg属性值
${requestScope.msg} //取request域对象中的msg属性值
${sessionScope.msg} //取session域对象中的msg属性值
${applicationScope.msg} //取application域对象中的msg属性值
7.4 注意事项
- 带点的属性名的取值方式
//设置值
session.setAttribute("KEY.IN.SESSION", "你是session");
//取值
${sessionScope["KEY.IN.SESSION"]}
- 通过pageContext拿到上下文对象
${pageContext.request.contextPath}
- Tomcat7之后EL表达式可以调用方法
${user.getUsername()}//调用user对象的getUsername方法
7.5 其他运算符
EL算术运算符
${1+2} ${2-1} ${2*3} ${16/5}
EL 关系运算符
${16>5} 或${16 gt 5}
${16<5} 或${16 lt 5}
${16>=5} 或${16 ge 5}
${16<=5} 或${16 le 5}
${1=2} 或${1 eq 2}
${2!=1} 或 ${2 ne 1}
EL 逻辑运算符
${true && true} --结果 true
${true and true} 结果true
${true || false} ${true or false} 结果 true
${!true} 或 ${not true} 结果false
EL 其他运算符
${empty param.name} 如果param.name 为空 返回true 否则false
EL 三目运算符
${A?B:C} 比如 ${user.sex?”男”:”女”}
获取上下文路径:可用于页面中form表达提交时提交servlet请求前的上下文配置
${pageContext.request.contextPath}}
8. JSTL标准标签库
- 导包
jstl.jar
standard.jar
jsp-api.jar
- mavne依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
8.1 引用JSTL标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
8.2 JSTL常用标签
- if判断标签
<!--test属性中写条件,如果条件成立,cif包裹的内容就会显示在页面上,否则则不会显示。-->
<c:if test="${age>20}">
</c:if>
- choose选择标签
<c:choose>
<c:when test="${score>60 && score<80}">
B:中等水平。
</c:when>
<c:when test="${score>60}">
A:高等水平。
</c:when>
<c:otherwise>
C:垃圾水平。
</c:otherwise>
</c:choose>
- set/out存取值
<%--
var:声明变量名,
scope:存入的域对象,
value:var中变量对应的值。
--%>
<c:set var="name" scope="request" value="张三"/>
<c:out value="${name}" />
- url存取值标签
<%--
var:变量名,
value:servlet请求的地址。
param中name:参数的名称。
param中value:参数的值。
--%>
<c:url var="login" value="/login">
<c:param name="username" value="tom"/>
<c:param name="password" value="123"/>
</c:url>
<a href="${login}">login</a>
- foreach循环遍历标签
<c:forEach items="${list}" var="stu">
${stu.msg}
</c:forEach>
8.3 frameset标签
<html>
<frameset rows="20%,80%">
<!-- 头部页面 -->
<frame src="/xxx/top.jsp">
<!-- 中间区域 -->
<frameset cols="25%,75%">
<frame src="/xxx/menu.jsp">
<frame src="" name="frame_main">
</frameset>
</frameset>
</html>