Web基础了解版06-Jsp
Jsp
Jsp全称Java Server Pages,也就是在我们JavaWeb中的动态页面。
Jsp能够以HTML页面的方式呈现数据,是一个可以嵌入Java代码的HTML。
Jsp其本质就是一个Servlet。Servlet能做的事情JSP都能做。
Jsp必须运行在服务器中,不能直接使用浏览器打开。
Jsp是Web网页的技术标准,主要语法组成包括:指令,html模板元素,脚本片段(小脚本),表达式,声明,注释,后缀是*.jsp。
Jsp主要负责显示及获取数据
Jsp是动态页面,html是静态页面
| 动态页面 | 静态页面 | |
|---|---|---|
| 运行原理 | 通过服务器解析后,将数据在浏览器中显示 | 直接在浏览器中解析运行 | 
| 维护成本 | 较低,可以修改后台数据,进而影响页面中的数据 | 较高,必须将修改后的页面覆盖原页面 | 
| 数据库 | 可以连接数据库 | 不可连接数据库 | 
| 访问速度 | 较慢 | 较快 | 
| 书写代码 | 可以书写java代码 | 不能书写java代码 | 
注意事项
1、jsp页面是一个类似于html的一个页面。 jsp直接存放到WebContent目录下,和html一样访问jsp的时候,也和访问html一样
2、jsp的默认编码集是iso-8859-1,修改jsp的默认编码为UTF-8
JSP运行原理
- 实际上Tomcat在运行JSP时,并不是直接显示的我们所编写的JSP页面,而是将JSP页面转换成了一个Java类,它实际上就是一个Servlet。
- 让我们来找到那个目录,对于Eclipse来说是在:工作空间下,右键Tomcat服务器点击Browse Deployment Location...
- 在work目录下的...work\Catalina\localhost\day07_jsp\org\apache\jsp文件夹中
- 打开index_jsp.java文件查看里面的内容:发现,生成的类继承于HttpJspBase类。这是一个jsp文件生成Servlet程序要继承的基类!并且这个HttpJspBase类继承于HttpServlet类。
- 那么当我们访问 一个xxx.jsp文件后翻译成java文件的全名是 xxx_jsp.java文件。
- 在tomcat下的conf目录中的web.xml配置好了JSP的映射信息
以后在访问同一个jsp文件
- 如果文件未改变,不会被翻译和编译 
- 如果文件改变,会翻译和编译 
Jsp基本语法
指令
- 语法格式:<%@ %> 
- 三大指令:<%@ page %> ,<%@ include %> ,| <%@ taglib %>
模板元素
- html&css&js&jQuery等...
代码脚本片段
- 格式 :<%%> 
- 作用:在_jspService()方法中,书写java代码。 
<% int i = 0;%>
表达式
- 格式: <%=%> 
- 作用:将数据显示到页面,与out.print()作用相同。 
<%=i%>
声明
- 格式:<%!%> 
- 作用:在翻译后的class helloworld_jsp这个Servlet类中,书写java代码。 
注释
- java:单行注释://,多行注释:/**/ 
- html:<!-- --> 
- jsp:<%-- --%> 
| JSP注释 | Java注释 | HTML注释 | |
|---|---|---|---|
| JSP页面 | 可见 | 可见 | 可见 | 
| Java代码 | 不可见 | 可见 | 可见 | 
| 浏览器 | 不可见 | 不可见 | 可见 | 
Jsp常用指令
语法格式
- <%@ 指令名 属性=属性值 属性2=属性值2 ... %> 
page指令
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
属性
- language:语言,值为java且仅java。 
- contentType:与response.setContentType()作用一致,设置浏览器编码。 
- pageEncoding:设置Jsp页面的编码字符集。 
- import:导包 
- isErrorPage:设置当前页面是否为错误页面,默认值"false"。 - true:设置当前页面为错误页面,可以使用exception内置对象,捕获异常 。 
- false:设置当前页面不是错误页面,不可以使用exception内置对象,捕获异常 。 
 
- errorPage:设置当前页面错误时的跳转目标页面。错误需要在_jspService()中才可以捕获。 
include指令:静态包含
<%@include file="被包含文件的路径" %>
- 作用:将目标文件包含到当前文件中。 
- 特点:被包含的文件不会被翻译&编译。(先包含,再翻译) 
taglib指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 属性 - prefix用来指定前缀名,我们通过该名来使用JSTL。 
- uri相当于库的唯一标识,因为JSTL由多个不同的库组成,使用该属性指定要导入哪个库。 
 
