文章目录

  • 前言
  • 一、JSP是什么?
  • 二、JSP基本语法和使用
    • 1.如何在JSP中嵌套Java代码呢
    • 2.JSP三大指令
    • 3.JSP九大内置对象
  • 三、JSP标签技术
    • 1.EL表达式
    • 2.JSTL标签库
  • 总结

前言

JSP是JavaWeb学习中非常重要的一节,下面是近期个人学习这一节做的一些笔记的整理


一、JSP是什么?

  JSP的全称是Java Server Pages,译为Java服务器页面,本质上是一个简化的Servlet设计。JSP是一种动态网页技术标准,类似ASP技术,它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(.jsp)。
  用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。

JSP的优点: 解决了servlet不适合向外响应一个完整的页面,又解决了html无法展示动态数据的问题。

JSP内部实现的原理: JSP在第一次访问时,会被翻译成一个servlet,对JSP访问后看到的页面其实就是翻译后的servlet。

二、JSP基本语法和使用

1.如何在JSP中嵌套Java代码呢

  • 声明标签:<%!变量或者方法声明%>
  • 表达式标签(在页面上显示的效果): <%= 表达式%>
  • 采用小脚本的方式: <% (java代码段)%>

一段代码如下(示例):

<% for(int i=0; i<3; i++){ %>我爱JSP~~~~~     <br/>
<% } %>

在JSP中,注释采用如下格式:

<% --(jsp注释,查看页面源码时看不到) --%>

2.JSP三大指令

page指令:
用来声明当前JSP页面的基本属性。下面是一些示例:
①<%@ page language=“java” %>
②<%@ page pageEncoding=“UTF-8”%>
③<%@ page session=“true”%>
④ <%@ page errorPage=“filepath”%>
说明:
①指定JSP所用的语言是Java
②通知JSP解析引擎使用指定的编码来翻译JSP,保证JSP文件保存时的编码和pageEncoding指定的编码保持一致能防止乱码的出现
③用来指定当前页面是否使用session,如果设置为true,则翻译过来的servlet中将会有对session对象的引用,于是可以直接在JSP中使用session隐式对象
④指定错误页面,如果出现异常则会跳转到指定错误提示页面。

page指令可以放在JSP页面的任何位置,一个页面可以包含多个page指令。格式都是 :
<%@ 指令名称 若干属性声明%>

include指令
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。统一格式如下:

<%@ include file=“文件相对 url 地址” %>

Taglib指令
用于导入tld标签库文件。JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。格式如下:

<%@ taglib uri=“uri” prefix="" %>

3.JSP九大内置对象

  JSP中一共预先定义了9个对象,可以在JSP页面直接使用这九大对象。它们分别是:
request、response、session、application、out、pagecontext、config、page、exception

request对象
  request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。

response对象
  response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。所属类型:HttpServletResponse。

session对象
  session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为“Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。所属类型:HttpSession

application对象
  application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”,所属类型:ServletContext

request、session和application的区别如下(对象作用的场景):
request:单次请求
session:浏览器访问期间(会话期间)
application:服务器启动期间,所存的数据可以跨浏览器

out 对象
  out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。等价于response.getWriter()待数据输出完毕后,要及时关闭输出流。

pageContext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。

config 对象
  config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

page 对象
  page 对象代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

exception 对象
  exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。

域对象的生命周期从大到小:
servetContext(application) > session > request > pageContext

三、JSP标签技术

  在JSP页面写入大量Java代码会导致JSP页面中的html代码和Java代码混杂,非常混乱;所以常使用标签来代替JSP页面的Java代码 ;

1.EL表达式

Expression Language 表达式语言,语法非常简单: ${表达式}。

特点:可以非常方便的获取数据,可以代替JSP页面中的JSP表达式。只能获取值,不能设置和遍历(使用时一定要先存值再取值)。

(示例):

<body>
<%int a=10;request.setAttribute("aa",a);
%>a的值是:${aa}<br></body>

集合的数据也可以获取:

<%Map map = new HashMap();map.put("name","张");request.setAttribute("map",map);
%>${map.name}

当表达式没有指定变量或者对象的范围时,那么容器会依次从pageContext—>request—>session—>application中查找该变量或对象,我们可以通过隐含对象获得指定作用域的值:

pageScope对象,用于获取当前页面的属性值
requestScope对象,用于获取请求范围的属性值
sessionScope对象,用于获取会话范围的属性值
applicationScope对象,用于获取程序范围的属性值

语法:
${requestScope.key}

2.JSTL标签库

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。根据JSTL标签所提供的功能,可以将其分为5个类别。核心标签 、格式化标签、 sql标签、 xml标签、 jstl函数

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

使用:
①.在JSP页面中引入<%@ taglib prefix=”页面使用的名称” uri=”功能范围的路径”%>
五类标签:

其中,核心标签是最常用的JSTL标签,常用核心标签分类如下:

表达式操作 out、set、remove、catch
流程控制 if、choose、when、otherwise
迭代操作forEach、forTokens
URL操作 import、param、url、redirect

Set标签

