欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSP

程序员文章站 2022-06-01 21:10:29
...

一、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
JSP
JSP
(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:表示当前遍历元素的索引(从零开始)

上一篇: JSP

下一篇: iOS 打包framework