jsp简介
jsp的全称是java server pages。Java的服务器页面。
jsp的主要作用是代替Servlet程序回传html页面的数据。
因为Servlet程序回传html页面数据是一件非常繁琐的事情。开发成本和维护成本都极高。
jsp页面和html页面一样,都是存放在web目录下。访问也跟访问html页面一样。
jsp的本质
jsp页面的本质上是一个Servlet程序
jsp的三种语法
a) jsp头部的page指令
jsp的page指令可以修改jsp页面中一些重要的属性,或者行为。
<%@ page contextType="text/html;charset=UTF-8" language="java" %>
b) jsp中的常用脚本
i. 声明脚本(极少使用)
声明脚本的格式是:<%! 声明java代码 %>
作用:可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块,内部类等。
ii. 表达式脚本(常用)
表达式脚本的格式是:<%=表达式%>
表达式脚本的作用是:在jsp页面上输出数据。
表达式脚本的特点:
1、所有的表达式脚本都会被翻译到_jspService() 方法中。
2、表达式脚本都会被翻译成为out.print()输出到页面上。
3、由于表达式脚本翻译的内容都在_jspService()方法中,所以_jspService()方法中的对象都可以直接使用。
4、表达式脚本中的表达式不能以分号结束。
iii.代码脚本
代码脚本的格式是:
<%
java 语句
%>
代码脚本的作用是:可以在jsp页面中,编写我们自己需要的功能(写的是java语句)。
代码脚本的特点是:
1、代码脚本翻译之后都在_jspService()方法中。
2、代码脚本由于翻译到_jspService()方法中,所以在_jspService()方法中的现有对象都可以直接使用。
3、还可以由多个代码脚本块组合完成一个完整的java语句。
4、代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据。
jsp九大内置对象
jsp中的内置对象,是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的九大对象,叫内置对象。
jsp的九大内置对象
request 请求对象
response 响应对象
pageContext jsp的上下文对象
session 会话对象
application ServletContext对象
config ServletConfig对象
out jsp输出流对象
page 指向当前jsp的对象
exception 异常对象
jsp四大域对象
四个域对象分别是:
pageContext (PageContextImpl类) 当前jsp页面范围内有效
request (HttpServletRequest类) 一次请求内有效
session (HttpSession类) 一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器)
application (ServletContext类) 整个web工程范围内都有效(只要web工程不停止,数据都在)
域对象是可以像Map一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。
虽然四个域对象都可以存取数据。在使用上它们是有优先顺序的。
四个域在使用的时候,优先顺序分别是它们从小到大范围的顺序。
pageContext ==>> request ==>> session ==>> application
jsp中的out输出和response.getWriter输出的区别
response中表示响应,我们经常用于设置返回给客户端的内容(输出)
out也是给用户做输出使用的。
由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下。我们在jsp页面中统一使用out来进行输出。避免打乱页面输出内容的顺序。
out.write() 输出字符串没有问题
out.print() 输出任意数据都没有问题
jsp的常用标签
a) jsp静态包含
<%@ include file=""%> 就是静态包含
file属性指定你要包含的jsp页面的路径
静态包含的特点:
1、静态包含不会翻译被包含的jsp页面。
2、静态包含其实是把被包含的jsp页面的代码拷贝到静态包含的位置执行输出。
b) jsp动态包含
<jsp:include page=""> </jsp:include> 这是动态包含
page属性是指定你要包含的jsp页面的路径
动态包含的特点:
1、动态包含会把包含的jsp页面也翻译成为java代码
2、动态包含,还可以传递参数
<jsp:include page="/include/footer.jsp">
<jsp:param name="username" value="bbj"/>
<jsp:param name="password" value="root"/>
</jsp:include>
动态包含的底层原理:
c) jsp标签-转发
<jsp:forward page=""></jsp:forward> 是请求转发标签,它的功能就是请求转发。page属性设置请求转发的路径。
Listenner监听器
Listener监听器是JavaWeb的三大组件之一。JavaWeb的三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
Listener它是JavaEE的规范,就是接口
监听器的作用是:监听某种事物的变化。然后通过回调函数,反馈给程序去做一些相应的处理。
ServeltContextListenner监听器
ServletContextListenner它可以监听ServletContext对象的创建和销毁。
ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁。
监听到创建和销毁之后都会分别调用ServletContextListener监听器的方法进行反馈。
public interface ServletContextListenner extends EventListener{
/**
* 在ServletContext对象创建之后马上调用,做初始化
*/
public void contextInitialized(ServletContextEvent sce);
/**
* 在ServletContext对象销毁之后调用
*/
public void contextDestroyed(ServletContextEvent sce);
}
如何使用SevletContextListener监听器监听ServletContext对象
使用步骤如下:
1、编写一个类去实现ServletContextListenner
2、实现其两个回调方法
3、到web.xml中去配置监听器
监听器实现类:
public class MyServletContextListenerImpl implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext对象被创建了");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext对象被销毁了");
}
}
web.xml中的配置
<!-- 配置监听器 -->
<listenner>
<listener-class>com.atguigu.listener.MyServletContextListenerImpl</listenner-class>
</listener>