jsp标签,指令,隐式对象,详细解释查漏补缺

jsp 概述:

			1.jsp是sun公司提供的一门动态资源的开发技术,servlet也是一门动态资源,单是不善于向页面中输出html的内容,于是sun提供了动态资源jsp,这个技术的支持允许在页面中书写html内容,展示内容,也可以书写java语句,用于处理逻辑。所以最终可以使用jsp页面替换掉servlet,。
			2. jsp技术的出现就是为了见兼容java代码和html代码进行相关的便捷书写,能够使开发servlet的时候变得不是那么复杂难懂,页面体现出的简洁性

jsp原理:

			1. 一个jsp页面在被访问的时候,会由jsp翻译引擎翻译成一个servlet文件去执行,向页面中输出数据。
			2. 实验查找:启动服务器,找到当前工程的发布日志信息,在这个日志信息的下方获取一个c盘路径,这个路径可以找到当前工程的work目录,work目录内包含页面对应的servlet文件
			3. 其实该servlet的文件名称就是页面中的jsp文件的翻译过来的servlet---->同样是java代码
			4. 其中存在翻译jsp的翻译引擎每次进行发布的时候,翻译引擎将会根据jsp中的页面的代码从上到下进行翻译,html代码可以直接通过配对的形式进行在浏览器显示,浏览器有翻译引擎,能够进行html的翻译功能

jsp的语法:

			1. 模板元素:在jsp中的模板元素代表的是html的静态元素,html的静态元素代表的是模板元素
			2. 在jsp页面中的html内容,被jsp翻译引擎翻译位servlet之后,会变成模板元素进行输出
			<body>this is a page</body>....都是模板元素,
			3. 而在jsp中的模板元素,通过以流的形式在页面上进行输出,输出后的模板元素在经过浏览器的内部翻译引擎,进行静态页面的框架的搭建。
	
	形式如下的,按照流的形式进行:,在页面进行不同程度的输出,进行静态框架的搭建

在这里插入图片描述
4. HTML元素最终servlet文件中会以out.write()输出到浏览器中

jsp脚本表达式 <%= %>:代表的是一个带有返回值的表达式,不能进行分号的结尾,否则不表达式,而是语句。

		1.语法结构:<%=  jsp脚本表达式%>,---->等号 =  代表的是返回值的赋值
		2. jsp表达式中可以填写一个直接量,或者式一个带有返回值的表达式,jsp翻译引擎将jsp脚本表达式进行翻译成servlet文件后,会以out.print()的方法将表达式的结果输出到页面中,输出的页面是对应的servlet页面,被jsp翻译引擎翻译之后的servlet页面,进行对应值的解析,在servlet中进行以out.print()进行输出到静态页面中:<%= new Date().toLocaleString()  %><==>等效于  out.print(new Date().toLocaleString());
		3. 页面中的jsp脚本表达式在被servlet翻译为servlet文件后会以out.print()的方法将表达式的结果输出到页面中

jsp脚本片段:<%%>

		1. 语法:<% JSP代码片段 %>
		2. 其中可以填写成段的java代码,其中的java语句需要符合java语法语句的要求
		3. 以下代码进行会原封不动的在页面中进行输出,作为java代码的出现去执行
		4. 注意在书写脚本片段的时候,可以不完整,但是要保证多个脚本片段可以拼接为一段正确的java语句。
		5. 注意是原封不动的进行编译输出在servlet的位置
	<%
	out.println("This is printed by out.println.");
	System.out.println("This is printed by System.out.println.");
	System.out.println("This is printed by System.out.println.");
	System.out.println("This is printed by System.out.println.");
	out.println("This is printed by out.println.");
	%> 

Jsp的声明:<%!%>

	1.语法:<%! jsp声明%>
	2. 翻译后的servlet文件如果需要使用成员变量和成员方法可以使用jsp声明来定义
	3.声明的语法中:jsp的翻译引擎的程序,会将变量翻译到对应的servlet中的成员变量或者成员方法中去,静态块也会被放置到servlet中去
	4 .声明的内容都会被抽取到成员变量中去
