好久没写文章了,虽然大家现在都在说jsp可以不用学了,但是难免以后会遇到,所以我就学了。
其实jsp我很早就学了,但是我忘了,所以决定写篇文章来复习巩固一下;
下面先放一张jsp的主要知识点吧,关于EL表达式和JSTL标签库的内容下次再补上;
一、JSP是什么?有什么用?
JSP的全称是Java Server Pages。也就是Java的服务器页面。
其主要作用是:代替Servlet程序回传html页面的数据。因为Servlet回传html页面是一件非常麻烦的事情,所以就有了jsp。
二、JSP的本质是什么?
JSP的本质是一个Servlet程序。当我们在浏览器上第一次访问这个jsp页面的时候,Tomcat服务器会帮我们把所访问的jsp页面翻译成
一个Java源文件,并且编译成.class字节码文件。
打开Tomcat的解压目录,apache-tomcatworkCatalinalocalhostROOTorgapachejsp就会发现下面两个文件:
接着打开index.java文件,我们惊奇的发现,jsp这个类继承了HttpJspBase类,而HttpJspBase类继承了HttpServlet类,这就是jsp的本质。
三、JSP的三种语法
(1)我们先讲头部的page指令。要想使用jsp得先写这个才行!
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
这个page有如下几个属性:
i. language: 表示jsp翻译过后是什么语言,目前为止只有Java语言支持。(看来曾经jsp还是很有野心的)
ii. contentType: 表示jsp返回的数据类型是什么,等同于response.setContentType()参数值。
iii. pageEncoding: 表示当前jsp文件的字符集。
iV. import: 和Java中的import一样,用于导包和导类。
V. autoFlush: 设置当out输出缓冲区满了以后是否自动刷新缓冲区的。默认值是true,也就是刷新。改为false当缓冲区满会报错。
Vi. buffer: 设置out缓冲区的大小,经过sun公司不停实验,默认值8kb是最好的。
Vii. errorPage: 设置当jsp页面运行出错时,自动跳转去的错误页面路径。
Viii. isErrorPage: 设置当前jsp页面是否是错误页面。默认为false,设置为true可获取异常信息。
iX. session: 设置访问当前jsp页面是否会创建HttpSession对象,默认为true。
X. extends: 设置jsp翻译出来的Java类继承谁。
(2)常用脚本:
1)声明脚本: <%! 声明类属性、static静态代码块、声明类方法、声明内部类 %> (极少使用)
2)表达式脚本:<%= 表达式(整型、浮点型、字符串、对象) %>
作用:可以在jsp页面上输出数据 (常用,但是我们一般用EL表达式替换它)
注意: 1、所有的表达式脚本都会被翻译到_jspService()方法中,该方法在jsp翻译出来的类中。
2、表达式脚本都会被翻译到out.print()输出到页面上。
3、被翻译到_jspService()方法中,所以该方法中的所有对象都可以直接使用。
4、表达式脚本不能用分号结尾。
3)代码脚本:<% Java语句 %> (常用,但是我们会用JSTL标签库替换它)
作用:可以在jsp页面中,编写我们自己需要的功能。比如实现一个九九乘法口诀表。
注意:1、2、点同上。
3、可以由多个代码脚本组合在一起完成一个完整的Java语句(写出来的代码可读性差)
4、可以和表达式脚本组合起来使用。
(3)三种注释
i. html注释 <!-- 这是注释 -->
ii. java注释 单行注释和多行注释都可以用,不过要写在代码脚本中
iii.真正的jsp注释 <%-- jsp注释 --%> 可以注释掉上面两种注释
四、九大内置对象
①request 请求对象 ②response 响应对象 ③pageContext jsp的上下文对象 ④session 会话对象 ⑤application ServletContext对象
⑥config ServletConfig对象 ⑦out jsp输出对象 ⑧page 指向当前jsp的对象 ⑨exception 异常对象
这九个对象其中的四大域对象是比较重要的。从上到下为从小到大的范围顺序。
可以通过 XX对象.setAttribute(key,value)的方式往域中保存数据,也可以通过getAttribute(key)得到数据
pageContext 当前jsp页面内有效
request 一次请求内有效
session 一次会话内有效,关掉浏览器就没了
application 整个web工程内有效,除非web工程停止或者服务器重新部署
五、jsp中的out输出和response.getWriter输出的区别
首先jsp的翻译文件都是通过out来进行输出的,所以我们一般也用out。
这里一共牵扯到三种方法:
①out.write() 输出字符串没问题,但是其他数据类型有问题。翻译的源码中也是用的这个
②out.print() 输出任意数据都没有问题(都是通过转换成为字符串以后调用的write()方法输出)
③response.getWriter().write()
当jsp中的所有代码执行完成后会执行out.flush()操作,然后将out缓冲区中的数据追加写入到response缓冲区末尾,
然后执行response的刷新操作,把所有数据写给客户端。所以会导致response的输出内容总在out的输出内容前面。
六、jsp常用标签
a)jsp静态包含
<%@ include file="/include/footer.jsp" %>
特点:
1、静态包含不会翻译被包含的jsp页面。
2、静态包含其实就是把被包含的jsp页面的代码拷贝到包含的位置执行输出。
3、file属性指定要包含的jsp页面的路径,其中的第一个/映射到你的web目录。
b)jsp动态包含
<jsp:include page="/include/footer.jsp">
<jsp:param name="username" value="root"/>
</jsp:include>
特点:
1、page属性是你要包含的jsp页面,也翻译成Java代码。也把被包含的内容执行输出到包含位置。
2、动态包含底层调用如下代码去调用被包含的jsp页面执行输出。
JspRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);
3、动态包含可以传递参数,如上面代码所示。
c)请求转发标签
<jsp:forward page=""></jsp:forward>
page里面写你要转发的路径。
以上就是本期jsp的全部内容啦,感谢大家查看。