jsp 介绍

一、简介

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>
                &nbsp;网络食品经营备案 京食药网食备202010048&nbsp;
                <a href="#">食品经营许可证</a>
                <br />
                违法和不良信息举报电话:171-5104-4404&nbsp;
                <a href="#">知识产权侵权投诉</a>
                &nbsp;本网站所列数据,除特殊说明,所有数据均出自我司实验室测试
            </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>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值