JSP的基础与使用

深入理解JSP:基础、内置对象与JSTL
本文详细介绍了JSP的基础知识,包括JSP的定义、原理和出现的原因。讨论了JSP中嵌套Java代码的方式及不同类型的注释。接着讲解了JSP的9个内置对象,如request、response、session和application,以及它们的作用和常用方法。还涵盖了page指令、import和taglib指令。此外,文章还提到了EL表达式的使用和JSTL标签库,特别是核心标签库(core)和格式化标签(fmt)的应用。

1.JSP基础知识

1.1什么是JSP

JSP全名JAVA SERVER Pages,中文名叫java服务器页面,其根本就是一个简化的serverlet设计(servlet拥有一系列的方法处理HTTP请求)。就是在传统html页面中插入java程序段和JSP(tag)标记,从而形成jsp文件,文件形式*.jsp。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其它操作系统运行。

jsp将网页逻辑与网页设计的显示分离,支持可重用的基于设计的组件(在一个应用里面可以被重用和组合的 java 类)。

html和jsp区别:
*.html 静态页面(包含固定的页面内容)
*.jsp 动态页面(页面数据可以动态更新),支持嵌套java代码和html代码.


1.2JSP原理

当浏览器访问jsp页面时,服务器发现后缀名为.jsp,它会根据路径找到对应的.jsp文件,将其翻译成(名称_jsp.java)这样的文件,之后对这个java文件进行编译,产生.class文件,将class文件加载运行。

jsp翻译成java文件,是将jsp中所有的html代码通过流进行输出,最终翻译成class文件,被虚拟机加载,本质上还是servlet,之后再往浏览器响应,将jsp中的html代码再以流的方式传输给浏览器,所以在jsp中展示了html代码。


1.3JSP为什么出现

1.servlet展示信息不方便,引入了JSP
2.JSP本质上也是一个servlet
3.JSP就是在html页面中嵌入了java代码


1.4jsp中嵌套java代码的方式

声明标签:<%!要声明的变量或方法%>
表达式标签:<%=表达式%>
程序代码标签:<%java代码%>

<!--声明变量-->
<%! int i=50;%>
i=<%=i+100%>

<%--声明方法--%>
<%! public int add(int x,int y){
    int sum;
    sum=x+y;
    return sum;
}%>
sum=<%=add(20,30)%>

<!--java语句嵌入方法-->
<%
    System.out.println("嵌入的java语句");
%>

page指令:JSP中的page指令用于向容器提供与当前JSP页面相关的指令。可以在JSP页面的任何位置使用page指令进行编码。 按照惯例,page指令被编码在JSP页面的顶部

page指令的使用:
<%@ page 各种属性%>
在这里插入图片描述

1.5注释方式

html的注释方式在浏览器查看源码时,能看到注释内容。而jsp注释方式在查看源码时,看不到注释的内容。
在这里插入图片描述


2.jsp的内置对象以及使用

9个内置对象:request、response、session、application、out、 pagecontext、config、page、exception

2.1 request对象

主要用于:获取客户端的请求信息(头信息、系统信息、请求方式以及请求参数)
作用域:一次请求。request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。
常用方法:
1.获取客户端的信息
在这里插入图片描述
2.获取客户端的请求头
在这里插入图片描述
3.获取客户端请求的参数(客户端发送的数据)
在这里插入图片描述
4.做为域对象(Map容器)使用
存值:request.setAttribute(“re”,“request的值”);//取值时,是通过re进行取值的
取值:request=<%=request.getAttribute(“re”)%>//这是利用了上面的表达式标签进行取值展示的
移除:request.remove(“re”)//移除re


2.2response对象

作用:响应客户端的请求并向客户端输出信息
作用域:jsp页面
在这里插入图片描述
作为作用域使用时,使用方式和request一样

2.3session对象

是服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象

作用:保存每个用户的信息,跟踪用户操作状态。

存储方式:使用Map类保存数据,格式:key/value。
在这里插入图片描述
做为作用域使用时,使用方式与request一致。

session 用于管理会话生命周期的方法有 getLastAccessedTime()、getMaxInactiveInterval() 和 setMaxInactiveInterval(int interval)。

它的默认时限是30分钟。


2.4application对象

将信息保存到服务器中,直到服务器关闭。

application对象保存的信息会在整个应用中都有效。(服务器不关闭的情况下)

生命周期比session更长。
在这里插入图片描述

区别:
request:单次请求
session:浏览器访问期间(会话期间)
application:服务器启动期间,所存的数据可以跨浏览器

2.5out对象

作用:向web浏览器输出信息,并且管理应用服务器上的输出缓冲区。

要及时清除缓冲区的残余数据,数据输出完毕,要及时关闭输出流。
常用方法
在这里插入图片描述
输出时由于客户端是浏览器,因此可以使用html中的一些标签控制输出格式

    out.print("哈哈哈");//直接在浏览器页面输出
    out.print("<script>alert('嘻嘻嘻')</script>");//使用了alert方法,在浏览器弹窗输出

