1.jsp介绍:
java server pages(java服务器页面)
本质上jsp就是一个servlet,在html代码中嵌套java代码,
运行在服务器端,处理请求,生成动态的内容.
对应的java和class文件在tomcat目录下的work目录
后缀名 .jspjsp = html + java片段 + JSP标签(语法) + javascript(css)
2.JSP 执行流程:
1.浏览器发送请求,访问jsp页面
2.服务器接受请求,jspSerlvet会帮我们查找对应的jsp文件
3.服务器将jsp页面翻译成java文件.
4.jvm会将java编译成.class文件
5.服务器运行class文件,生成动态的内容.
6.将内容发送给服务器,
7.服务器组成响应信息,发送给浏览器
8.浏览器接受数据,解析展示
3.jsp的脚本:
<%...%> java程序片段
生成成jsp的service方法中
<%=...%> 输出表达式
生成成jsp的service方法中,相当于在java中调用out.print(XXX)
<%!...%> 声明成员---不常用
成员位置.
4.jsp的指令
作用:声明jsp页面的一些属性和动作
格式:
<%@指令名称 属性="值" 属性="值"%>
jsp指令的分类:
page:主要声明jsp页面的一些属性
include:静态包含.
taglib:导入标签库
注意:
一个页面中可以出现多个指令
指令可以放在任意位置,一般都放在jsp页面最上面.
4.1page指令:
重要属性:3个
contentType:设置响应流的编码,及通知浏览器用什么编码打开.设置文件的mimetype
pageEncoding:设置页面的编码
import:导入所需要的包
contentType和pageEncoding联系:
若两者都出现的时候,各自使用各自的编码
若只出现一者,两个都使用出现的这个编码
若两者都不出现,使用服务器默认的编码 tomcat7使用的iso-8859-1
了解属性:
language:当前jsp页面里面可以嵌套的语言
buffer:设置jsp页面的流的缓冲区的大小
autoFlush:是否自动刷新
extends:声明当前jsp的页面继承于那个类.必须继承的是httpservlet 及其子类
session:设置jsp页面是否可以使用session内置对象
isELIgnored:是否忽略el表达式
errorPage:当前jsp页面出现异常的时候要跳转到的jsp页面
isErrorPage:当前jsp页面是否是一个错误页面
若值为true,可以使用jsp页面的一个内置对象 exception
4.2 include指令:
静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.
格式:
<%@include file="相对路径或者是内部路径" %>
例如:
<%@include file="/jsp/include/i1.jsp" %>
路径:
相对路径:
./ 或者什么都不写 当前路径
上一级路径 ../
绝对路径:
带协议和主机的绝对路径
不带协议和主机的绝对路径
/项目名/资源
内部路径:
不带协议和主机的绝对路径去掉项目名
请求转发 静态包含 动态包含
4.3taglib指令
taglib指令 :导入标签库
格式:
<%@taglib prefix="前缀名" uri="名称空间" %>
若导入之后
<前缀名:标签 .. >
例如:
<c:if test="">输出内容</c:if>
5.jsp的内置对象:★★★(9大内置对象)
在jsp页面上可以直接使用的对象
内置对象 类型
out JspWriter
request HttpServletRequest
response HttpServletResponse
session HttpSession
exception Throwable
page Servlet(this)
config ServletConfig
application ServletContext
pageContext PageContext
6. jsp的域对象:(由大到小)
- application 整个项目
- session 一次会话
- request 一次请求
- pageContext 一个页面
pagecontext作用:理解
1.域对象
xxxAttribute()
2.操作其他域对象
方法:
xxxAttribute(...,int scope);
scope取值:
APPLICATION_SCOPE
SESSION_SCOPE
REQUEST_SCOPE
PAGE_SCOPE
3.获取其他的内置对象
getXxx()
注意:
getRequest():获取request内置对象
4.便捷查找,
findAttribute(String key):
依次从pagecontext,request,session,application四个域中,查找相应的属性,若查找到了返回值,且结束该次查找
若查找不到,返回一个null
7.jsp的动作标签
<jsp:forward>:请求转发 相当于java中 request.getRequestDispatcher(..).forward(..);
<jsp:forward page="内部路径"></jsp:forward>
<jsp:include>:动态包含
就是将被包含页面或者servlet的运行结果包含到当前页面中.
8.JSP特点:
jsp这门技术的最大的特点在于,写jsp就像在写HTML,但:
它相对于html而言,html只能为用户提供静态数据,而jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
相比Servlet而言,Servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。
9.Jsp页面中的Java代码服务器是如何执行的?
假设我们在一个jsp的文件中写如下代码:<body>
<%
int i = 90;
int j = i + 100;
%>
<h1>测试</h1>
<%
out.println("i="+i+"<br>");
out.println("j="+j);
%>
</body>
可以看到,我们使用了两个<% %>符号嵌入了两段java代码,并且第二段java代码使用了第一段java代码中定义的变量,这样会报错吗?
【答案】:不会的,我们可以查看服务器翻译的对应于这个jsp文件的Servlet文件,找到那个最重要的_jspService方法,就可以看到,这几句代码都在该方法中,而定义的 i 和 j 变量不过是该方法的两个局部变量,当然可以被之后的语句使用了。
【结论】:如果有多个<% %>这样包含的java片段,其实是相当于一个大的java片段,在这中间定义的变量会成为_jspService函数的局部变量。
10.Web服务器在调用Jsp时,会给Jsp提供一些什么Java对象?
9个内置对象,后面会介绍到。我们现在已经使用了out这个对象,它其实就是相当于Servlet中的PrintWriter对象。
out.print(一般是自己写的内容)
out.write(一般是页面输出)
11.jsp注释:
html注释 <!-- -->
注释的内容只在页面上看不到 java代码和html源代码都有
java注释
只在java代码中存在
jsp注释 <%-- --%>
只在jsp页面中存在,翻译成java文件之后就没有了ctrl +shift+/自动注释