当前位置 : 主页 > 编程语言 > java >

【JavaEE 基础】JSP 技术

来源:互联网 收集:自由互联 发布时间:2021-06-25
JSP 简介 JSP 全称是 Java Server Pages,它和 servle 技术一样,都是 SUN 公司定义的一种用于开发动态web资源的技术 JSP 这门技术的最大的特点在于,写 jsp 就像在写 html,但它相比 html 而言,

JSP 简介

JSP 全称是 Java Server Pages,它和 servle 技术一样,都是 SUN 公司定义的一种用于开发动态web资源的技术

JSP 这门技术的最大的特点在于,写 jsp 就像在写 html,但它相比 html 而言,html 只能为用户提供静态数据,而 Jsp 技术允许在页面中嵌套java代码,为用户提供动态数据

JSP 加载流程

当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个 JSP 文件内容(代码)是否已经被更新或者第一次被访问:

如果是,JSP 引擎将文件转化为 Servlet类(硬盘上),接着,这个 Servlet 类会被 JVM 编译成字节码文件并装载解释执行。剩下的就等同于 Servlet 的处理过程了;
如果不是,那么它的处理过程也等同于一个 Servlet 的处理过程,即直接由服务器检索出与之对应的 Servlet 实例来处理。

注:
JSP 在被客户端访问的时候才可能发生转换的,不是在服务器启动的时候转换成 Servlet 类的

JSP 元素

scriptlet: <%     %>
指令:      <%@    %>
表达式:    <%=    %>
声明:      <%!    %>
注释:      <%-- --%>

脚本片段

scriptlet 中写的是 Java 代码,每个语句必须以分号结尾

表达式

表达式中所写的,最终会作为方法 out.print() 参数,故不能加分号。默认不换行

指令

page指令、Include指令、taglib指令

// 使用 page 指令导入类时,使用逗号进行分割
<%@ page import="java.util.*,demo.*" language="java"  pageEncoding="UTF-8"%>

声明

需要声明成员变量(非局部变量)时候用

注:
所有的 scriptlet 和表达式都放会 service() 方法中,所以 scriptlet 中声明的变量总是局部变量。具体可查看 tomcat/work/../../jsp/ 文件夹下的 .java 文件

JSP 域和隐式对象

四大作用域

page 域指的是 pageContext.
request 域指的是 request HttpServletRequest
session 域指的是 session HTTPSession
application 域指的是 application ServletContext

1. 什么是域?
均内置了 map 集合,都有 setAttribute()getAttribute() 方法,均有固定的生命周期和作用域

2. 生命周期?

  • page:从 jsp 页面被执行开始,到 jsp 页面执行完毕结束
  • request:从用户请求开始,到服务器响应结束
  • session:用户打开浏览器访问,属于此次会话的 session 被创建,当 session 超时或被声明失效,此 session 生命周期结束
  • application:Web 应用加载的时候被创建,Web 应用被移除或服务器关闭时被销毁

九大隐式对象

内置对象名 所属类型 request Javax.servlet.ServletRequest response Javax.servlet.ServletResponse config javax.servlet.ServletConfig application javax.servle.ServletContext exception Javax.lang.Throwable session javax.servlet.http.HttpSession page Java.lang.Object(this) out Javax.servlet.jsp.JspWriter pageContext Javax.servlet.jsp.PageContext

request: 包含了有关浏览器请求的信息.通过该对象可以获得请求中的头信息、Cookie 和请求参数。

response: 作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,头信息等)

out: 用于将内容写入 JSP 页面实例的输出流中,提供了几个方法使你能用于向浏览器回送输出结果。

pageContext: 描述了当前JSP页面的运行环境。可以返回JSP页面的其他隐式对象及其属性的访问,另外,它还实现将控制权从当前页面传输至其他页面的方法。

自动在四个域中搜索数据:pageContext.findAttribute("name")
顺序: page域 -> request域 -> session域 -> context域(application域)

session: 会话对象存储有关此会话的信息,也可以将属性赋给一个会话,每个属性都有名称和值。会话对象主要用于存储和检索属性值。

application: 存储了运行 JSP 页面的 servlet 以及在同一应用程序中的任何 Web 组件的上下文信息。

page: 表示当前 JSP 页面的 servlet 实例

config: 该对象用于存取 servlet 实例的初始化参数

exception: 在某个页面抛出异常时,将转发至JSP错误页面,提供此对象是为了在JSP中处理错误。只有在错误页面中才可使用 <%@page isErrorPage="true"%>

问题

1. jsp 中循环出 List

<% for (String item : list) { %>
<ul> 
<li> <% out.println(item); %> </li>
</ul>
<% } %>

2. 当 JSP 和 JavaScript 代码共存时的加载流程
JSP 中的 Java 代码在服务器运行,JavaScript 代码在客户端浏览器运行。当在操作客户端时,服务器总是优先运行,所以当有 JavaScript 在页面加载时,访问域中数据时,不会出现 null 值状况,除非此键值对不存在

参考:
《Head First Servlets & JSP》
博客园某博客
博客园某博客

网友评论