<c:set></c:set>

  • 添加一个域属性 scope后面指定属性存在哪一个域中
<c:set var="age" value="20" scope="request"/>
${age}
  • 修改已有属性,和上述代码语句一样,当属性已存在时会发生值覆盖

  • 修改域中map集合的属性

<%Map map = new HashMap();map.put("name","三毛");map.put("age","12");request.setAttribute("map",map);
%><c:set target="${map}" property="name" value="四毛"/>
<c:set target="${map}" property="age" value="15"/>
${map.name}
${map.age}

target 指定修改域中的哪一个集合,property 指定修改域中集合中的一个属性

if标签/choose标签

<c:if></c:if> <c:choose></c:choose>
实现判断或者分支判断

示例:

<c:set var = "month" value="11" scope="request"></c:set><h1>当月主打图书售卖主题</h1><c:choose><c:when test="${month>=1 &&month<4}">本月热售图书主题是:悬疑小说系列</c:when><c:when test="${month>=4 &&month<7}">本月热售图书主题是:侦探小说系列</c:when><c:when test="${month>=7 &&month<10}">本月热售图书主题是:信息科学类图书</c:when><c:when test="${month>=10 &&month<13}">本月热售图书主题是:考研复习丛书系列</c:when></c:choose>

forEach标签
<c:forEach></c:forEach>
循环遍历标签,对集合或数组等元素进行循环遍历或者执行指定次数的循环。几个常见的参数:

item: 指定需要遍历的数组或集合

var: 指定用于接收遍历过程中的元素

begin: 指定循环从哪里开始

end: 指定循环从哪里接收

step: 指定循环是的步长

遍历数组示例:

<%String[] name={"张三","李四","王五"};pageContext.setAttribute("names",name);
%><c:forEach item="${names}" var="i">${i}
</c:forEach>

总结

以上就是近期学习JSP总结的笔记。

关于JSP的学习笔记整理相关推荐

  1. 天猫整站SSM-分页-总结(做个人学习笔记整理用)

    天猫整站SSM-分页-herf(做个人学习笔记整理用) 先写Page.java package com.how2java.tmall.util;public class Page {private i ...

  2. 天猫整站SSM-分页-herf(做个人学习笔记整理用)

    天猫整站SSM-分页-(做个人学习笔记整理用) <li ><a href="?start=${page.start-page.count}" aria-label ...

  3. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作 #创建 #数据库的创建 USE mysql; CREATE DATABASE db_x; #删除 #删除数据库 DROP DA ...

  4. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  5. Deep Learning(深度学习)学习笔记整理系列之(二)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  6. python eval 入门_Python学习笔记整理3之输入输出、python eval函数

    Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网    浏览: 次    日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...

  7. Deep Learning(深度学习)学习笔记整理系列之(八)

     Deep Learning(深度学习)学习笔记整理系列之(八) 分类: Deep Learning 机器学习 Linux驱动2013-04-10 11:4257652人阅读评论(25)收藏举报 ...

  8. Deep Learning(深度学习)学习笔记整理系列三

    Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明 ...

  9. Deep Learning(深度学习)学习笔记整理(二)

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流 [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之: ...

最新文章

  1. android 菱形布局,Android 设计一个菱形形状的Imageview组件.
  2. Java 冒泡排序实现及口诀
  3. javascript --- [代码优化]将复杂的函数分解写异步请求数据的同步写法
  4. Angular2官网项目 (4)--路由
  5. vba cad 获取宏的路径_VBA批量创建文件目录及链接,建议收藏备用
  6. 作为一个算法攻城狮,你训练的算法翻车了该怎么办?
  7. sql 2008服务器内存一直居高不下_经验之谈:内存问题造成数据库性能异常怎么破?...
  8. .NET 调用外部exe程序,出现已停止工作
  9. 第十三届第一场蓝桥杯嵌入式主观题讲解
  10. linux系统 qq安装教程,在Linux环境下安装QQ教程
  11. Visual C++ 6.0 Processor Pack 编译xvidcore1.1.0
  12. 关于K2路由破解锐捷校园认证这件事(ZZU版)
  13. OpenWrt固件编译、软件包Ipk的编译详解
  14. 计算机基本应用Excel考题,excel考题_大学计算机基础期末考试试题word ppt excel的操作题_淘题吧...
  15. 一键开关机电路(不错)
  16. 485通讯问题及解决调试方案提炼
  17. 详解时间与空间复杂度
  18. win10怎么修复dns配置?DNS配置错误无法上网怎么解决
  19. 博客推广及搜索引擎优化
  20. 春招进行时,当代大学生求职行为大赏

热门文章

  1. matlab中randi函数替换randint函数
  2. Misc方向[简单] 凯撒大帝在培根里藏了什么
  3. 透过V8深入理解JavaScript的对象
  4. OpenCV保存视频图片相关
  5. 大津法优化之在飞卡智能车中的应用
  6. C语言位操作基础详解与实战
  7. (python) 输入三条边,判断是否可以成为三角形
  8. 皮尔逊波形相似度python代码
  9. 在jupyter中怎么打开.py文件
  10. 来香港科技大学的第二天