JSP
JSP:Java Server Pages (Java服务器端页面),其实就在HTML中嵌入Java代码。
一、jsp运行原理:
1、在创建jsp页面后,需要将它发布到tomcat服务器上,启动服务后,才可以访问jsp页面。
2、当向服务器上发送请求访问页面时,会将服务器上的jsp文件(xxx.jsp),翻译成java文件(xxx_jsp.java),
然后,将java文件编译成class文件(xxx_jsp.class),运行class文件。
二、jsp脚本元素:
1、概述:
JSP = HTML + Java代码 + JSP自身东西
JSP的脚本元素就是在JSP中嵌入Java代码。
2、jsp脚本元素分类:
1、声明标签:
<%! 变量或方法声明 %>
写在这个脚本中的代码,翻译成Servlet内部的成员变量或成员方法。
例如:<%!
//声明变量
int i = 3;
%>
2、表达式标签:
<%= 表达式 %>
写在这个脚本中的代码,翻译成方法内部的out.print();当中的内容
例如:<%= i %>
也就是在页面中展示出来的数据内容;
3、程序代码标签:
<% 程序代码 %>
写在这个脚本中的代码,翻译成方法内部的局部变量或方法内部代码片段。
例如: <%
int x = 5;
%>
也就是在jsp页面中插入java代码;可以在里面写一些如:if/else 或 遍历集合的操作。
3、关于路径问题:
1、相对路径(相对路径不是以 / 开头的。)
例如:
1、在根路径的页面访问:
<a href="xxx">访问xxx页面</a>
或者
<a href="./xxx">访问xxx页面</a>
访问路径:localhsot:8080/工程名/xxx
2、访问根目录下的某个yyy目录下的文件
<a href="../yyy/xxx">访问xxx页面</a>
访问路径:localhsot:8080/工程名/yyy/xxx
2、绝对路径(通常以 / 开始的路径)
绝对路径分成服务器端路径和客户端路径
1、客户端路径 需要带工程名
<a href="/工程名/xxx">访问xxx页面</a>
或者
<a href="http://localhost:8080/工程名/xxx">访问xxx页面</a>
三、jsp的模板修改和注释
1、创建jsp模板时自动修改字符集:
2、jsp注释:
<%-- JSP的注释 --%>
存在时机:
存在JSP的源码中,翻译Servlet后注释就没有了。
注意:Java代码注释的话不要使用HTML的注释!!!
四、jsp指令元素
作用:用于指示JSP执行的某些步骤和变现特定行为
语法:<%@ 指令名称 属性名称=属性的值 属性名称=属性的值 %>
指令元素的分类:
1、page指令:指示JSP的页面设置属性和行为;
2、include指令:指示JSP包含哪些其他页面;
3、taglib指令:指示JSP页面包含哪些标签库。
1、page指令:
<%@ page 属性名=属性值 %>
Page指令用来定义JSP文件的全局属性。
这些属性可以单独使用,也可以几个或多个同时使用。
在JSP页面中,只有import属性可以出现多次,其他属性都只能出现一次。
page指令属性:
language属性: 声明使用脚本的语言。只能是java。
extends属性: 标明JSP编译成Servlet的时候继承的类。默认值:HttpJspBase。
session属性: 标明JSP中是否可以直接使用session对象。默认值是true。
buffer属性: 标明JSP对客户端输出缓冲区大小。默认值8kb。
autoFlush属性: 如果缓冲区大小溢出,是否自动刷出。默认true。
import属性: 用于导入Java包或类。
contentType属性: 标明JSP被浏览器解析和打开的时候采用的默认的字符集。
pageEncoding属性: JSP文件及JSP翻译后的Servlet保存到硬盘上采用字符集。
isErrorPage属性: 处理JSP页面异常。
errorPage属性: 处理JSP页面异常。
isELIgnored属性: 通知JSP是否忽略EL表达式。
2、include指令:
<%@ include 属性名=属性值%>
作用:在JSP页面中静态包含一个文件,同时由该JSP解析包含的文件内容。
大白话:也就是将别的jsp页面引用进来。
include指令属性:
file属性: 指示JSP页面包含页面路径。
静态包含原理:如果在index.jsp文件中引入login.jsp文件时,即<%@ include file="login.jsp" %>,
当翻译index.jsp文件时,会通过<%@ include file="login.jsp" %>找到login.jsp文件,
将login.jsp文件中的内容一起翻译到index.jsp文件中,得到index_jsp.java文件,然后,
将其编译成index_jsp.class文件。
注意地方:
应该将被包含的页面的结构去掉。
在被包含的页面中定义变量,在包含的页面中还可以使用。
3、taglib指令:
<%@ taglib 属性名=属性值%>
作用:用于在JSP页面中引入标签库。
taglib指令属性:
uri属性: 引入的标签库的路径
prefix属性: 引入标签库的别名
五、jsp的内置对象:
1、JSP的内置对象:指的是可以直接在JSP页面中使用的对象。
2、jsp的内置对象:
JSP当中有9大内置对象:
request :从客户端向服务器发送的请求对象
response :从服务器端向客户端作出响应对象
session :服务器为客户端创建会话对象
application :代表应用。获得的ServletContext对象。
out :向输出流写入内容的对象。
page :当前的JSP翻译成Servlet后的对象的引用。
pageContext :本JSP的页面的上下文对象。
config :本JSP的ServletConfig对象。
exception :表示JSP页面运行时产生的异常对象。
jsp内置对象具体类型:
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletContext
config ServletConfig
page Object
pageContext PageContext
out JspWriter
exception Throwable
3、pageContext对象:
pageContext对象直接翻译为“页面上下文”对象,代表的是当前页面运行的一些属性。
pageContext对象的作用:
1、提供了page范围的数据存取的方法:
setAttribute(String,object); --- 向page范围中存入数据;
getAttribute(String); --- 从page范围获取数据;
remoAttribute(String); --- 从page范围移除数据;
2、通过这个对象获得其他的8个内置对象:
如:getPage() getOut()等方式来获取其他的8个内置对象;
六、jsp的四个作用范围:
PageScope :页面范围。
页面范围指的是在当前的页面内有效,出了这个页面,用pageContext保存的数据就无效了。
例如:
pageContext.setAttribute("name","张三");
RequestScope :请求范围。
从客户端向服务器发送一次请求,服务器对这次请求作出了响应之后,用request保存的数据就无效了。
例如:
request.setAttribute("name","李四");
或者
pageContext.setAttribute("name","李四",PageContext.REQUEST_SCOPE);
SessionScope :会话范围。
每个浏览器向服务器发送请求(多次请求)。将该会话结束。
例如:
session.setAttribute("name","王五");
或者
pageContext.setAttribute("name","王五",PageContext.SESSION_SCOPE);
ApplicationScope :应用范围。
在整个应用中任意的地方都可以获取。
例如:
application.setAttribute("name","赵六");
或者
pageContext.setAttribute("name","赵六",PageContext.APPLICATION_SCOPE);
七、jsp的动作标签:
什么是动作标签:
JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码,造成jsp页面难以维护。
常用的动作标签:
<jsp:forward/> :请求转发。
<jsp:include/> :包含(动态包含)。
<jsp:param/> :传递参数。
include动态包含的原理:
如果在index.jsp文件中,动态包含login.jsp文件时,即<jsp:include page="login.jsp"></jsp:include>,
当程序翻译index.jsp文件为index_jsp.java文件,然后编译成index_jsp.class文件后执行,与此同时,
会通过<jsp:include page="login.jsp"></jsp:include>,找到login.jsp文件编译成login_jsp.class文件
执行的结果,然后,将它的结果包含到index_jsp.class文件中,一起执行。