- 作用:引入标签库。 
Jsp动作标签
JSP动作标签与HTML标签不同,HTML标签由浏览器来解析,而JSP动作标签需要服务器(Tomcat)来运行。
转发动作标签
作用:在页面中用于转发操作
<jsp:forward page="target.jsp"></jsp:forward>
转发子标签;在转发时设置请求参数,通过request.getParameter()在目标页面获取请求参数。
<jsp:forward page="target.jsp">
<jsp:param value="paramValue" name="paramName"/>
</jsp:forward>
注意:如果转发动作标签不需要设置请求参数,该标签开始与结束标签内部,不允许书写任何内容,(包括空格)
动态包含动作标签
作用:动态包含,将其他页面包含到当前页面中。
<jsp:include page="target.jsp"></jsp:include>
特点:被包含的文件同时会被翻译&编译。(先翻译,再包含)
- 本质原理:当使用动态包含时,Tomcat会在生成的Servlet中加入如下代码: 
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "target.jsp", out, false);
动态包含与静态包含的区别
| @include指令 | jsp:include标签 | |
|---|---|---|
| 特点 | 静态包含 | 动态包含 | 
| 语法的基本形式 | <%@ include file=”…”%> | <jsp:include page=”…”/> | 
| 包含动作发生的时机 | 翻译期间 | 请求期间 | 
| 是否生成java文件 | 不生成 | 生成 | 
| 合并方式 | 代码复制 | 合并运行结果 | 
| 包含的内容 | 文件实际内容 | 页面输出结果 | 
| 代码冲突 | 有可能 | 不可能 | 
| 编译次数 | 1 | 包含的文件 + 1 | 
| 适用范围 | 适用包含纯静态内容(CSS,HTML,JS),或没有非常耗时操作。或大量java代码的jsp | 包含需要传递参数。含有大量java代码,运算,耗时很长的操作。 | 
Jsp九大隐式对象
JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明
pageContext
- 类型:PageContext 
- 定义:代表页面域对象,用来代表整个JSP页面。 
- 作用: - 页面域对象 
- 九大隐式对象的“大哥”,可以直接调用其他八大隐式对象。 
 
- 在Servlet中获取方式:无。 
request
- 类型:HttpServletRequest 
- 定义:代表浏览器向服务器发送的请求报文,该对象由服务器创建,最终以参数的形式发送到doGet()和doPost()方法中。 - 每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。 
- 作用(详见Servlet中request对象) - 获取请求参数 
- 获取url地址参数 
- 请求转发 
- 向请求域中保存数据(获取数据&移除数据) 
- 获取请求头信息 
 
- 在Servlet中获取方式:doGet()或doPost()中直接使用。 
session
- 类型:HttpSession 
- 定义:代表浏览器与服务器之间的会话。 
- 作用 - 会话域对象, 
 - session对象用来跟踪在各个客户端请求间的会话。 
在Servlet中获取方式 :request.getSession();
application
- 类型:ServletContext 
- 定义:Servlet上下文,代表当前web应用。 - Web容器在启动时,它会为每个Web应用程序都创建一个唯一对应的ServletContext对象,意思是Servlet上下文,代表当前Web应用。 
- 作用 - 获取项目的上下文路径(带/的项目名):getContextPath() 
- 获取虚拟路径所映射的本地真实路径:getRealPath(String path) 
- 获取WEB应用程序的全局初始化参数(基本不用) 
 
4. 获取Web应用初始化参数:application.getInitParameter("ParamName");
- 在Servlet中获取方式:使用this.getServletContext()方法获取。
page
- 类型:Object 
- 作用:this,当前类对象。 
response
- 类型:HttpServletResponse 
- 定义:代表服务器向浏览器发送的响应报文,该对象由服务器创建,最终以参数的形式发送到doGet()和doPost()方法中。 
- 作用: - 向页面(响应体)中响应数据,数据包括文本、Html等。 
- 重定向 
- 设置响应头信息 
 
- 在Servlet中获取方式:doGet()或doPost()中直接使用 
config
- 类型:ServletConfig 
- 定义:代表当前Servlet的配置信息,每一个Servlet都有一个唯一对应的ServletConfig对象。 
- 作用: - 获取Servlet名称:getServletName() 
- 获取全局上下文ServletContext对象:getServletContext() 
- 获取Servlet初始化参数:getInitParameter(String) / getInitParameterNames()。 
 
- 在Servlet中获取方式:this.getServletConfig() 
out
- 类型:JspWriter 
- 定义:代表当前页面的输出流。 
- 作用:与Servlet中的PrintWriter功能类似,将数据响应到页面,响应的数据可以是页面、页面片段、字符串等。 
- 在Servlet中获取方式:无 
exception
- 类型:Throwable 
- 定义:代表当前页面的异常对象。 
- 作用:捕获处理页面中的异常信息。 
- 在Servlet中获取方式:new Throwable() 
九大内置对象,都是我们可以在【代码脚本】中或【表达式脚本】中直接使用的对象。
Jsp四大域对象
程序中的域对象,主要负责在不同web资源之间进行数据交换,(如:servlet和jsp之间的数据交换)。
域对象分析
每个域对象内部都维护了一个Map<String , Object>,域对象的共同方法。
- 设置属性到域中:void setAttribute(String key , Object value); 
- 从域中获取指定的属性:Object getAttribute(String key); 
- 移除域中指定属性:void removeAttribute(String key); 
域对象有效性
- pageContext: 当前页面中共享数据有效,离开当前页面失效。 - 每个页面都有自己唯一的一个pageContext对象。 
- 注意servlet中没有该对象。 
 
