JSP
1. JSP
1.1 JSP概述
全称:
Java Server Pages Java服务器页面,和Servlet一样,都是Sun公司提供的动态资源开发技术。兼容HTML,CSS,JavaScript,还可以运行Java代码
可以同时在设计完成前端页面,优化美化,情况下做Java后台逻辑代码实现。
1.2 为什么要用JSP
1. JSP目前在没有了解过前端解析数据方式情况下,和Java后台的融合性更好
2. JSP最终编译的结果就是一个Servlet程序
3. JSP兼容性还可以!!!性能还不错!!!
4. 可以让Servlet摆脱内嵌HTML页面的情况
5. JSP是一个动态资源,和HTML页面不一样。
1.3 JSP语法
1.3.1 JSP语法格式
JSP页面中可以包含任意的Java代码,变量,语句和方法
格式:
<% Java代码 %>
声明局部变量:
<% int i = 10; %>
声明全局变量:
<%! int i = 10; %>
输出变量:
<%=2 + 3%> 输出语句没有分号结尾
JSP注释【重点】
<%-- JSP注释 --> 安全,省流量
<!-- 网页注释 --> 不安全,耗流量
<%--
Created by IntelliJ IDEA.
User: MI
Date: 2020/4/3
Time: 10:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>01-第一个行JSP代码</title>
</head>
<body>
<%-- JSP注释 --%>
<!-- HTML注释 -->
<%
System.out.println("你好 JSP!!!");
%>
<%-- JSP前端输出 --%>
<%=2 + 3%>
<%-- 声明了一个变量 --%>
<%! int c = 10;%>
<%-- 前端页面输出 --%>
<h1><%=c%></h1>
<%-- 声明了一个方法 --%>
<%! public void show() {
System.out.println("骚磊 JSP");
}%>
<%-- 这里可以调用 --%>
<%show();%>
</body>
</html>
1.3.2 JSP指令
Page指令
JSP指令格式
<%@ page 属性名="属性值" 属性名="属性值"%>
需要了解的属性:
import
导包,和Java中操作一致,导入当前JSP页面所需的资源
contentType="text/html;charset=UTF-8"
设置页面的响应内容
language="java"
解析当前JSP页面使用的语言
pageEncoding="utf-8"
当前页面的编码集
buffer="8kb"
JSP页面的默认缓冲大小 8KB
session="true"
session默认开启,如果选择不开启session 属性值为false
isELIgnored="true"
JSP页面是否支持EL表达式,默认支持,不支持属性值为false
isErrorPage="false"
当前JSP页面是是否为错误页面,默认不是,需要需要设置为错误页面,属性值、
true
errorPage="url"
指定当前JSP页面发送错误之后,跳转到哪一个错误页面
include 指令
包含其他的JSP页面,可以是静态包含,也可以是动态包含
静态包含:
<%@ include file="XXX.jsp"%>
动态包含:
<jsp:include page="XXX.jsp"></jsp:include>
静态包含其他JSP页面。是将两个JSP页面编译时合并
动态包含是当前JSP页面运行到jsp:include时才会加载对应的JSP资源,并不会合并两个JSP页面
<%@ include file="header.jsp"%>
content 内容
<%@ include file="bottom.jsp"%>
taglib 指令
作用:
导入其他标签库,今天会降到JSTL表达式来替换Java代码
<%@ taglib uri="路径" prefix="c" %>
1.3.3 JSP动作
这里可以使用一部分的JSP标签来表示一定的Java代码
jsp:include 动态包含
jsp:forword 转发
jsp:param 请求设置参数
jsp:useBean 创建一个对象
jsp:setProperty 给指定的对象对应属性赋值
jsp:getProperty 从指定的对象对应属性取值
1.4 JSP内置对象【重点】
对象名 |
类型 |
说明 |
request |
javax.servlet.http.HttpServletRequest |
用户请求对象 |
response |
javax.servlet.http.HttpServletResponse |
服务器对应用户的请求 |
session |
javax.servlet.http.HttpSession |
Session会话控制对象 |
application |
javax.servlet.ServletContext |
整个项目的上下文对象 |
exception |
java.lang.Throwable |
异常,isErrorPage="true" |
page |
java.lang.Object==>this对象 |
JSP==> Servlet this对象 |
config |
javax.servlet.ServletConfig |
servlet配置对象 |
out |
javax.servlet.jsp.JspWriter |
类似于resp.getWriter |
pageContext |
javax.servlet.jsp.PageContext |
当前页面对象上下文 |
<%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 11:19 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java"%><html><head> <title>04-内置对象</title></head><body><% // 内置对象可以直接调用,PageContext页面上下文对象 pageContext.setAttribute("msg", "PageContext Message"); // pageContext可以通过方法呼气其他内置对象 pageContext.getException(); pageContext.getOut(); pageContext.getRequest(); pageContext.getResponse(); pageContext.getServletContext(); pageContext.getServletConfig(); pageContext.getPage(); pageContext.getSession();%><h1><%=pageContext.getAttribute("msg")%></h1><% // response 和 out response.getWriter().append("<h2>hello</h2>"); out.print("<h2>Out對象</h2>"); out.write("<h2>Out對象</h2>");%><% String name = request.getParameter("name"); System.out.println(name); application.setAttribute("info", "测试!!!");%></body></html>
1.5 域对象【重点】
域对象都可以操作一下三个方法 setAttribute(String name, Object value) Object getAttribute(String name); void removeAttribute(String name); 可以利用域对象的特征,设置一定的属性放入到域对象内在JSP中使用的四个域对象 pageContext request session applicationpageContext存在一定的特权,通过pageContext可以操作其他域对象 setAttribute(String name, Object value, int scope) Object getAttribute(String name, int scope); void removeAttribute(String name, int scope); scope是域对象标记,这里使用了一个常量域对象表示是一个常量,存在于PageContext类内 PageContext.PAGE_SCOPE; PageContext.REQUEST_SCOPE; PageContext.SESSION_SCOPE; PageContext.APPLICATION_SCOPE; DEFAULT_CAPACITY MAX_ARRAY_SIZE<%-- 请问这个msg是谁 EL表达式 数据的检索顺序是从 Page > Request > Session > Application --%><h1>${msg}</h1
2. EL表达式
2.1 EL表达式概述
表达式语言(Expression Language),或称EL表达式,简称EL,是Java中的一种特殊的通用编程语言,借鉴于JavaScript和XPath。主要作用是在Java Web应用程序嵌入到网页(如JSP)中,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
2.2 EL表达式的使用案例
<%-- JSP页面解析域对象中的类对象 --%><%@ page import="com.qfedu.a.Student" %><%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 14:37 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>01-el</title></head><body><% Student stu = new Student(1, "航海中路彭于晏", 16); // 存储当前Student对象到一个域对象中 session.setAttribute("stu", stu);%><table width="200px" align="center" border="1px"> <tr> <th>ID</th> <th>姓名</th> <th>年龄</th> </tr> <tr> <td>${stu.id}</td> <td>${stu.name}</td> <td>${stu.age}</td> </tr></table></body></html>
<%-- JSP页面解析域对象中存储的集合性质数据 --%><%@ page import="java.util.ArrayList" %><%@ page import="com.qfedu.a.Student" %><%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 14:42 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>02-el</title></head><body><% ArrayList<Student> list = new ArrayList<>(); list.add(new Student(1, "航海中路彭于晏", 16)); list.add(new Student(2, "骚磊", 16)); list.add(new Student(3, "骚杰", 60)); request.setAttribute("list", list); HashMap<String, String> map = new HashMap<>(); map.put("骚磊", "航海中路彭于晏"); map.put("老黑", "航海中路黑无常"); map.put("老付", "航海中路UI扛把子"); application.setAttribute("map", map);%><table width="400px" align="center" border="1px"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> <tr> <td>${list[0].id}</td> <td>${list[0].name}</td> <td>${list[0].age}</td> </tr> <tr> <td>${list[1].id}</td> <td>${list[1].name}</td> <td>${list[1].age}</td> </tr> <tr> <td>${list[2].id}</td> <td>${list[2].name}</td> <td>${list[2].age}</td> </tr></table><hr><h1>${map.骚磊}</h1><h1>${map.老黑}</h1><h1>${map.老付}</h1><hr><h1>${map['骚磊']}</h1><h1>${map['老黑']}</h1><h1>${map['老付']}</h1></body></html>
empty 判断和not empty判断可以判断null,同时可以判断集合形式数据中是否存在元素,可以用于在条件解析中使用
<%-- JSP EL表达式empty使用 --%><%@ page import="com.qfedu.a.Student" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" %><%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 14:58 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>04-el</title></head><body><% Student stu = null; request.setAttribute("stu", stu); request.setAttribute("list", new ArrayList<Student>()); List<Student> list1 = null; request.setAttribute("list1", list1);%><h3>${empty stu}</h3><%-- list.size() == 0 --%><h3>${empty list}</h3><h3>${empty list1}</h3></body></html>
3. JSTL
3.1 JSTL概述
JSP标准标签库(JSP Standard Tag Library)是Java EE网络应用程序开发平台的组成部分。它在JSP规范的基础上,扩充了一个JSP的标签库来完成一些通用任务。 使用时需要导包 jstl-impl.jar 在JSP页面中我们可以使用JSTL表示完成数据的判断,分支结构,循环在使用JSTL表达式之前,需要在JSP页面中加入: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3.2 JSTL使用
3.2.1c: if
<%@ page import="com.qfedu.a.Student" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" %><%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 15:16 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head> <title>Title</title></head><body><%-- 条件判断 --%><%-- c:if 判断标签中 test属性是必须的,不可以缺省的 test属性中的值是支持EL表达式 --%><c:if test="${10 > 5}"> <h3>条件成立</h3></c:if><% Student stu = new Student(1, "骚磊", 16); // 设置属性到Request域对象中 pageContext.setAttribute("stu", stu, PageContext.REQUEST_SCOPE); List<Student> list = new ArrayList<>(); list.add(new Student(1, "骚磊", 16)); list.add(new Student(2, "骚磊", 15)); list.add(new Student(3, "骚磊", 16)); pageContext.setAttribute("list", list, PageContext.REQUEST_SCOPE);%><c:if test="${stu.age > 10}"> <h2>我还是曾经那个少年</h2></c:if><c:if test="${stu.age < 10}"> <h2>我还是曾经那个骚年</h2></c:if><hr><c:if test="${list[0].age == 16}"> <h2>我好困啊~~~~~~</h2></c:if><c:if test="${list[1].age != 16}"> <h2>累了困了,喝乐虎</h2></c:if></body></html>
3.2.2 c:choose
<%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 15:30 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head> <title>02-jstl</title></head><body><% int score = 75; request.setAttribute("score", score);%><c:choose> <c:when test="${score >= 90}"> <h3>优秀</h3> </c:when> <c:when test="${score >= 80}"> <h3>良好</h3> </c:when> <c:when test="${score >= 70}"> <h3>中等</h3> </c:when> <c:when test="${score >= 60}"> <h3>及格</h3> </c:when> <c:when test="${score < 60}"> <h3>叫你爹穿着拖鞋过来</h3> </c:when></c:choose></body></html>
3.2.3 c:forEach
<%-- Created by IntelliJ IDEA. User: MI Date: 2020/4/3 Time: 15:54 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head> <title>03-jstl</title></head><body><%--c:foreach属性 var: 临时变量,循环结构中可以临时使用 begin:从何时开始,这里可以使用EL表达式 end:到何时结束,这里也可也使用EL表达式 step:间隔,默认为1--%><c:forEach var="num" begin="0" end="10"> ${num} </c:forEach><hr><table width="400px" align="center" border="1px"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> <%-- items:表示需要遍历的元素 --%> <c:forEach var="stu" items="${list}" begin="0" end="${list.size()}"> <tr> <td>${stu.id}</td> <td>${stu.name}</td> <td>${stu.age}</td> </tr> </c:forEach></table></body></html>
网友评论