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

被折叠的 条评论
为什么被折叠?