<!-- jsp的声明 -->
	<%!
	int num=10;
	/* public void add11{
		int k=0;
		int c=9;
	} */
	static{}
	
	%>

Jsp的注释:

			注释:<%
							//java注释被翻译后会出现在servlet文件中的对应位置,由于是注释,所以不会产生任何的输出
						%>
						html注释:<!-- html注释  -->会被jsp翻译引擎翻译成模板元素,由于是html注释,所以在servlet的出现,以out.write()进行输出在servlet中,但是在浏览器不产生任何的输出,在进行浏览器的解析的时候会被自动舍弃
						jsp注释:<%-- jsp注释 --%>在被jsp翻译引擎翻译的过程中执行,会出现在servlet文件中,但是要慎用,容易出现文件嵌套丢失等效果。

JSP指令:

	1 .jsp指令本身不会产生任何输出,用来规定当前jsp页面的引擎如何翻译jsp页面,通过指令身上的属性来规定页面如何被翻译
	2. 指令分为三种:
			- page 指令   ----用于指定jsp页面翻译引擎的属性
			- include指令----用于在一个页面中引入另外一个页面  <%@include file="/_head.jsp"%>用来指令页面的包含属性页
			- taglib指令 —— 用来引入标签库的的jar包

page指令:

		1. page指令能在面中出现多次,可以出现在任意一行
		2.page指令详解:
			- language="java" 描述当前jsp页面使用的语言
			- extends="package.class" :当前jsp翻译成servlet后要继承的类,注意此值一般是servlet的子类,不要去修改
			- import ={"package.class"}:代表的是当前使用的包,要导入该页面的包的依赖程度
			- seesion="true|false":用来指定当前页面是否使用seesion,如果设置为true,则翻译过来的servlet会有对session对象的引用,于是可以直接在jsp页面中使用seeison隐式对象,但是这将导致一旦访问jsp就会调用request.getSession()方法,可能导致不必要的空间浪费,如果确定jsp中不需要session可以设置为false,默认是false
			- buffer="none" |8kb|sizekb|:out隐式对象所使用的缓冲区的大小
			- auto Flush="true"|"false":out隐式对象是否自动刷新缓冲区,默认为true,不需要更改
			- isThreadSafe="true"|"false": 翻译过来是否实现SingleThreadModel
			- errorPage="relative_url":  如果页面出错,将要跳转的页面。除了在jsp中使用此属性指定错误页面外也可以在web.xml中配置整个web应用的错误页面,如果两个都设置则jsp中的属性起作用<error-Pagr></error-Pagr>表示的是在web.xml中进行全局的配置错误页面,通过状态码进行配置
			- contentType="text/html; charset=utf-8"  :负责在页面中设置当前页面的在浏览器器中使用的编码
			- pageEncoding="utf-8":展示的是服务器(tomcat)在翻译jsp页面的时候使用的编码集,如果想防止乱码,应该保证文件的保存编码和jsp翻译成servlet使用的编码以及输出到页面中的编译三者完全一致
			- 在不指定contentType的时候,pageEncoding可以用于指定contentType中的字符集,servlet会根据服务器中使用的编码,进行浏览器响应的时候,检测到pageEncoding中的编码集进行使用
			- 

include指令:

		- 该指令用于向页面中进行另外一套页面的包含,
		- 使用格式   <%@ include file="url%>  在当前位置进行包含,一般是静态 的页面,并进行相关的输出在对应位置进行展示

taglib指令:

		- 标签库使用

