一,什么是JSP?
jsp----Java Server Page:Java服务器页面
JSP:Java服务器页面
作用是:代替Servlet程序回传Html数据,
servlet程序回传html数据很麻烦,开发成本和维护都很麻烦,所以用JSP来代替回传
JSP如何访问:
jsp和html页面一样,都是存放在web目录下,访问也跟访问html页面一样
二,JSP的本质是什么?
观察翻译过后的源代码发现:
JSP本质上就是一个Servlet程序
底层实现就是通过输出流 将HTML页面数据回传给客户端
三,JSP的三种语法(page、脚本语言、注释)
JSP头部的page指令
可以修改jsp页面中一些重要属性或行为
属性 | 功能 |
---|---|
1.language | 表示JSP翻译后是什么语言文件,暂时只支持JAVA |
2 contentType | 表示jsp返回的数据类型是什么。也是源码中response.setContentType()参数值 |
3 pageEncoding | 表示 jsp当前页面的字符集 |
4 import | 导包,导类 |
以下两个属性给out输出流使用 | ---------------------------------------------------------------- |
5 autoFlush 属性 | 设置out输出流缓冲满了 是否 自动刷新 默认是ture (不改) |
6 buffer 属性 | 设置out 缓冲区的大小,默认8kb (不改) |
这两个设置错误会出现out缓冲区溢出错误 | ----------------------------------------------------------------- |
7 errorPage | 运行出错 跳转去的页面 (斜杠打头,到工程目录) |
8 isErrorPage | 是否有错误页面,默认false ,true则可以捕获异常信息 |
9 session属性 | 设置访问JSP页面是否创建HttpSession对象,默认 true |
10 extends 继承 | 设置翻译后的Jsp页面继承哪个类 |
JSP中常用的脚本
三种脚本
- 声明脚本(不建议使用,违背MVC原则)
- 表达式脚本,(可以与EL表达式配合使用)
- 代码脚本(也不建议使用)
声明脚本
格式:<%!声明%>
<%--声明属性和变量--%>
<%!
private Integer id;
private String name;
private static Map<String,Object> map;
%>
<%--声明静态代码块--%>
<%!
static {
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
}
%>
<%--声明方法--%>
<%!
public static int num(){
return 123;
}
%>
<%--声明内部类--%>
<%!
public static class A{
int a = 1;
}
%>
表达式脚本
格式:<%=表达式%>
作用:在JSP页面上输出数据
特点:
- 所有表达式脚本都会被翻译到_jspService()方法中
- 表达式脚本都会被翻译成为out.print()输出到页面上
- 由于表达式脚本翻译的内容都在_jspService()方法中,因此_jspService()方法中的对象都可以使用
- 表达式脚本不能以分号结束
- 练习: 输出整形 输出浮点型 输出字符串 输出对象
代码脚本
格式:
<% 代码,Java语句 %>
作用:
可以在jsp页面中,编写自己需要的功能(Java语句)(if 语句)(for循环)
(_jspService方法中可以写的代码都可以写)
特点:
翻译之后都在_jspService()方法中
_jspService()方法中现有的对象都可以使用
可以拆分,可以有多个代码脚本组成一个完整的java语句
还可以和表达式脚本组合使用,在jsp上输出数据
注释:
html注释
<!--html注释-->
java注释
//java注释
/* java注释*/
jsp注释:
<%--jsp注释--%>
四,九大内置对象
“ jsp页面翻译后自动创建的九个对象成为九大内置对象(包括四个域对象) ”
jsp内置变量名 | 对应对象含义 |
---|---|
request | 请求对象 |
response | 响应对象 |
pageContext | jsp上下文对象 |
session | 会话对象 |
application | ServletContext对象 |
config | ServletConfig对象 |
out | jsp输出对象 |
page | 指向当前jsp对象 |
exception | 异常对象 |
五,四大域对象
四个域对象分别是:
内置对象名 | 隶属于类 | 隶属于类 |
---|---|---|
pageContext | (PageContextImpl类) | 当前jsp页面范围有效 |
request | (HttpServletRequest类) | 一起请求内有效 |
session | ((HttpSession类) | 一次会话范围有效(打开浏览器,直到关闭浏览器) |
application | (ServletContext类) | 整个web工程范围内有效(工程不停止,数据都在) |
域对象时可以和Map一样存取数据的对象,四个域对象功能一样,但是他们对数据的存取范围不一样。
六,JSP中的out和response.getWriter()
jsp翻译之后的源代码都是以out来进行输出的,所以一般情况下,我们用out来进行输出,以免打乱页面顺序
out.write() 输出字符串没问题(仅仅输出字符串没问题)
out.print() 输出任何数据都没问题(都会转成字符串来调用out来输出)
七,常用JSP标签
三种常用标签:静态包含,动态包含,请求转发
适用场景:大规模的web工程,前端页面需要更改时,仅需要更改被包含的页面,无需一个一个修改,例如,网站页脚信息。
静态包含:
语法:<%@ include file = “路径” %>file 属性指定你要包含的jsp页面
静态包含的特点:
- 静态包含不会翻译被包含的jsp页面
- 静态包含其实就是把被包含的jsp页面的代码拷贝到包含的位置执行输出
动态包含:
语法:<jsp: include: page=“页面路径名”><jsp:include >
动态包含还可以传递参数
请求转发:
jsp请求转发
格式:
<jsp:forward page = " /scope2.jsp"></jsp:forward>
request请求转发
格式:
request.getRequestDispatcher(path:“工程路径下目标页面”).forward(request,response);
JSP请求转发:
不可直接访问JSP,不然会空指针,因为没有经过Servlet程序
拓展, 什么是Listener监听器?
- 一、Listener监听器是JavaWeb三大组件之一,三大组件分别是:Servlet程序,Fitter过滤器,Listener监听器。
- 二、Listener监听器就是JavaEE的规范,就是接口
- 三、监听器的作用,监听某种事物的变化,然后通过回调函数,反馈给客户(程序)去做一些相应的处理
最有用的监听器ServletContextListener
ServletContextListener 监听器
- ServletContextListener他可以监听ServletContext对象的创建与销毁
- ServletContext对象在web工程启动的时候创建,
- ServletContext对象在web工程结束的时候销毁,
- 监听到创建和销毁之后会调用ServletContextListener 监听器的两个方法进行反馈,
- 两个方法是:
public interface ServletContextListener extends EventListener {
//在ServletContext对象创建之后马上调用,做初始化
void contextInitialized(ServletContextEvent var1);
//在ServletContext对象销毁之后马上调用
void contextDestroyed(ServletContextEvent var1);
}
如何使用:框架阶段研究
如何配置:在web.xml文件中配置
<!--配置监听器-->
<listener>
<listener-class> ServletContextListener接口实现类 的全类名</listener-class>
</listener>