管理缓冲区:
默认情况下,服务端要输出到客户端的内容不直接写到客户端,而是先写到一个输出缓冲区中。使用 out 对象的 getBufferSize() 方法取得当前缓冲区的大小(单位是 KB),用 getRemaining() 方法取得当前使用后还剩余的缓冲区的大小(单位是 KB)。

JSP 只有在下面三种情况下,才会把缓冲区的内容输出到客户端。
1.该 JSP 网页已完成信息的输出。
2.输出缓冲区己满。
3.JSP 中调用了 out.flush() 或 response.flushBuffer()。

另外,调用 out 对象的 clear() 方法,可以清除缓冲区的内容,类似于重置响应流,以便重新开始操作。如果响应已经提交,则会产生 IOException 异常。此外,另一种方法 clearBuffer() 可以清除缓冲区“当前”内容,而且即使内容已经提交给客户端,也能够访问该方法。


2.6pageContex对象

作用:取得任何范围的参数,通过他获取jsp页面的out、request、reponse等对象
它的创建和初始化都是由容器来完成的,在JSP页面可以直接使用。
在这里插入图片描述

是一个作用域对象,做为作用域使用时,使用方法类似request。

2.7config对象

主要作用:取得服务器的配置信息。
使用方法:通过pageContext对象的getServletConfig()获取一个config对象
在这里插入图片描述

<!--将image路径转换成服务器端路径-->
uri=<%=config.getServletContext().getRealPath("/image")%>

2.8page对象(不常用)

page 对象是为了执行当前页面应答请求而设置的 Servlet 类的实体
在这里插入图片描述


2.9exception对象

作用:显示异常信息,只有在isErrorPage=“true”的页面才可以使用

jsp的作用域
在这里插入图片描述

3.jsp指令

JSP指令用来设置整个JSP页面的相关属性
在这里插入图片描述
使用方式:
<%@ 指令名称 指令属性%>

3.1page指令

当前页面的使用说明,一个jsp页面可以包含多个page
属性:
在这里插入图片描述
在这里插入图片描述
使用示例:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

3.2import指令

jsp可以通过include指令来包含其他文件,被包含的文件可以是JSP文件、html文件、或文本文件。包含的文件就好比是jsp文件的一部分,会被同时编译.
语法格式:
在这里插入图片描述

3.3taglib指令

作用:引入自定义标签
在这里插入图片描述

4.EL表达式

简化对象和变量的访问
语法格式:
${需要展示的信息的名字}

当未指定变量或者对象的范围时。
会依次从pagecontex --> request --> session --> application 依次取出对象内容。

获取指定作用域对象的内容:
在这里插入图片描述
语法:

${requestScope.key}

5.JSTL标签库

5.1什么是jstl

标准标签库,是一个jsp标签的集合,封装了jsp应用的通用核心功能。

标签按功能分类:核心标签/格式化标签 /sql标签/sml标签/JSTL函数。

作用:简化jsp代码的编写。

语法:在jsp页面引入
<%@taglib prefix=“页面使用名称(也就是下面表格的前缀)” uri=“功能范围的路径”%>

在这里插入图片描述

5.2常用标签库

1.核心标签(core)

最常用的标签库
引用方式:

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

核心标签分类:

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

1.1set标签

<c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中。

在这里插入图片描述

1.2out标签
在这里插入图片描述

1.3remove标签
在这里插入图片描述

<c:set var="x" value="18" scope="request"></c:set>
age=<c:out value="${x}"></c:out>
<h1>删除后</h1>
<c:remove var="x" scope="request"></c:remove>
age=<c:out value="${x}"></c:out>

1.4if和choose的使用

<h2>if</h2>
<c:set var="age" value="25" scope="request"></c:set>
<c:if test="${age>18}">
    成年
</c:if>
<h2>choose</h2>
<c:choose>
    <c:when test="${age<18 and age>0}">未成年</c:when>
    <c:when test="${age>18 and age<55}">成年人</c:when>
    <c:when test="${55<=age and age<120}">老年人</c:when>
    <c:otherwise>外星人</c:otherwise>
</c:choose>

1.5foreach标签
在这里插入图片描述

<%
    List list = new ArrayList();
    list.add("哈哈哈");
    list.add("嘻嘻嘻");
    request.setAttribute("alist",list);
%>
<c:forEach items="${alist}" var="va" varStatus="str">
    ${str.index}--->${va}<br>
</c:forEach>

运行结果
在这里插入图片描述

2.格式化标签(fmt)

引用标签库

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

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
使用示例

<%
    request.setAttribute("asd",new Date());
    request.setAttribute("mydate","2000-1-1 08:08:00");
    request.setAttribute("num",13.45675711);
%>
<%--将asd的内容以pattern的形式输出--%>
日期:<fmt:formatDate value="${asd}" pattern="yyyy-MM-dd"></fmt:formatDate><br>
<%--将mydate的日期格式为pattern的形式的,转换成日期对象--%>
日期2:<fmt:parseDate value="${mydate}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:parseDate><br>
<%--小数点后最少10位如果不够的话低位补领,整数部分最少几位的话,每三位用逗号分隔,不足的位数高位补领--%>
<fmt:formatNumber value="${num}"  maxFractionDigits="12" minFractionDigits="10"
minIntegerDigits="7"></fmt:formatNumber>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值