一、简介
1.什么是jsp
JSP(JavaServer Pages)是一种动态网页开发技术,它结合了HTML、Java语言和JSP标签库,允许开发人员在HTML页面中加入Java代码,从而实现动态页面的生成。JSP的主要优点是可以将业务逻辑与视图分离,使得开发工作更加简单、明了和高效。与传统的静态网页相比,JSP可以更加灵活地响应客户端请求,能够根据不同的请求参数和条件生成不同的响应结果。
二、三大指令
1.page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
buffer:jsp输出流的缓存大小,默认是8kb。
errorPage: 当前页面出错后转向(转发)的页面。
2.include指令
<%@ include file="head.jsp" %>
静态包含: 先包含在执行
<%@ include file="/head.jsp" %>
Asdfadsfasdfasdfadsfadsf
<%@ include file="/foot.jsp" %>
静态包含只会形成一个servlet文件
并且可以布局
<table border=""><tr><td> <%@include file="/Version.jsp" %></td><td> adsfasf</td></tr></table>
动态包含:先执行再包含
(可以传递参数和被包含的页面可以生成servlet)
<jsp:include page="/head.jsp" >
<jsp:param value="mazheng" name="name"/>
</jsp:include>
在被包含的页面中取值:
<%=request.getParameter("name")%>
注意动态包含与静态包含的区别(在实际开发中能用静态,就不要用动态)
实例
准备好三个jsp页面使用静态包含呈现出一个页面
head.jsp
<%--
Created by IntelliJ IDEA.
User: Asus
Date: 2023/10/17
Time: 10:30
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>head</title>
</head>
<style>
html,body{margin: 0; padding: 0;font-size: 14px;}
ul,li{margin: 0;padding: 0;list-style: none;}
a{text-decoration: none;}
i{margin: 0;padding: 0;}
h1,h2,h3,h4,h5,h6{margin: 0;padding: 0;}
p{margin: 0;padding: 0;}
dl,dt,dd{margin: 0;padding: 0;}
.ox{width:100%;height: 40px;background: #333333;min-width: 1226px;}
.ox a{color:#b0b0b0; font-size: 12px;}
.ox span{color: #3c423f;}
.pox{width: 1226px;height: 40px;margin: 0 auto;line-height: 40px; display: flex;justify-content: space-between;}
.pox span{margin: 0 0.4px;}
.pox a:hover{color: white;}
.o ul{display: flex;justify-content: space-between;}
.ff ul{display: flex;justify-content: space-between;}
.xx{ width: 120px;height: 40px;background-color: #424242; text-align: center;margin-left: 30px; cursor: pointer; position: relative;}
.xx:hover{background: #fff;}
.xx:hover a{color: #ff6700;}
.shop{position: absolute;right: 0;top: 40px;width: 316px;height: 0px;line-height: 100px; box-shadow: 0 2px 10px rgba(0,0,0,0.15);z-index: 1;overflow: hidden; background-color:white; transition: all .5s ease;}
.xx:hover>.shop{height: 100px;}
.box{width: 1226px;height: 100px; display: flex; justify-content: space-between; margin: 0 auto;align-items: center;}
.diva{display: flex; justify-content:space-between;align-items: center;}
.diva ul{display: flex;justify-content: space-between;}
.diva ul li{height: 100px;line-height: 100px;}
.diva ul li a{color: black;display: block;padding: 0 20px;}
.diva ul li a:hover{color: #ff6700;}
.hl{transition: all .3s ease; width: 100%;height: 0; line-height: 210px; min-width: 1226px;position: absolute;top:130px;left: 0; background-color: #fff;z-index: 1;overflow:hidden;}
.diva li:hover .hl{height: 229px;border-top: 1px solid #e0e0e0;box-shadow: 0px 3px 4px rgba(0,0,0,.18);}
</style>
<body>
<div class="ox">
<div class="pox">
<div class="o">
<ul>
<li><a href="#">小米官网</a>
<span>|</span></li>
<li><a href="#">小米商城</a>
<span>|</span></li>
<li><a href="#">MIUI</a>
<span>|</span></li>
<li><a href="#">loT</a>
<span>|</span></li>
<li><a href="#">云服务</a>
<span>|</span></li>
<li><a href="#">天星数科</a>
<span>|</span></li>
<li><a href="#">有品</a>
<span>|</span></li>
<li><a href="#">小爱开放平台</a>
<span>|</span></li>
<li><a href="#">企业团购</a>
<span>|</span></li>
<li><a href="#">资质证照</a>
<span>|</span></li>
<li><a href="#">协议规则</a>
<span>|</span></li>
<li><a href="#">下载app</a>
<span>|</span></li>
<li><a href="#">Select Location</a></li>
</ul>
</div>
<div class="ff">
<ul>
<li><a href="#">登录</a>
<span>|</span></li>
<li><a href="#">注册</a>
<span>|</span></li>
<li><a href="#">消息通知</a></li>
<li class="xx"><a href="#"><i class="fa fa-shopping-cart"></i>购物车(0)</a>
<div class="shop">购物车中还没有商品,赶紧选购吧!</div>
</li>
</ul>
</div>
</div>
</div>
</body>
</html>
foot.jsp
<%--
Created by IntelliJ IDEA.
User: Asus
Date: 2023/10/17
Time: 10:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>foot</title>
</head>
<style>
.jiloo{width: 100%;min-width: 1226px; height: 205px; padding: 30px 0px; background: #fafafa;}
.yuin{width: 1226px; height: 109px;margin: 0 auto; position: relative;}
.logope{width: 56px; height: 56px; position: absolute; top: 0; left: 0; margin-right: 20px;}
.logope img{width: 56px; height: 56px;}
.buoxin{padding-left: 77px; color: #b0b0b0; line-height: 18px;}
.buoxin p{font-size: 12px;}
.nhjl a{color: #757575;}
.ooluu a{color: #b0b0b0;}
.buoxin a:hover{color: #ff6700;}
.mmyulo{height: 28px;padding-left: 77px; margin: 4px 0px 15px;}
.mmyulo a{display: inline-block;}
.mmyulo img{height: 28px;}
.loosue{height: 19px;background: url("img/slogan2020.png") no-repeat center; margin: 40px 0px 0px;}
</style>
<body>
<div class="jiloo">
<div class="yuin">
<div class="buoxin">
<p class="nhjl">
<a href="#">小米商城</a>
<span>|</span>
<a href="#">MIUI</a>
<span>|</span>
<a href="#">米家</a>
<span>|</span>
<a href="#">米聊</a>
<span>|</span>
<a href="#">多看</a>
<span>|</span>
<a href="#">游戏</a>
<span>|</span>
<a href="#">政企服务</a>
<span>|</span>
<a href="#">小米天猫店</a>
<span>|</span>
<a href="#">小米集团隐私政策</a>
<span>|</span>
<a href="#">小米公司儿童信息保护规则</a>
<span>|</span>
<a href="#">小米商城隐私政策</a>
<span>|</span>
<a href="#">小米商城用户协议</a>
<span>|</span>
<a href="#">问题反馈</a>
<span>|</span>
<a href="#">Select Location</a>
</p>
<p class="nhjl">
<a href="#">北京互联网法院法律服务工作站</a>
<span>|</span>
<a href="#">中国消费者协会</a>
<span>|</span>
<a href="#">北京消费者协会</a>
</p>
<p class="ooluu">
©
<a href="#">mi.com</a>
京ICP证110507号
<a href="#">京ICP备10046444号</a>
<a href="#">京公网安备11010802020134号</a>
<a href="#">京网文[2020]0276-042号</a>
<br />
<a href="#">(京)网械平台备字(2018)第00005号</a>
<a href="#">互联网药品信息服务资格证 (京)-非经营性-2014-0090</a>
<a href="#">营业执照</a>
<a href="#">医疗器械质量公告</a>
<br />
<a href="#">增值电信业务许可证</a>
网络食品经营备案 京食药网食备202010048
<a href="#">食品经营许可证</a>
<br />
违法和不良信息举报电话:171-5104-4404
<a href="#">知识产权侵权投诉</a>
本网站所列数据,除特殊说明,所有数据均出自我司实验室测试
</p>
</div>
<div class="loosue"></div>
</div>
</div>
</body>
</html>
middlle.jsp
<%--
Created by IntelliJ IDEA.
User: Asus
Date: 2023/10/17
Time: 10:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>middle</title>
</head>
<style>
#lone {
width: 100%;
height: 550px;
margin: 0 auto;
position: relative;
}
#newbox img {
width: 100%;
position: absolute;
}
/* #newbox img:first-child{z-index: 1;}*/
#olnew {
position: absolute;
right: 45%;
bottom: 20px;
transform: translateX(-50%);
}
#olnew li {
float: left;
width: 10px;
height: 10px;
border-radius: 50%;
border: 1px solid gray;
cursor: pointer;
box-shadow: 1px 1px;
margin: 0px 6px;
}
</style>
<body>
<%@ include file="head.jsp" %>
<div id="lone">
<div id="newbox">
<img src="img/轮播1.png" />
</div>
<ol id="olnew">
</ol>
</div>
<%@ include file="foot.jsp" %>
</body>
</html>
运行结果
3.taglib指令
作用:引入外部的标签
语法:<%@taglib uri = “标签名称空间” prefix=“前缀”%>
<%@ taglib uri=“http://java.sun.xom/jsp/jstl/core” prefix=“c”%>
三、九大内置对象
out隐式对象用于向客户端发送文本数据。
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
设置page指令的buffer属性关闭了out对象的缓存功能
out对象的缓冲区已满
整个JSP页面结束
out对象工作原理
out对象的注意事项
1.同时使用out和response.getwriter()输出数据,就会出现后者先输出。
2.不要出现字节流和字符流混用,jsp默认使用的是字符流,所以jsp中少用字节流,不然就要报混用异常!
pageContext对象
pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
pageContext获取其他对象
getException方法返回exception隐式对象
getPage方法返回page隐式对象
getRequest方法返回request隐式对象
getResponse方法返回response隐式对象
getServletConfig方法返回config隐式对象
getServletContext方法返回application隐式对象
getSession方法返回session隐式对象
getOut方法返回out隐式对象
1.四大域对象
域对象 | 作用范围 |
pageContext | 当前页面 |
request | 一次请求,客户端与服务器端一次交互 |
session | 一次会话,浏览器打开到关闭为一次会话 |
servletContext(application) | 整个app(当前工程) |
四、EL表达式
1.什么是EL表达式
EL(Expression Language)表达式是JSP 2.0规范中引入的一种简单的脚本语言,用于在JSP页面中计算表达式、访问JavaBean属性、Map对象、数组等等。EL表达式的语法基于 ${} 标签和 #{ } 标签,它可以调用JavaBean对象的属性和方法,以及访问JSP的隐式对象,如request、session、application、pageContext等。EL表达式也可以进行算术运算、关系运算、逻辑运算和条件运算等。EL表达式的主要作用是简化JSP页面的编写和维护,同时提高了JSP页面的可读性和可维护性。
2.获取数据
<%
pageContext.setAttribute("name","page");
request.setAttribute("name","request");
session.setAttribute("name","session");
application.setAttribute("name","application");
%>
${name}<!—会在四大域中从小到大的查询,找到第一个就终止查询-->
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name}
3.EL表达式自定义函数
3.1首先编写一个普通的java类,提供一个静态方法
package com.org.functions;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 获取当前时间
*/
public class FormatDate {
public static String formatDate(String date){
SimpleDateFormat sdf = null;
if ("/".equals(date)){
sdf = new SimpleDateFormat("yyyy/MM/dd");
}
if ("-".equals(date)){
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
if ("年".equals(date)){
sdf = new SimpleDateFormat("yyyy年MM月dd日");
}
return sdf.format(new Date());
}
}
3.2在JavaWeb应用的WEB-INF目录下建立一个扩展名是tld(taglib definition)的XML文件(参考Tomcat中的示例)
在myfn.tld文件中填入以下数据
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>myfn</short-name>
<uri>http://www.xinhua.cn/myfn</uri>
<function><!-- 定义函数 -->
<name>FormatDate</name>
<!--填写全类名-->
<function-class>com.org.functions.FormatDate</function-class>
<function-signature>java.lang.String formatDate(java.lang.String)</function-signature>
</function>
</taglib>
3.3在JSP中使用
<%@taglib prefix="myfn" uri="http://www.xinhua.cn/myfn" %>
${myfn:FormatDate("/")}
4.EL表达式保留字
所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误
五、JSTL标签库
1.什么是JSTL标签库
JSTL(JavaServer Pages Standard Tag Library)标签库是一组JSP标签,用于简化JSP页面中的Java代码编写,使开发者可以使用标签来完成常见的任务。
2.引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.标签库的使用
3.1异常处理
//处理产生的异常
<c:catch var="e">
<%
int a = 2/0;
%>
</c:catch>
${e }
3.2if判断
<c:if test="${1<2}" var="aa" scope="request">
30大于20
</c:if>
3.3switch分支语句
<%request.setAttribute("qq",2); %>
<c:choose>
<c:when test="${qq==1}">1</c:when>
<c:when test="${qq==2}">2</c:when>
<c:when test="${qq==3}">3</c:when>
<c:otherwise>都不是</c:otherwise>
</c:choose>
3.4循环语句
//输出数组
<%
String[] arr = {"haoren1","haoren2","haoren3","haoren4","haoren5"};
request.setAttribute("arr",arr);
%>
<c:forEach items="${arr}" var="arr1">
${arr1}
</c:forEach><br/>
<c:forEach items="${arr}" var="arr" step="2">
${arr}
</c:forEach><br>
<c:forEach items="${arr}" var="arr" begin="1" end="3">
${arr}
</c:forEach>
3.5重定向
<c:redirect url="index.jsp">
//携带参数
<c:param name="name" value="haoren"/>
<c:param name="psd" value="123456"/>
</c:redirect>