JSP

一、JSP概述

1、什么是JSP
(1)Servlet和JSP都是由SUN公司提供的动态Web资源开发技术。
(2)JSP看起来像HTML,但是JSP中可以书写java代码,可以展示动态的数据。
(3)JSP本质上就是Servlet!!

2、JSP的由来
(1)Servlet本质上是一段java程序,适合来处理用户提交的请求,但是处理的结果,不适合Servlet向外输出(Servlet不适合向外输出一个完整的页面)。
(2)HTML是页面的开发技术,也是作为页面来展示数据,但是HTML本质上是一个文档,不能展示动态的数据。
(3)JSP也是页面的开发技术,也可以作为页面来展示数据,并且JSP中可以书写java代码,可以展示动态的数据。
(4)JSP的出现既解决了Servlet不适合向外输出完整页面的问题,也解决了HTML无法展示动态数据的问题。
(5)JSP既可以当做一个Servlet使用,也可以当做HTML使用。

3、验证JSP本质上是Servlet
这里写图片描述
这里写图片描述
(1)HTML执行过程:如果浏览器请求服务器,请求的是一个HTML文件,服务器会根据浏览器请求的资源路径,找到对应的HTML文件,将HTML文件(内容)响应给浏览器,让浏览器去解析,显示在窗口中。
(2)JSP执行过程:如果浏览器请求服务器,请求的是一个JSP文件,服务器会根据请求的资源路径找到对应的JSP,先将JSP翻译成一个Servlet程序(java文件),再翻译Servlet程序,最后执行Servlet程序,JSP中的所有的html代码都会通过Servlet程序原封不动的发送给浏览器。

二、JSP语法

1、模板元素(!)
(1)模板元素其实就是书写在JSP中的html代码,或者说,除了JSP特有的元素之外的其他内容都是模板元素。
(2)模板元素在饭以后的Servlet中,是直接被out.write原样输出到浏览器中。

2、JSP表达式
格式:<%= 常量/变量/表达式 %>
作用:计算表达式的值,再原样输出到当前位置。

    <h1>JSP的语法--表达式</h1>
    <%= "Hello JSP" %>

    <% String name = "王海涛"; %>
    <%= name %>

    <%= 123+345 %>

3、JSP片段
格式:<% 若干java语句 %>
作用:在翻译后的Servlet中,其中的java语句被直接复制粘贴到对应的位置执行!

<h1>JSP的语法--脚本片段</h1>
    <% for(int i=1;i<=5;i++){ %>
           Hello JSP~~~<br/>
    <%    } %>

4、JSP注释
格式:<%- - 注释的内容 - -%>
作用:
(1)将暂时不需要执行的代码注释掉。
(2)为代码添加注释(解释代码)。
注意:注释不能交叉嵌套

5、JSP指令(page指令)
JSP指令的作用是指挥 JSP解析引擎如和来解释JSP中的其他部分的内容

(1)page指令
作用:用来声明当前JSP的基本属性信息(JSP使用的编码、JSP所依赖的jar包)
属性:
<%@ page language=”java”%> - - 需要了解,指定当前JSP使用的开发语言是Java(当前只支持Java语言,所以可以省略不写)

<%@ page import=”“%> - - 需要熟悉,用来导入JSP在运行时所依赖的jar包,示例:

<%@ page import="java.util.Map"%>
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Date"%>

<%@ page errorPage=”“%>
- - 当前JSP在运行时如果抛出异常,将会跳转到errorPage所指定的友好错误提示页面
比如:在02.jsp添加errorPage属性如下:

<%@ page errorPage=”/err_page.jsp”%>
(1)当02.jsp页面在运行时抛出了异常,将会跳转到err_page.jsp这个友好错误提示页面,而不是给用户显示500错误页面。
(2)如果整个Web应用的Servlet和JSP都需要配置友好错误提示页面,可以在web.xml文件,为整个Web应用进行配置!!

<%@ page pageEncoding=”utf-8”%>
- - 只要保证pageEncoding属性指定的编码和jsp文件保存时使用的编码一致,就可以防止JSP文件的乱码问题!
(如果是在JSP中获取请求参数,这里仍然需要按照之前的方式来处理!)

(2)include指令
- - 用于JSP页面的包含效果
格式:<%@ include file=”” %>
示例: 创建三个JSP文件(分别为head.jsp,body.jsp,foot.jsp),在body.jsp中包含head.jsp和foot.jsp,最终实现将三个文件的内容一起响应给浏览器.
(一)创建三个JSP文件(分别为head.jsp,body.jsp,foot.jsp)
(二)分别实现三个JSP文件的内容如下:
a)_head.jsp

