JSP介绍(二)

JSP介绍(二)

JSP介绍

什么是JSP

jsp (Java Server Page) 是Java EE规范中的Web组件,用来编写动态页面。JSP文件以 .jsp 为后缀,通常存放在 Eclipse 的工程目录中的 WebContent 目录下,与静态资源使用方式非常相似。内容构成:JSP 文件中的内容是 HTML 和 Java 代码的结合,静态部分使用 HTML 和文本,动态部分使用 Java 代码。

Web容器处理JSP文件请求的三个阶段

翻译阶段:

Web 服务器找到 xxx.jsp 文件,对其进行翻译,生成 xxx_jsp.java 文件。查看路径:工作空间 work\Catalina\localhost。

编译阶段:

服务器将 xxx_jsp.java 编译成类文件(.class),翻译和编译过程遵守 Servlet 规范。

执行阶段:

实例化并提供服务,服务器实例化类,调用类中的 _javaService 方法提供服务。

总结

与Servlet比较:使用 Servlet 生成动态网页比较繁琐,而使用 JSP 生成动态网页则比较便捷,因为其中的静态内容可以直接使用 HTML 生成。执行过程:JSP 的执行过程是:翻译 -> 编译 -> 实例化 -> 提供服务。本质:JSP 的本质是 Servlet,只不过是服务器将 JSP 文件进行了翻译和编译;可以说 JSP 也是 Java 的一个类。

JSP语法格式

Page指令

<%@ page 属性1="属性值1" 属性2="属性值2, 属性值3" ... 属性n="属性值n" %>

Include命令

<%@ include file="xxx.jsp" %>

小脚本

<%

// 这里可以写 Java 代码

%>

输出信息到页面

<%= 表达式 %>

声明

<%!

// 这里可以定义方法和变量

%>

注释

<%-- 注释内容 --%>

JSP内置对象及4种作用域

什么是内置对象

在 JSP 开发中会频繁使用到一些对象,如果每次在 JSP 页面中使用这些对象都要手动创建就会特别繁琐。为此,Sun 公司在设计 JSP 时,自动帮开发者创建好了这些对象,开发者只需要使用相应的对象调用相应的方法即可。这些系统创建好的对象就叫做内置对象。

9种内置对象

request对象

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

response对象

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

session对象

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

application对象

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

out对象

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

pageContext对象

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

config对象

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

page对象

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

exception对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面才可以被使用。在一般 JSP 页面中使用该对象无法编译 JSP 文件。exception 对象和 Java 的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有的异常情况,在 Java 程序中可以使用 try/catch 关键字来处理异常情况。在 JSP 页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送给 page 指令中设置的错误页面中,然后再错误页面中处理相应的 exception 对象。

4种作用域

ServletContext:application域HttpServletRequest:request域HttpSession:session域PageContext:page域

JSP与Servlet配合使用

JSP与Servlet的分工

Servlet 和 JSP 本质上是一个东西,但是写法上各有优势。Servlet 中写 Java 代码更方便,JSP 编写页面内容更方便。所以一般会由 Servlet 来负责代码调用,由 JSP 负责数据显示。因此需要将 Servlet 中处理的数据传递到 JSP 上。

跳转方式

响应重定向

响应重定向通过 response 对象调用,让浏览器向重定向的地址重新发送一次请求。response.sendRedirect("xxx.jsp");

注意:因为是重定向发送新的请求,会导致第一次请求的相关数据在第二次请求中读取不到。如果需要这些数据可以使用请求转发的跳转方式。

请求转发

请求转发通过 request 对象调用,把请求对象和响应对象与跳转地址共享。request.getRequestDispatcher("xxx.jsp").forward(request, response);

两者区别

转发(常用,效率高)

浏览器URL不变。服务器行为(服务器内部)。浏览器只做了一次请求访问。两次跳转之间传输的信息不会丢失。

重定向

浏览器URL的地址栏改变。客户端行为。浏览器做了至少两次访问请求。两次跳转之间传输的信息会丢失(request范围)。

EL表达式

EL表达式的作用

EL 即 Expression Language(表达式语言)。页面中嵌入 Java 代码容易造成结构混乱,不易阅读和调试。可以使用一些其他技术来提高可阅读性并对原始方法进行优化,如 EL 表达式和 JSTL 标签。EL 表达式的主要作用是从域对象或参数中取值并输出到页面中。

EL表达式特点

自动转换类型:EL 获取某个数据时可以自动转换类型,对于类型的限制更加宽松。使用简单:相较于在 JSP 页面中嵌套 Java 代码,EL 引用更简单。

EL语法

基本语法:${表达式}

EL表达式示例

在 request 域中存储对象request.setAttribute("testuser", myuser);

使用 EL 表达式获取域中 user 对象的 username 属性,并输出到页面${testuser.username}

EL操作符

“.”:获取对象的属性${news.title}

“[]”:获取集合中的对象${newList[0]}

EL表达式中允许使用运算符

数学运算符:+, -, *, /, %逻辑运算符:and, or, not比较运算符:==, !=, <, >, <=, >=其他运算符:empty(判断是否为空)

EL表达式隐式对象

EL 表达式包含一些隐式对象。

作用域访问对象

可以用来指定某个域中取值。默认从上到下取值。

pageScope:

<% pageContext.setAttribute("name", "a") %>

${pageScope.name}

requestScope:

<% request.setAttribute("name", "b") %>

${requestScope.name}

sessionScope:

<% session.setAttribute("name", "c") %>

${sessionScope.name}

applicationScope:

<% application.setAttribute("name", "d") %>

${applicationScope.name}

参数访问对象

可指定从 request 的参数部分取值。

param:

${param.xxx}

paramValues:

${paramValues.like[0]}

${paramValues.like[1]}

JSP配置对象

pageContext:

${pageContext}

JSTL标签

JSTL标签的作用

EL 表达式主要用于取值和输出功能,需配合 JSTL 标签来完成逻辑控制(条件判断、循环)。JSTL(JavaServer Page Standard Tag Library)是 JSP 基本标签库,主要用来替换页面中逻辑判断相关的代码,常与 EL 表达式配合使用。

JSTL使用

需要的 Jar 包:

下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/下载 jstl.jar 和 standard.jar 包。

在使用 JSTL 的页面中,需要加入 taglib 指令,导入核心标签库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL标签分类

通用标签

set:设置指定范围内的变量值

out:计算表达式并将结果输出显示

remove:删除指定范围内的变量

条件标签

if:条件判断语句

已登录

迭代标签

forEach:遍历集合中的元素时使用

${myentity.ename}

${myentity.eage}

${myentity.eaddr}

时间格式化标签

fmt:formatDate:显示格式化标签

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

JSTL其他标签库

相关推荐

详细步骤教你如何快速配对Beats耳机
365体育投注网站官网

详细步骤教你如何快速配对Beats耳机

📅 06-28 👁️ 6864
人民日报:如何分辨区分直销和传销?
365bet备用官网

人民日报:如何分辨区分直销和传销?

📅 07-13 👁️ 4651
臺灣的蝙蝠
beat365手机版中文

臺灣的蝙蝠

📅 07-02 👁️ 6455
京东E卡回收平台哪家强?2025年正规渠道价格对比+避坑指南
英雄联盟哪个英雄攻击好
beat365手机版中文

英雄联盟哪个英雄攻击好

📅 07-14 👁️ 1229
埃及队在世界杯历史上的比分纪录(揭秘埃及队在世界杯中的胜负情况及关键比赛)