JSP
jsp概述:
jsp:
java server pages(java服务器页面)
运行在服务器端,本质上就是一个serlvet,产生的java文件和class保留在tomcat的work目录下.
作用:
将内容的生成和信息的展示相分离
后缀名 .jsp
执行流程:
1.浏览器发送请求,访问jsp页面
2.服务器接受请求,jspSerlvet会帮我们查找对应的jsp文件
3.服务器将jsp页面翻译成java文件.
4.jvm会将java编译成.class文件
5.服务器运行class文件,生成动态的内容.
6.将内容发送给服务器,
7.服务器组成响应信息,发送给浏览器
8.浏览器接受数据,解析展示
jsp脚本:
<%...%> java代码片段 生成在jsp的service方法中【jsp的_jspService()方法中】
<%=...%> 输出表达式 生成在jsp的service方法中,相当于在java中调用out.print(..)
<%!代码%> 声明成员
jsp指令
jsp的指令
作用:声明jsp页面的一些属性和动作
格式:
<%@指令名称 属性="值" 属性="值"%>
jsp指令的分类:
page:主要声明jsp页面的一些属性
include:静态包含.
taglib:导入标签库
注意:
一个页面中可以出现多个指令
指令可以放在任意位置,一般都放在jsp页面最上面.
page指令:
重要属性: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
include指令:
静态包含,就是将其他页面或者servlet的内容包含进来,一起进行编译运行.生成一个java文件.【既是把包含的页面复制进来,一起进行编译】
格式:
<%@include file="相对路径或者是内部路径" %>
例如:
<%@include file="/jsp/include/i1.jsp" %>
路径:
相对路径:
./或者什么都不写 当前路径
上一级路径 ../
绝对路径:
带协议和主机的绝对路径
不带协议和主机的绝对路径
/项目名/资源
内部路径:
不带协议和主机的绝对路径去掉项目名
请求转发 静态包含 动态包含
taglib指令:导入标签库
格式:
<%@taglib prefix="前缀名" uri="名称空间" %>
若导入之后
<前缀名:标签 .. >
例如:
<c:if test="${el表达式}">输出内容</c:if>
jsp内置对象【9大内置对象】
jsp的内置对象:★★★(9大内置对象;4大域对象)
在jsp页面上可以直接使用的对象
内置对象 类型
out JspWriter
request HttpServletRequest
response HttpServletResponse
session HttpSession
exception Throwable
page Servlet(this)
config ServletConfig
application ServletContext
pageContext PageContext
jsp的域4个对象:
application 整个项目
session 一次会话
request 一次请求
pageContext 一个页面
Java中的三个域对象:ServletContext【ServletContext】、Session【HttpSession】、Request【HttpServletRequest】
pagecontext作用:理解
1.域对象
xxxAttribute()【setAttribute/getAttribute/removeAttribute()方法】
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
jsp动作
jsp的动作标签
<jsp:forward>:请求转发 相当于java中 request.getRequestDispatcher(..).forward(request,response);
<jsp:forward page="内部路径"></jsp:forward>
<jsp:include>:动态包含
就是将被包含页面或者servlet的运行结果包含到当前页面中.格式:
<jsp:include page="内部路径"></jsp:include>
静态包含和动态包含的区别?
静态包含相当于代码的copy,最终被翻译成一个Servlet(只生成一个java文件)解释执行的.动态包含,包含其他页面的运行的结果.最终翻译成多个Servlet(生成多个java文件)解释执行的.
jsp注释:
html注释 <!-- -->
注释的内容只在页面上看不到 java代码和html源代码都有
java注释 //...和/*...*/和/**...*/
只在java代码中存在
jsp注释 <%-- --%>
只在jsp页面中存在,翻译成java文件之后就没有了