JSP运行规则:先转化成Java文件,然后编译成class文件,最后才可以执行。
了解了servlet之后,好多JSP的知识可以从JSP翻译后的Java文件中看出。
JSP页面转化为Java文件后所在的位置:
Eclipse的工作目录下的
.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Demo0808\org\apache\jsp
介绍下我自己的Java学习群:548511899,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的Java资料和零基础到学成出山的全套教程,欢迎所有喜欢Java的小伙伴。
JSP中的代码片段,翻译到Servlet的方法中,所以可以写Java方法中允许的代码,
不能写访问标识符等在方法中都不允许的代码。
脚本中的代码要保持结构完整,可以分开写到两个脚本中,比如:
<% for(int I = 0; I < 10; I ++){ %> hello <% } %>
Java片段翻译为Servlet的时候是按照从上向下的顺序的。
JSP注释:在JSP源码界面可见,Java文件中不可见,页面源码中不可见。
HTML注释:在各个界面都可见。
Java注释,只有在页面源码中不可见
1.page指令
language属性:指示当前的JSP页面会被翻译成何种语言。
ContentType:指定浏览器的编码方式,浏览器使用。
pageEncoding:指定当前页面的编码方式,供浏览器使用。
autoFlush:是否自动刷新,默认true.
errorPage:当前页面发生错误后,转发到的页面,地址栏不变化。
buffer:缓冲的大小
isErrorPage:指定当前页面是否为错误页面,默认是false,此时内置对象Exception不可用。true的时候才可以使用。
isELIgnored:是否忽略El表达式,默认不忽略。
2.include静态加载。
被包含页面的代码完全加到目标页面中,转化为Java文件的时候只转化目标页面,被包含页面在Java文件中也有输出。
file属性
最终会被翻译成Java代码执行。(Java学习交流群 548511899)
1.forword标签:
只有page属性。此时路径是相对于服务器端的。转发。 这个标签可以访问WEB-INF目录下的文件 不带参数其实标签和结束标签不可以分开。 可以通过param传递参数。
2.include标签:
和指令相比,为动态包含,被包含界面和杰界面都生成Java文件和class文件
3.tablib标签
引入jstl时使用
pageContext(page域):作用范围是整个JSP页面,是四大作用域中最小的一个;生命周期是当对JSP的请求时开始,当响应结束时销毁。
Request:作用范围是整个请求链(请求转发也存在);生命周期是在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
Session:作用范围是一次会话。
servletContext(application域):作用范围是整个Web应用。当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。
四个域的作用域范围大小:PageContext (page域) < request < session < servletContext(application域)
sp
1 什么是JSP
Java Server Pages : Java服务器端页面,也和Servlet一样,用于动态web技术!
最大的特点:
写Jsp就像写HTML
区别:
HTML只给用户提供静态的数据
JSP页面中可以嵌套Java代码,为用户提供动态数据
2 jSP原理
思路: JSP到底怎么执行的!
代码层面没有任何问题
服务器内部 工作
tomcat 中有一个work目录
idea中使用tomcat会在idea中产生一个work目录
这个是 idea tomcat的工作空间
路径:
浏览器向服务器发送请求,不管访问什么资源,起始都是在访问Servlet
JSP最终也会被转换成为一个Java类
JSP本质上就是一个Servlet
1.判断请求
2.内置对象
3.输出页面前增加的代码
以上的这些个对象我们可以在JSP页面中直接使用
jsp原理图
在JSP页面中;
只要是Java代码就会原封不动的输出
如果是HTML代码,就会被转换
这样的格式,输出到前端
3 JSP基础语法
任何语言都有自己的语法,Java中有,JSP作为Java技术的一种应用,它拥有一些自己的扩容的语法,Java所有语法都支持
JSP表达式
述(最多18字
jsp 脚本片段
脚本片段的实现
JSP声明
JSP声明: 会被编译到JSP生成Java类中! 其他的,就会被生成到 _jspService 方法中
在JSP中嵌入Java代码即可
jsp的注释,不会在客户端显示,HTML就会
4 JSP指令
总结:
在实际开发中建议使用 下面 jsp:include/的方式
如果使用上面那一种的话 如果在header.jsp或者在footer.jsp中声明了 int a=1; 又在当前jsp中声明了相同的变量 在jsp页面不会报错,去了浏览器里面 就报错了。
所以建议使用 jsp标签 进行页面拼接
5 九大内置对象
>PageContext 存东西
>Request 存东西
>Response
>Session 存东西
>Application 【ServletContext 】 存东西
>config 【ServletConfig】
>out
>page
>exception
equest:客户端向服务器发送请求,产生的数据,用户看完了就没作用了,比如:新闻 用户看完了没作用了。
session:客户端向服务器发送请求,产生的数据,用户用完了一会还有用,比如:购物车;
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用:比如:聊天数据
6 JSP标签 JSTL标签 EL表达式
开始之前导入所学的依赖
EL表达式: ${ }
>获取数据
>执行运算
>获取web开发的常用对象
JSP 标签
发送:
接收:
JSTL 表达式
JSTL表达式的使用就是为了弥补HTML标签的不足;它自定义许多标签,供我们使用,标签的功能和Java代码一样
核心标签
JSTL 标签库使用步骤
引入对应的taglib
使用其中的方法
在Tomcat也需要引入jstl的包,否则会报错
c:if
c:choose c:when
c:forEach
天千锋广州小编就给大家分享零基础如何掌握JSP技术,下面一起来看看吧!
一、Java初级开发之jsp概述
1.关于jsp
JavaServer Pages简称jsp,从“server”这个词可以看出,这其实也是一门java服务端技术,其实可以简单的把jsp认为是servlet,一点错也没有。Jsp的实质,就是客户端需要的资源是通过jsp技术动态生成的。
2.jsp的技术原理
1)当客户端在访问一个jsp资源时,服务器上有相应的servlet来负责jsp资源,那么该servlet将会把jsp页面翻译成一个servlet,然后执行该servlet的service方法。
2)服务器将jsp翻译成java程序(就是一个Servlet),然后执行该Servlet的service方法,在方法内部动态地向客户端写html代码。
因此jsp就是一个servlet,也就是jsp页面将被翻译成servlet
3.jsp与servlet的选择
jsp就是servlet,那么如果碰到需要写繁多的html代码,建议使用jsp,如果需要写繁多的java代码,建议使用servlet。
二、JSP技术详解
1.JSP脚本
就是怎样在jsp页面中使用java代码,使用了脚本的地方,就不会作为输出流的内容,而是作为java代码来执行。使用方式有三种:
1) <% java代码 %>
jav代码会被作为程序的一部分来执行,而不会被翻译成out.write(),这是常用的。
2) <% java代码 %>
会被翻译成 out.print(java代码)
3) <% java代码 %>
声明成员变量。
4)jsp的注释方式
· html的注释:
用户看得到,程序员也看得到
· java的注释:// 单行注释 /多行注释/
用户看不到,但是会被翻译
· jsp的注释:
用户看不到,不会被翻译,只有程序员在写jsp页面时才看得到。
2.三大指令
1)page指令
page指令是用于告诉服务器该如何翻译此jsp页面。通过page指令的属性来指明翻译的效果。
· language: 指的是jsp页面支持哪种语言,只支持java,所以该属性可以省略
· pageEncoding和contentType写一个就行,建议使用pageEncoding,更加简单
· session:默认值是true,默认情况下服务器会为该页面开辟一个session空间
· import:用于导入该页面中的java类需要用到的包
· errorPage:当发生错误时跳转到的资源,注意,该地址是一个服务器地址。
· isErrorPage:默认值是false。当在web.xml中配置错误页面时,需要将该jsp页面的isErrorPage设为true.
404
/error.jsp
总结:一般情况下,page指令就这么写即可:
2)include指令:静态包含,file属性使用的是服务器地址。
include指令是用于在一个jsp页面中包含另一个jsp页面,两个页面组合成一个页面发送给客户端。
所谓的静态包含,在翻译时是把被包含的jsp页面写给客户端。那么此时客户端拿到的是两套html标签。
3)taglib指令:标签库
taglib指令用于引入第三方标签库,通过taglib指令中的prefix指明前缀,通过前缀来使用第三方标签库中的标签
3.四大域对象 (jsp有四个,servlet有三个(request,session,servletContext))
1) pageContext
(1)pageContext作为域对象
· 描述当前page的上下文。那么pageContext对象是一个域对象,所谓域对象,就是提供了一个区域,用来存储数据。因此当前的page就能向pageContext对象中存储数据.
pageContext域对象的作用范围:当前page(页面)
setAttribute(String key,Object value);
getAttribute(String key);
removeAttribute(String key);
· 向其他域对象中操作数据.
pageContext.setAttribute(String key,Object value, int scope);向其他域对象中存值
pageContext.getAttribute(String key, int scope);向其他域对象中取值
pageContext.removeAttribute(String key, int scope);向其他域对象中移除值
int scope来自于PageContext类的常量
REQUEST_SCOPE: 表示request域
SESSION_SCOPE: 表示session域
APPLICATION_SCOPE: 表示application域
· findAttribute(String key):Object :这是通过键,向所有域中搜索数据。
搜索的顺序:
pageContext->request->session->application
(2)可以通过pageContext对象来获取其他八个内置对象
通过pageContext的get*()来获得。
2)request
作用范围:一次请求
3)session
作用范围:一次会话
4)application
作用范围:当前web应用
4.九大内置对象
所谓的内置对象,即在jsp页面的脚本中能直接使用的java对象。
· out: 输出流
当通过out的write()写内容时,实际是往out的缓冲区(默认大小是8kb)中去写,有两种情况导致缓冲区的内容会冲刷进底层的输出流中
1)out对象被销毁
2)out的缓冲区不够用了。其实我们可以设置out缓冲区的大小。如果缓冲区是0kb,那么out就把内容直接写到response缓冲区中。
· page:this,表示当前的Servlet对象
· pageContext:重点,表示当前page的上下文对象,也是一个域对象
· session:当jsp页面的page指令的session属性为true时,才会有session对象
· request:
· response
· exception 当jsp页面的page指令的isErrorPage属性为true时,才会有exception对象
· application: 实际就是ServletContext对象
· config:实际就是ServletConfig对象
5.Jsp标签
1) jsp:include
动态包含:在一个页面中包含另一个页面的内容
和静态的区别:
静态包含会在翻译的过程中直接翻译被包含的页面,被包含的页面不会产生java文件。
而动态包含会在翻译的过程中只翻译自己页面的内容,被包含的页面的翻译交给相应的类来完成,被包含的页面会产生java文件,实际开发中更加常用动态包含。
2)jsp:forward
请求转发,与servlet中的请求转发的效果一致。
*请认真填写需求信息,我们会在24小时内与您取得联系。