关于JSP的学习笔记整理


前言

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总结的笔记。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值