JSP技术__JavaWeb笔记

一、JSP简介

1.JSP是什么

jsp 的全称是 java server pages,即Java 的服务器页面。因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情,开发成本和维护成本都极高,所以 sun 公司推出一种叫做 jsp 的动态页面技术帮助我们实现对页面的输出繁锁工作。jsp 的主要作用就是代替 Servlet 程序回传 html 页面的数据。

2.JSP的访问方式

jsp 页面和 html 页面一样,都是存放在 web 目录下。访问也跟访问 html 页面一样。

比如:
在 web 目录下有如下的文件:

a.html
访问地址是 http://ip:port/工程路径/a.html

b.jsp
访问地址是 http://ip:port/工程路径/b.jsp

3.JSP的本质

jsp其实是一个 Servlet 程序。

当我们第一次访问 jsp 页面的时候。Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且对它进行编译成为.class 字节码程序。jsp 翻译出来的 java 类,它间接了继
承了 HttpServlet 类。也就是说,翻译出来的是一个 Servlet 程序。

二、JSP语法

1.JSP基本元素

脚本元素

JSP声明

格式:

 <%! 
 	声明 java 代码 
 %>

作用:

可以给 jsp 翻译出来的 java 类定义属性和方法甚至是静态代码块。内部类等。

JSP表达式

格式:

<%=
	表达式
%>

作用:

在jsp 页面上输出数据。

特点:

  1. 所有的表达式脚本都会被翻译到_jspService() 方法中
  2. 表达式脚本都会被翻译成为 out.print()输出到页面上
  3. 由于表达式脚本翻译的内容都在_jspService() 方法中,所以_jspService()方法中的对象都可以直接使用。
  4. 表达式脚本中的表达式不能以分号结束。
JSP代码

格式:

<%
java 语句
%>

作用:

可以在 jsp 页面中,编写我们自己需要的功能(写的是 java 语句)

特点:

  1. 代码脚本翻译之后都在_jspService 方法中
  2. 代码脚本由于翻译到_jspService()方法中,所以在_jspService()方法中的现有对象都可以直接使用。
  3. 还可以由多个代码脚本块组合完成一个完整的 java 语句。
  4. 代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据

注释

1. Java注释
单行

//

多行

/*
*/

单行注释和多行注释能在翻译后的 java 源代码中看见。

2. HTML注释

<!-- html 注释 -->

html 注释会被翻译到 java 源代码中。在_jspService 方法里,以 out.writer 输出到客户端。

3. JSP注释(优先级最高)

<%-- jsp 注释 --%>

jsp 注释在翻译的时候会直接被忽略掉,jsp注释可以注掉jsp页面中所有代码。

2.JSP指令元素

include指令

使用include指令可以将其他的文件插入到此JSP页面中,类似于HTML中的farmeset框架,一个JSP页面可以包含多个文件,即可以多次使用include指令,后面还会讲到动作元素,其中也有一个include元素,需要注意区分。

语法格式:

<%@ include file="filename" %>

注意:

  • file的路径为相对路径
  • 插入页面时,两个页面的编码方式应该相同,不然会出现错误

page指令

page指令用来定义JSP页面的全局属性,描述页面信息。作用于整个文件及其包含的文件

语法格式:

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

一般定义在文件头部,且可以多次使用。

常用属性

属性作用
language 属性值只能是 java。 表示翻译的得到的是 java 语言
contentType 属性设置响应头 contentType 的内容
pageEncoding 属性设置当前 jsp 页面的编码
import 属性给当前 jsp 页面导入需要使用的类包
autoFlush 属性设置是否自动刷新 out 的缓冲区,默认为 true
buffer 属性设置 out 的缓冲区大小。默认为 8KB
errorPage 属性设置当前 jsp 发生错误后,需要跳转到哪个页面去显示错误信息
isErrorPage 属性设置当前 jsp 页面是否是错误页面。是的话,就可以使用 exception 异常对象
session 属性设置当前 jsp 页面是否获取 session 对象,默认为 true
extends 属性给服务器厂商预留的 jsp 默认翻译的 servlet 继承于什么类

注意:除import属性外,每个属性只能使用一次。

taglib指令

三、JSP九大内置对象

jsp 中的内置对象,是指 Tomcat 在翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象,叫内置对象。

jsp 中九大内置对象分别是:

对象作用
request 对象请求对象,可以获取请求信息
response 对象响应对象。可以设置响应信息
pageContext 对象当前页面上下文对象。可以在当前上下文保存属性信息
session 对象会话对象。可以获取会话信息。
exception 对象异常对象只有在 jsp 页面的 page 指令中设置 isErrorPage=“true” 的时候才会存在
application 对象ServletContext 对象实例,可以获取整个工程的一些信息。
config 对象ServletConfig 对象实例,可以获取 Servlet 的配置信息
out 对象输出流。
page 对象表示当前 Servlet 对象实例(无用,用它不如使用 this 对象)

1.JSP四大域对象

我们来看其中比较重要的几个对象。

对象范围
pageContext (PageContextImpl 类)当前 jsp 页面范围内有效
request (HttpServletRequest 类)一次请求内有效
session (HttpSession 类)一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
application (ServletContext 类)整个 web 工程范围内都有效(只要 web 工程不停止,数据都在)

四个域在使用的时候,优先顺序分别是,他们从小到大的范围的顺序。
pageContext ====>>> request ====>>> session