九大隐对象:

		- 在jsp页面中被jsp翻译引擎翻译为servlet文件后,每次访问页面后都会在服务器内部有对象进行对servlet中的service方法执行,在service方法中定义了9个隐式对象,这九个隐式对象可以直接在jsp页面中获取并使用
		- 什么是隐式对象,意思是内存的对象调用service方法之后便会产生九个对象,而这九个对象在service被调用的时候创建,但是我们页面中看不到这些对象,底层源码中已经帮我们进行封装起来了,不显式的出现,而是隐式的出现,称为隐式对象,但是这些对象确是能够被直接使用在jsp本页面中,使用的方法是将jsp页面翻译成servlet页面的时候,进行使用,查看被tomcat服务器中翻译的servlet文件源码中可以查看到。
		- 九大隐式对象:
				1.  request :代表request对象 
				2.  response:代表response对象  
				3. page:代表servlet对象 底层  ---page = this
				4. out:代表out对象
			 	5. config:代表servletConfig对象 
			  	6. exception:代表Exception对象
			 	7. pageContext  :代表pageContext对象,用于获取虚拟路径
				5. session  :代表Session对象
				6. application	:代表servletContext对象,用于获取的是当前的路径对象

pageContext隐式对象详解:

			功能一:用户获取其他八大对象
				1. 在jsp页面中,tomcat的jsp翻译引擎将jsp页面翻译成servlet页面之后提供了九大隐式对象
				2. 九大隐式对象进行的获取通过pageContext对象进行获取,之前的话是将九大隐式对象都提供在jsp也页面中,后面进行优化为其他隐式对象提供可获取对象的入口,通过这个入口可以获取其他隐式对象的引用——pageContext
			功能二:作为域对象进行使用
				1. 域对象	,如果一个对象身上有一个可以被看见的范围,在这个范围内	可以利用对象身上的map实现数据共享,这个对象就可以称为域对象,域范围可以使用在Web应用中进行确定
				2. 设置域对象:
					- setAttribute(String name,Object obj); 
					- 获取域对象,由于通过是映射map来进行存储数据(数组+链表)
					- getAttribute(String key)
					- 移除域对象
					- removeAttribute()
					- 获取域中的对象的所有键名
					- getAttributeNames()
				3. 生命周期:
					- 在访问jsp页面时,pageContext对象创建,生命周期开始
					- 在结束访问jsp页面时,pageContext对象销毁,生命就此消亡--->pageContext代表的是当前页面
				4.作用范围:整个jsp页面,当前jsp页面
				4. 主要功能:在整个jsp页面中共享数据,进行数据的共享
				5. 代码实现:可以通过jsp脚本表达式进行输出数据

在这里插入图片描述

			功能三:操作其他域中的属性
					- setAttribute(String name,Object obj,int scope);
					- getAttribute(String name,int scope)
					- removeAttrubute(String name,int scope)
					- getAttributeNamesInScope();

代码实现:

<h3>pageContext操作其他域中属性</h3>
<%
// 向指定域中设置值 (APPLICATION_SCOPE 代表 servletcontext 域 )
pageContext.setAttribute("country","China",PageContext.APPLICATION_SCOPE);
pageContext.setAttribute("country","US",PageContext.SESSION_SCOPE);
pageContext.setAttribute("country","UK",PageContext.REQUEST_SCOPE);
//PAGE_SCOPE 代表 pageContext 域
pageContext.setAttribute("country","Japan",PageContext.PAGE_SCOPE);
%>
<%=pageContext.getAttribute("country",PageContext.APPLICATION_SCOPE)%>
<%=pageContext.getAttribute("country",PageContext.SESSION_SCOPE)%>
<%=pageContext.getAttribute("country",PageContext.REQUEST_SCOPE)%>
<%=pageContext.getAttribute("country",PageContext.PAGE_SCOPE)%>
			四大作用域的名称:
				 1. pageContext域     ——PAGE_SCOPE---->当前页面的域范围
				 2. request域 —— REQUEST_SCOPE----->请求域的范围
				 3. SESSION域 —— SESSION_SCOPE----->Session域的存在范围
				 4. ServletContext域 ——APPLICATION_SCOPE----->web应用域范围

		功能三:自动搜寻域
				  1. findAttribute会在四个作用域中,由小到大的搜索范围指定名称的域属性
				  2. 如果在某个域中获的属性,则不会向更大的域进行属性的获取
				  3. 范围:ServletContext>Session>request>pageContext

		功能四:便捷的请求转发
					1.pageContext.forward(url);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值