<%@ page language="java" pageEncoding="utf-8"%>
<h1 style="background-color:pink;height:200px;">
    网页的头部部分
</h1>

b)body.jsp

<%@ page language="java"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
    <head>
       <title></title>
    </head>
    <body>
       <!-- 引入头部 -->
       <%@include file="/include/_head.jsp" %>
       <h1 style="background-color:red;height:400px;">
           网页的主体部分
       </h1>      
       <!-- 引入尾部 -->
       <%@include file="/include/_foot.jsp" %>      
    </body>
</html>

c)_foot.jsp

<%@ page language="java"
    pageEncoding="utf-8"%>
<h1 style="background-color:cyan;height:100px;">
    网页的尾部部分
</h1>

(3)taglib指令
- - 用于引入JSTL标签库(c:set、c:if、c:forEach)
如果在当前JSP中需要使用JSTL标签库中的标签,使用之前必须通过taglib指令先引入JSTL标签库,否则将不会起作用。

三、JSP的九大隐式对象

1、九大隐式对象
在JSP中,不用事先声明,也不用获取,直接可以使用的九个对象

page          相当于Servlet中的this
request       HttpServletRequest
response      HttpServletResponse
application   ServletContext
config        ServletConfig
session       HttpSession
exception     Exception
out           等价于response.getWriter()
pageContext   PageContext

2、pageContext对象
(1)可以作为入口对象来获取其他八大隐式对象
pageContext.getRequest();
pageContext.getResponset();


(2)可以作为域对象使用
生命周期:
访问JSP开始时,创建pageContext对象
访问JSP结束时销毁pageContext对象

作用范围:仅仅当前JSP范围内
主要功能:在当前JSP范围实现资源的共享

四大域作用范围:ServletContext > Session > Request > pageContext

四、JSP标签技术

在JSP页面中写入大量的java代码会导致JSP页面中html代码和java代码混杂在一起,会造成页面非常的混乱,难于维护。

于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来代替JSP页面中java代码,并且推荐,JSP2.0以后不要在JSP页面中出现任何一行java代码。

1、EL表达式
主要用来(从域中)获取数据
基本结构: ${ 表达式 }
(1)获取常量/变量(必须存入域中)/表达式的值
(2)获取域中的数组或集合中的数据
(3)获取域中的Map集合中的数据

2、JSTL标签库
JSTL标签库是为JavaWeb开发人员提供的一套标准通用的标签库,JSTL标签库和EL配合使用取代JSP中大部分的Java代码.

在使用JSTL标签库提供的标签之前,必须在JSP中通过taglib指令引入JSTL标签库(如果缺少JSTL库相关的jar,还需要提前导入jar包)
(1)导入JSTL的jar包
(2)引入JSTL库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

其中常用的标签如下:
1、< c : set/> - - 往四大作用域中添加域属性,或者修改四大作用域中已有的属性
(1)往四大作用域中添加一个域属性
(2)修改四大作用域中已有的属性
如果重复添加相同的属性,值会发生覆盖,相当于修改.
(3)修改作用域中Map集合中的属性
.
c_set标签属性总结:

(1)var – 指定存入域中属性的名称
(2)value -- 指定存入域中属性的值
(3)scope – 指定将属性如此哪一个域中
(4)target – 指定修改域中的哪一个集合,比如:<c:set target="${map}"...
(5)property – 指定修改域中集合中的哪一个属性

2、< c: if > < c : if /> - - 构造if…else…语句

<c:if test="${3>5}">yes</c:if>
<c:if test="${!(3>5)}">no</c:if>

test属性用于指定判断的条件,注意:JSTL中没有提供else对应的标签

3、< c :forEach>< /c :forEach> – 对集合或数组等中元素进行循环遍历或者是执行指定次数的循环.
(1)遍历域中数组或集合中的元素
(2)遍历域中map集合中的元素
(3)打印1~100之间的奇数,并指定间隔符号
(4)打印1~100之间的奇数并指定间隔符号,并将位置是3的倍数的数值指定颜色为红色.
c_forEach标签属性总结:
(1)items: 指定需要遍历的集合或数组
(2)var: 指定用于接收遍历过程中的元素
(3)begin: 指定循环从哪儿开始
(4)end: 指定循环到哪儿结束
(5)step: 指定循环时的步长, 默认值是1
(6)varStatus=”status” 返回一个表示循环状态的对象,该对象还具有如下属性:
a)count:表示当前遍历的元素是第几个 b)first:表示当前遍历的元素是否为第一个
c)last:表示当前遍历的元素是否为最后一个 d)index:表示当前遍历元素的索引(从零开始)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值