- request: 当前请求中共享数据有效。 - 当前请求:转发、直接访问一个页面为当前请求。 
- 不在当前请求:重定向、 打开页面再点击页面中的超链接不在当前请求 。 
 
- session: 一次会话范围中共享数据有效。 - 当前会话:当前浏览器不关闭&不更换浏览器即为当前会话。 
- 只关心浏览器是否关闭,不关心服务器关闭重启。 
- 不同浏览器不共享会话。 
 
- application: 在服务器运行的一次过程中共享数据有效。 - 服务器关闭销毁 
 
| 域对象 | 作用范围 | 起始时间 | 结束时间 | 
|---|---|---|---|
| pageContext | 当前JSP页面 | 页面加载 | 离开页面 | 
| request | 同一个请求 | 收到请求 | 响应 | 
| session | 同一个会话 | 开始会话 | 结束会话 | 
| application | 当前Web应用 | Web应用加载 | Web应用卸载 | 
Web基础了解版06-Jsp的更多相关文章
- Web基础了解版04-XML-Tomcat-Http
		XML 什么是XML - Tomcat - Http XML:eXtensible Markup Language (可扩展标记语言). XML 是一种标记语言,很类似 HTML. XML 的设计宗旨 ... 
- WEB基础(一)--JSP的9个内置对象
		1.request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据. ... 
- Web基础了解版05-Servlet
		Servlet Servlet? 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servlet容器负责提 ... 
- Web基础了解版10-Filter-Listener
		Filter 对于WEB应用来说,过滤器是一个驻留在服务器中的WEB组件,他可以截取客户端和WEB资源之间的请求和响应信息. 在一个WEB应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求 ... 
- Web基础了解版07-EL表达式-运算符-11个隐式对象
		EL EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作.EL在得到某个数据时,会自动进 ... 
- Web基础了解版09-Cookie-Session
		Cookie Cookie 是一种服务器发送给浏览器以键值对形式存储小量信息的技术. 当浏览器首次请求服务器时,服务器会将一条信息封装成一个Cookie发送给浏览器,浏览器收到Cookie,会将它保存 ... 
- Web基础了解版02-JavaScript
		JavaScript 特性 ① 解释型语言.JavaScript是一种解释型的脚本语言,JavaScript是在程序的运行过程中逐行进行解释,不需要被编译为机器码再执行. ② 面向对象.JavaScr ... 
- Web基础了解版08-JSTL-Core标签库
		JSTL JSP为我们提供了可以自定义标签库(Tag Library)的功能,用来替代代码脚本,Sun公司又定义了一套通用的标签库名为JSTL(JSP Standard Tag Library),里面 ... 
- Web基础了解版01-html-css
		HTML 网页构成 摘要 说明 结构(HTML) HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 表现(CSS) CSS样式是表现.就像网页的 ... 
随机推荐
- Pascal代码自动格式化
			const WEnter=; key=; next_line:..WEnter]of string=(';','begin','else','then','repeat','do','var'); k ... 
- [笔记]180612 for DevOps
			adb devices 识别不了安卓手机:我下的adb interface驱动下载链接:如果设备管理器中ADB Interface是黄色的,就需要先安装adb interface驱动(BD:adb i ... 
- jvisualvm图解【转】
			jvisualvm图解[转] http://blog.csdn.net/a19881029/article/details/8432368 jvisualvm能干什么:监控内存泄露,跟踪垃圾回收, ... 
- csdn阅读更多自动展开插件
			点击获取 当然也可以自己写脚本.写js. 
- JS对象迭代v-for
			<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ... 
- PAT甲级——A1098 Insertion or Heap Sort
			According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ... 
- Django之模板语言(一)
			1.Django的模板语言(简而言之,字符串替换) 1.目前为止已经学过的模板语言: 1.{{ name }} ------>变量 2. for 循环: {% for i in book_li ... 
- Pyhon基本数据类型
			1.数字 1.布尔型(bool) bool型只有两个值:True和False a = False b = True 2.整形 int型 n = 12 a = "12" 将字符串类型 ... 
- 删除文件夹时提示“You need permission to perform this action。。。”,如何解决?
			Win10系统,有时,要删除某个文件夹,却提示“You need permission to perform this action...” 以下是我Google之后找到的解决方案 1.创建一个文本文 ... 
- ArrayBlockingQueue的使用案例:
			ArrayBlockingQueue的介绍: ArrayBlockingQueue,顾名思义:基于数组的阻塞队列.数组是要指定长度的,所以使用ArrayBlockingQueue时必须指定长度,也就是 ... 
