什么是JSP
JSP全名为Java Server Pages,中文名叫java服务器页面,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段和JSP标记,后缀名为(*.jsp),其根本是一个简化的Servlet设计。
为什么要有JSP
直接使用Html文件是没有办法输出Java当中的信息,使用servlet来去输出一个网页非常的麻烦,于是就出现了jsp,又能写html,又能写Java代码。
JSP的组成部分
- 静态数据,如HTML
- JSP脚本元素和变量
- JSP指令,如include指令
- JSP标签动作
- 用户自定义标签
JSP脚本元素和变量
- 在JSP当中写Java代码
- <%java代码%> 用来输出内容。
- <%!java代码%> 用来定义成员变量属性和方法。
- <%=java变量或表达式%> 会被翻译成service方法内部out.print()
- JSP注释
HTML注释: 可见范围 jsp源码、翻译后的servlet、页面
Java注释
Jsp注释,<%–注释内容–%>
JSP指令
- 什么是指令
JSP指令用于设置整个JSP页面的相关信息,以及用于JSP页面与其它容器之间的通信。 - page指令:用于设定整个JSP页面的属性和相关功能 ,多个属性之间使用空格隔开。
指令 | 功能 |
---|---|
contentType | contentType属性指定JSP页面的MIME和编码格式 |
pageEncoding | pageEncoding属性用来指定JSP文件的编码格式 |
import | 在JSP中引入Java的包和类,多个包之间以逗号隔开 |
session | 指定当前页面是否能获得当前用户的session对象缺省是true,如果指定为false,那么在该页面中无法使用session,使用的话会提示500错误 |
errorPage | 如果当前页面发生异常,网页会重定向到errorPage所指定的页面进行处理 |
language属性 | 指定页面中使用的脚本语言种类,目前只支持java |
extends | 用于指定该JSP生成的servlet继承自哪个父类,必须指定包名加类名 |
buffer | 用来设置输出流缓冲区,缓冲区的作用就是为了提高IO性能,也就是说减少write的次数 |
autoFlush | 用来指定当输出流缓冲区满了的时候,是否自动刷新缓冲区 |
isThreadSafe | 缺省值为true,指定该JSP文件是否支持多线程访问 |
info | 用来设置该jsp文件的介绍信息 |
isELIgnored | 用来标示是否支持EL表达式 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- include指令
表示在JSP编译时插入一个包含文件或者代码的文件,include指令所包含的文件名不能是一个变量url,只能是静态的文件名。将两个jsp页面接着到一起, 然后再翻译成servlet。file属性的设置值必须使用相对路径。
<%@ include file="被包含的的文件的地址"%>
- taglib指令
作用:声明JSP文件使用了标签库
有哪些标签库:
- JSP标准标签库
- 第三方标签库
- 自定义标签库
jsp动作元素
页面包含:<jsp:include page=“被包含的页面”></jsp:include>
动态包含,各自翻译自己的页面,然后再引入。
请求转发:<jsp:forward page=“要转发的资源”></jsp:forward>
隐式对象
jsp被翻译成servlet之后,service方法中有9个对象定义并初始化完毕。
out | out的类型:JspWriter,out作用就是想客户端输出内容 out.write(),out缓冲区默认8kb, 可以设置成0 代表关闭out缓冲区内容直接写到respons缓冲区,out写的内容写到out缓冲区当中,最后再把out缓冲区当中的内容合并到response缓冲区当中。 |
---|---|
request | 得到用户请求信息对象 |
config | 服务器配置,可以取得初始化参数 |
session | 用来保存用户会话的信息 |
application | 所有用户的共享信息,就是servletContext |
page | 指当前页面转换后的Servlet类的实例 |
pageContext | jsp页面的上下文对象,是一个域对象。 |
exception | 表示JSP页面所发生的异常,在错误页中才起作用,只有是错误页面的时候,才会有该对象。 |
pageContext:
可以向指定的其他域中存取数据,可以获得其他8大隐式对象。
setAttribute(“name”,"lk",PageContext.REQUEST_SCOPE);
getAttribute("lk",PageContext.REQUEST_SCOPE);
/*自动到所有的域当中找数据
从小到大的范围搜索数据
依次从pageContext域,request域,session域,application域中获取属性
在某个域中获取后将不在向后寻找
*/
findAttribute(String name)
pageContext.getRequest();
pageContext.getSession();