2.请求和响应

Request请求
在这里插入图片描述
浏览器发送的每一次请求都会创建一个Request对象。

request常用方法如下:
在这里插入图片描述

Response响应
在这里插入图片描述

服务器在响应客户端的每次请求时都会创建一个Response对象。

response常用方法如下:
在这里插入图片描述

3.Session和Cookie

Session

Session会话介绍
HTTP协议是无状态协议,每个HTTP请求都是独立的,服务器并不会保存是谁的请求,因此每次请求都是新的对象,在开发中,希望服务器能记录保存访问过的用户,那么Session能够记录访问记录。

Session会话机制
服务器会为每个客户创建一个Session对象,用于存放保存数据,在创建时,服务器会为每个对象生成一个唯一编号叫做SessionID,然后服务器会以Cookie的方式将SessionID存放在客户端,当再次访问服务器时,会将SessionID作为Cookie信息带到服务器,在通过该SessionID检索到session对象,进行访问。(服务器会先检查客户端的请求是否有这个SessionID,如果有则说明为此客户端创建过Session,服务器就按照SessionID检索出使用,如果检索不到则会新建一个Session)

Session会话生命周期
用户打开浏览器,访问服务器资源,再关闭浏览器,代表一次会话。

Session失效方式
1、设置失效时间,服务器会将超过时间并没有活动过的Session从服务器中删除,此时Session就会失效。
在web.xml文件中设置加入此代码:

<session-config>
	<session-timeout>以分钟计算</session-timeout>
</session-config>

2、调用session对象中invalidate()方法立即失效。
3、session可以自动失效。

Session的主要方法
在这里插入图片描述

Cookie

Cookie介绍
由Netscape公司发明,用于跟踪用户会话的方式,由服务器生成,可以实现客户端与服务器之间的数据传递,在由客户端保存到某个目录下的文本文件。

Cooke作用
对特定的对象进行追踪,统计网页的访问次数,时间,路径,保存登录信息,针对不同用户展示的不同内容进行个性化服务,不建议在Cookie上保存重要信息,它是共享的。

Cookie创建

Cookie cookie = new Cookie (String key,String value);
// Cookie类在Javax.servlet.http包中, key是Cookie名自己定义,value是key对应的值

Cookie读取
通过Response的addCookie()方法把Cookie写入,在用Request的getCookies()方法读取,要用遍历的方式进行读取,Cookie是通过键值对象进行保存的,遍历时要先调用Cookie对象的getName()方法对名称检查,直至找到要用的Cookie,在调用Cookie对象的getValue()方法获取与名称对应的值。

Cookie有效期
可以通过setMaxAge(int expiry)方法来设置Cookie的有效期,只有在有效时间内才可以读取,失效后会被客户端清除。

Cookie常用方法
在这里插入图片描述

Session和Cookie的区别
在这里插入图片描述

四、JSP的常用标签

1.JSP静态包含

示例说明:

<%@ include file=""%> 

file 属性指定你要包含的 jsp 页面的路径
地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ 映射到代码的 web 目录

静态包含的特点:
静态包含不会翻译被包含的 jsp 页面。
静态包含其实是把被包含的 jsp 页面的代码拷贝到包含的位置执行输出。

举个栗子

<%@ include file="/include/footer.jsp"%>

2.JSP动态包含

示例说明:

<jsp:include page=""></jsp:include>

page 属性是指定你要包含的 jsp 页面的路径
动态包含也可以像静态包含一样。把被包含的内容执行输出到包含位置

动态包含的特点:
1、动态包含会把包含的 jsp 页面也翻译成为 java 代码
2、动态包含底层代码使用如下代码去调用被包含的 jsp 页面执行输出。
JspRuntimeLibrary.include(request, response, "/include/footer.jsp", out, false);
3、动态包含,还可以传递参数

<jsp:include page="/include/footer.jsp">
<jsp:param name="username" value="bbj"/>
<jsp:param name="password" value="root"/>
</jsp:include>

3.静态包含和动态包含的区别

静态包含动态包含
是否生成 java 文件不生成生成
service 方法中的区别把包含的内容原封拷贝到 service 中JspRuntimeLibrary.include 方法
是否可以传递参数不能可以
编译次数1包含的文件 + 1
适用范围适用包含纯静态内容(CSS,HTML,JS),或没有非常耗时操作。或大量 java 代码的 jsp包含需要传递参数。含有大量 java 代码,运算,耗时很长的操作。

注意: 我们在工作中,几乎都是使用静态包含。jsp 页面中,基本上只有 html,css,js。还有一些简单的 EL,表达式脚本等输出语句。所以我们都使用静态包含。

4.转发

示例说明:

<%--
<jsp:forward page=""></jsp:forward> 是请求转发标签,它的功能就是请求转发
page 属性设置请求转发的路径
--%>

例如:

<jsp:forward page="/scope2.jsp"></jsp:forward>

转发和重定向的区别

转发:
request.getRequestDispatcher(“跳转页”).forward(request,response);
在服务器通过forward()将信息提交转发,浏览器地址栏信息地址不变,数据并不会随着转发丢失,只能在同一个项目中跳转,是一次请求。

重定向:
response.sendRedirect(“跳转页”);
在浏览器通过请求新的地址信息跳转,地址栏会显示跳转后的地址信息,数据会丢失,能跨域访问,是两次请求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值