一、JSP基础
1.1 jsp简述
JSP(全称Java Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
JSP所需maven依赖
<!-- 导入jsp坐标: 使用jsp需要导入jsp坐标-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
1.2 JSP指令标识
指令表示语法格式如下:
<%@ 指令名 属性1="属性值1" 属性2="属性值2".....%>
在JSP中包含3个指令: page 、 include 、taglib
1.page 指令 :
<%@ page import="java.util.*"%> //等同于导包
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> //创建jsp页面都带有这一行指令
- language属性: 设置jsp页面使用的语言
- contentType属性:设置页面的mime类型和字符编码
- pageEncoding: 设置页面的编码格式
2.include 指令
<%@ include file="被包含的文件路径"%>
在jsp页面中包含另一个jsp页面,在包含和被包含的文件中不能有相同名称的变量!
创建"top.jsp",用于放置网站的导航条
创建"copyright.jsp" 用于放置网站的版权信息
创建"index.jsp" 该页面包含"top.jsp"和"copyright.jsp"
运行如下图
3.taglib 指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
声明该页面所所使用的标签库,同时应用标签库。
1.3 JSP脚本标识
1.3.1 声明标识
<%! 声明变量或方法的代码 %>
1.3.2 JSP表达式
<%= 表达式%>
1.3.3 Scriptlet脚本程序
<% 代码或是脚本代码 %>
1.3.4 案例代码
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
//定义全局变量
int age = 19;
String name = "张三";
String sex = "男";
%>
<ul>
<li>时间:<%= new Date()%></li>
<li>年龄:<%= age%></li>
<li>姓名:<%= name%></li>
<li>性别:<%= sex%></li>
</ul>
<%
String name2 = "张三";
String name3 = "李四";
String name4 = "王五";
response.getWriter().print(name2);
response.getWriter().print(name3);
response.getWriter().print(name4);
%>
</body>
</html>
运行如下:
二、JSP内置对象
内置对象 | 输入和输出对象 | out | 用来向客户端浏览器输出信息的数据流 |
request | 客户端发送的请求信息 | ||
response | 服务器传回客户端的响应信息 | ||
作用域通信对象 | session | 为发送请求的客户端建立会话 | |
application | 保存整个应用程序的共享信息 | ||
pageContext | 保存当前JSP页面的共享信息 | ||
Servlet对象 | page | 代表JSP网页本身 | |
config | 读取初始化参数 | ||
错误对象 | exception | 获取运行时的异常 |
三、JSP标准动作
<jsp:useBean/> 在jsp页面上创建一个bean实列;
<jsp:useBean id="变量名(student)" class="指定一个完整的类名(com.fu.pojo.student)" scope="page|session|application|request"/>
scope: 作用域
默认作用域是page
page: bean只能在创建bean的页面存在
request :bean在用户对其发生请求时存在
session: bean一直存在于会话中,直到去终止或被删除为止
application: bean在整个应用程序均可使用
<jsp:setProperty/> 用于设置usebean中指定的属性值
<jsp:setProperty name="useBean的id" property="字段名" value="值"/>
<jsp:getProperty/> 用于获取usebean中指定的属性值
<jsp:getProperty name="useBean的id" property="字段名"/>
<jsp:forward/> 用于将用户的请求转发到一个HTML文件,JSP页面或Servlet中;
<jsp:forward page="url(index.jsp)"/> //url属性:指定目标资源;
<jsp:include> 允许包含动态文件和静态文件
<jsp:include page="url" flush="true"/> //默认是false,必须true
代码示范:
//bean如下:
package com.fu.pojo;
public class People {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//jsp如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--方法一--%>
<%--实例化People--%>
<jsp:useBean id="people" class="com.fu.pojo.People"/>
<%--用于设置usebean中指定的属性值 --%>
<%--<jsp:setProperty name="useBean的id" property="bean的属性名" value="值"/> --%>
<jsp:setProperty name="people" property="name" value="老三"/>
<jsp:setProperty name="people" property="age" value="19"/>
<jsp:setProperty name="people" property="sex" value="男"/>
<%--用于获取usebean中指定的属性值--%>
<%--<jsp:getProperty name="useBean的id" property="bean的属性名"/> --%>
<jsp:getProperty name="people" property="name"/>
<jsp:getProperty name="people" property="age"/>
<jsp:getProperty name="people" property="sex"/>
<%--转发 用于将用户的请求转发到一个HTML文件,JSP页面或Servlet中--%>
<jsp:forward page="f.jsp"> //转发到f.jsp
<jsp:param name="name" value="LiSi"/><br>
<jsp:param name="age" value="30"/><br>
<jsp:param name="sex" value="nan"/><br>
</jsp:forward>
</body>
</html>
//f.jsp如下
<%@ page import="java.util.Date" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//获取服务器传过来的参数
response.getWriter().print(request.getParameter("name"));
response.getWriter().print(request.getParameter("age"));
response.getWriter().print(request.getParameter("sex"));
%>
</body>
</html>
运行如下:
四、EL表达式
4.1 EL表达式的定义
表达式语言(Expression Language,EL)是一种简单的数据访问语言,基本的语法格式为“${表达式}”。当JSP 引擎在解析 JSP页面的过程中遇到“${表达式)”格式的字符序列时,将调用EL引擎解释并执行“{}”中的表达式。它具有以下3个特点:
(1)可以使用属性名方便地引用存储在各种域范围中的属性。
(2)可以使用${(JavaBean.property)的形式访问作用域中JavaBean对象的属性。
(3)可以使用一系列的隐含对象,如pageContext对象、request对象和session等,EL表达式可以通过这些隐含对象访问JSP页面中的各种信息。
4.2 使用EL访问变量
使用el表达式必须设置isELIgnored="false",因为jsp默认是禁用el表达式的;
<% String name="张三" %>
<h2>hello,${name}</h2> //输出张三
4.3 使用EL访问javaBean
//bean如下:
package com.fu.pojo;
public class People {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
//jsp如下:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--方法一--%>
<%--实例化People--%>
<jsp:useBean id="people" class="com.fu.pojo.People"/>
<%--用于设置usebean中指定的属性值--%>
<jsp:setProperty name="people" property="name" value="老三"/>
<jsp:setProperty name="people" property="age" value="19"/>
<jsp:setProperty name="people" property="sex" value="男"/>
<%--用于获取usebean中指定的属性值--%>
<jsp:getProperty name="people" property="name"/>
<jsp:getProperty name="people" property="age"/>
<jsp:getProperty name="people" property="sex"/>
<%--方法二--%>
<%--实例化People--%>
<%@ page import="com.fu.pojo.People" %>
<%
People people1 = new People();
people1.setName("老三");
people1.setAge(19);
people1.setSex("男");
response.getWriter().print(people1.getName()+"<br>");
response.getWriter().print(people1.getAge()+"<br>");
response.getWriter().print(people1.getSex()+"<br>");
%>
</body>
</html>
运行如下:
五、JSTL标签库
5.1 JSTL标签分类
各标签库的定义如下:
(1)核心标签库,代码如下.
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
(2)国际化与格式化标签库,代码如下:
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
(3)SQL标签库,代码如下。
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
(4)XML标签库,代码如下:
<%@taglib uri=”http://java.sun.com/jsp/jstl/xml" prefix="xml"%>
5.2 JSTL所需依赖
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
5.3 通用标签
1.<c:out> 计算表达式结果并将结果存储在当前的JSPWriter对象中
2.<c:set> 设置页面中的变量或对象属性值
3.<c:remove> 用于删除创建的变量
5.4 条件标签
1.<c:if>
2.<c:choose>
5.5 迭代标签
<c:forEach>
5.6 格式化标签
格式化数字: <fmt:formatNumber>
语法如下:
<fmt:formatNumber value="num"maxFractionDigits="maxDigits"
type="numberlcurrencylpercent"scope="pagelrequest/sessionlapplication />
value:指定被格式化的数字
maxFractionDigits:最大小数位
type:指定数字的表现形式(number(7.3),currency(¥7.3),percent(7.3%))
格式化日期: <fmt:formatDate>
<fmt:formatDate value="date" pattern="yyyy-MM-dd | yyyy年MM月dd日 | yyyy年MM月dd hh:mm:ss"/>
value: 指定被格式化的日期,可以引用EL
patter: 格式化样式,可以引用EL
5.7 案例代码
//jsp如下
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:set var="name" value="老三"/>
<c:set var="age" value="18"/>
<c:set var="score" value="90"/>
<h2>if测试---------------------------------</h2>
<c:if test="${age>10}" var="br">
<c:out value="恭喜你,成年啦!"/>
</c:if>
<c:out value="${br}"/>
<br>
<h2>choose测试---------------------------------</h2>
<c:choose>
<c:when test="${score>=90}">优秀!</c:when>
<c:when test="${score>=80}">良好!</c:when>
<c:when test="${score>=60}">及格!</c:when>
<c:otherwise>继续努力!</c:otherwise>
</c:choose>
<%
ArrayList<Object> obj = new ArrayList<Object>();
obj.add("张三");
obj.add("李四");
obj.add("王五");
request.setAttribute("list",obj);
%>
<br>
<h2>foreach测试---------------------------------</h2>
<c:forEach var="obj" items="${list}">
<c:out value="${obj}"/><br>
</c:forEach>
<br>
<h2>fmt:formatDate(格式化日期)测试---------------------------------</h2>
<%
Date date = new Date(); //创建日期对象
request.setAttribute("date",date);
%>
没有格式化前的日期: ${date}<br>
以yyyy-mm-dd形式格式化: <fmt:formatDate value="${date}" pattern="yyyy-mm-dd"/><br>
以yyyy-mm-dd hh:mm:ss形式格式化: <fmt:formatDate value="${date}" pattern="yyyy-mm-dd hh:mm:ss"/><br>
以yyyy年mm月dd日 hh时mm分秒形式格式化:<fmt:formatDate value="${date}" pattern="yyyy年mm月dd日 hh时mm分ss秒"/><br>
</body>
</html>
运行结果如下