1、什么是jsp
JSP: 全称是 Java Server Page,由早前的 sun 公司倡导,很多企业一起参与研发的动态网页技术。
2、为什么会出现JSP
平常我们见到的 html 网页属于静态网页, 很难在它显示一些动态改变的数据, 比如查询学生列表, 搜索具体某个员工信息 ,这些数据由于都是存放在服务器的数据中 。 需要从数据库中取出来,然后显示到网页上。 html 网页时无法完成这项工作的, 这时候就需要jsp了。 jsp 其实可以看成是 java + html 的结合体 , 可以在jsp网页中编写java代码 。另外 jsp最后会被翻译成一个 java 类, 这个 Java 类,实际上技术一个 HttpServlet 翻译成 java文件存放在 : tomcat目录/work/Catalina/localhost/项目名/org/apache/jsp 里面
3、三大指令集
1)page:
用于设置当前页面的一些信息。 默认创建好jsp, 就会在最上面第一行,加入该指令了。
anguage : java 指定页面里面可以使用java语言,其实就是可以使用java代码
contentType : text/html;charset=utf-8 用于表示当前页面的内容类型以及使用的编码。 这个属性其实是告诉浏览器的。
pageEncoding : 页面内容编码。
session : 表示页面中是否可以直接使用 session 对象,其实对应背后的是 ,jsp翻译成java后,在代码里面时候会调用 getSession()创建内置session对象。 默认是true。表示会创建session对象
import: 导包,一般不用手动导包,
isELIgnored : 表示 页面中是否忽略EL表达式, 通俗的说是: 页面能够识别jsp表达式。 errorPage :表示该界面假设有错误,那么会跳转到哪个页面去。 要求的值是一个页面地址。
isErroPage : 这个属性与上面的是分开的。用于表示当前页面时错误页面。
2)include:
可以嵌套另外一个jsp页面的内容 <%@ include file=“a.jsp” %> ----> 表示,引入a.jsp的内容。
该行代码可以写在body里面。 假如是在A页面上使用 <%@ include file=“B.jsp” %> 从页面上看 , 确实是两个 jsp 的内容组合到一起了。但是从背后翻译成的 java 文件看, 里面做了很多重复的标签输出。 其实就是既输出 A.jsp , 也输出了 B.jsp
3)taglib
用于导入标签库 ,多用于引入 JSTL标签库 <%@ taglib prefix="c"uri=“http://java.sun.com/jsp/jstl/core” %>
uri: 表示标签库路径地址
prefix : 表示别名,或者称之为前缀也可以。
4、JSP动作标签
1)forword
跳转页面使用, 其实是请求转发的简写方式而已。 与request.getRequestDispatcher("").forward(request, response); 等同。
<jsp:forward page=“aa.jsp”></jsp:forward>
2)include
这个是一个包含的动作标签。 它的作用,与上面的 include 指令是相同的, 都可以包含某一个 jsp 页面进来显示。但是两者还是有区别的。
include 指令: 把 jsp 的网页源码全部包含进来jsp
include 动作标签: 只会包含 jsp 的运行结果。 如果想让自己印象更深刻一点, 最好去查看 jsp 被翻译成的 java 文件,
3)param
用于指定参数的意思。 这个jsp:param 可以在其他两个动作标签里面嵌套使用 , 如:
<jsp:forward page="a.jsp">
<jsp:param name="name" value="zhangsan"/>
</jsp:forward>
取值:
<%= request.getParameter("name") %>
即可得到参数 name 的值 zhangsan
5、内置对象
1)pageContext 【PageContext】
对应的类型是 PageContext . 该对象是四个作用域之一, 一般使用该对象来存取值 以及 获取其他八个内置对象(但是由于其他内置对象都可以直接使用,所以该作用一般比较少用了)
存取值 :setAttribute 和 getAttribute
注意: 该对象所存的值, 只能在该页面上取出来, 也就是说: 它的作用域值能是当前页面。
2)request 【HttpServletRequest】
该对象是 HttpServletRequest 的实例, 在这里的使用手法与java 代码中的使用手法是一样的。 该对象是四个作用域之一 ,
通常在 jsp 页面用来存取值 和 跳转。
- 跳转:request.getRequestDispatcher("").forward(request, response);
- 存取值: setAttribute 和 getAttribute .
注意: 该对象的作用域 ,仅限于一次请求中。当服务器对该请求做出响应后,就无法在其他的地方获取里面存的值了。
3)session 【HTTPSession】
默认情况下, jsp 翻译成 java 文件后, 会在里面的方法调用 request.getSession(). 那么咱们可以直接在 jsp 里面使用 session 对象。 当然这有一个开关来确定的。 即, 在顶部的 page 指令里面有一个属性叫做 :session=“true” 默认即是 true, 如果是 true , 那么就会创建 session 对象。 所以可以连起来理解就是 :
如果顶部的 page 指令中的 session 属性 的值 是 false , 那么我们在 jsp 页面上,将无法使用 session
对象。因为翻译成的 java 类中,根本没有创建这个对象。 我们一般使用这个对象来存取值。 它是四个作用域之一
- 存取值 其实就是setAttribute 和 getAttribute 而已。 不过需要注意的是: 该对象存的值是一次会话(多次请求和响应)内有效。
4)application 【ServletContext】
该对象是 ServletContext 类的实例, 可以做ServletContext的事情。
但是一般在jsp页面里面,我们使用该对象,多数情况都是来进行存值和取值。它是四个作用域之一 也就是说,我们使用该对象最多的两个方法是:
setAttribute(“name” ,“zhangsna”) getAttribute(“name”); 注意:
该对象的作用域是最大的,直到服务器停止。也就是说,在A.jsp页面中使用该对象存值, 在任何一个jsp页面上,都可以取值。
5)response 【HttpServletResponse】
该对象其实跟给大家介绍过的 doGet / doPost 方法中的那个 HttpServletResponse 参数是一样的。
其实这个对象,就是 HttpServletResponse 的实例。 我们一般使用这个对象来执行 跳转 , 当然也可以执行页面内容输出
- 跳转 写法与 java 代码一致、 response.sendRedirect("");
6)out 【JSPWrite】
该对象其实是 JspWriter 的实例 , 页面上的内容都是靠该对象去执行输出的。
写法如下: <% out.write(“输出的内容”); %>
response 也是可以获取到 PrintWrite 来输出的。
区别: out 的内容其实 先写到 response 的缓冲区来的, 然后先输出 response 自身的内容,尔后再输出 out 的内容
7)config 【ServletConfig】
该对象其实是 ServletConfig 的实例 我们可以在里面获取 Servlet 配置的一些参数。
8)exception 【Throwable】
这个对象,默认 jsp 是不会创建的, 只有在 page 指令里面写上了 isErrorPage=“true” 才会创 建。 连起来解释的话,就是: 只有错误的页面,才会创建该对象。 使用该对象, 我们可以在错误的页面上,输出错误的信息
9)page 【object】
该对象,其实是 jsp 页面翻译成的 java 类的实例, 有点像咱们 java 类中的那个 this
四个作用域的区别
1)pageContext 【PageContext】
作用域仅限当前的页面,还可以取到其他八个内置。
<% pageContext.setAttribute(“name”)%>
<%= pageContext.getAttribute("name)%>
2)request 【HttpServletRequest】
作用域仅限于一次请求,只要服务器对该请求作出了响应,这个域中已经没有了
<% request.setAttribute(“name”)%>
<%= request.getAttribute("name)%>
3)session 【HTTPSession】
作用域仅限于一此会话(多次请求与响应)当中
<% session.setAttribute(“name”)%>
<%= session.getAttribute("name)%>
4)application 【ServletContext】
整个工程都可以访问,服务器关闭后就不能访问了
<% application.setAttribute(“name”)%>
<%= application.getAttribute("name)%>