一、jsp中的out输出和response.getWriter输出的区别
response中表示响应,经常用于设置返回客户端的内容(输出)
out也是给用户做输出使用的
代码演示:
<%--
Created by IntelliJ IDEA.
User: Peter
Date: 2022/10/20
Time: 19:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
out.write("out输出1 <br/>");
out.flush();
out.write("out输出2 <br/>");
out.write(12);
out.print(12);
//out.write()输出字符串没有问题
//out.print()输出任意数据都没有问题(都转换成为字符串后调用的write输出)
response.getWriter().write("response输出1 <br/>");
response.getWriter().write("response输出2 <br/>");
%>
</body>
</html>
Eg:
- 由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下。在jsp页面中统一使用out来进行输出,避免打乱页面输出内容的顺序。
- 在jsp页面中,可以统一使用out.print()来进行输出
二、jsp的常用标签
- jsp静态包含
- 特点:
- 静态包含不会翻译被包含的jsp页面
- 静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出。
- 代码演示
- 特点:
<%@ include file="/include/footer.jsp" %>
//file属性指定你要包含的jsp页面的路径
//地址中第一个斜杠 / 表示为http://ip:port/工程路径/ 映射到代码的web目录
- jsp动态包含
- 特点:
- 动态包含会把包含的jsp页面也翻译成为java代码
- 动态包含底层代码使用如下代码去调用被包含的jsp页面执行输出。(JspRuntimeLibrary.include(request,response,”/include/footer.jsp”,out,false))
- 动态包含,还可以传递参数
- 代码演示
- 特点:
<jsp:include page="/include/footer.jsp">
<jsp:param name="username" value="bbj"/>
<jsp:param name="password" value="root"/>
</jsp:include>
1. jsp标签-转发
代码演示:
<%
// request.getRequestDispatcher("/scope2.jsp").forward(request, response);
%>
<%--<jsp:forward page=""></jsp:forward>-- 是请求转发标签,它的功能就是请求转发
page 属性设置请求转发的路径
--%>
<jsp:forward page="/scope2.jsp"></jsp:forward>
三、Listener监听器
解析:
- Listener监听器是Javaweb的三大组件之一。
- Listener是JavaEE的规范,就是接口
- 监听器的作用是:监听某种事物的变化。然后通过回调函数,反馈给客户去做一些相应的处理
ServletContextListener监听器
- ServletContextListener可以监听ServletContext对象的创建和销毁
- ServletContext对象在web工程启动的时候创建,在web工程停止的时候销毁
- 监听到创建和销毁之后会分别调用ServletContextListener监听器的方法反馈
如何使用ServletContextListener监听器监听ServletContet对象?
步骤:
- 编写一个类去实现ServletContextListener
- 实现其两个回调方法
- 到web.xml中去配置监听器
代码演示:
package listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListenerImpl implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象被创建了");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象被销毁了");
}
}
配置监听器:
<listener>
<listener-class>listener.MyServletContextListenerImpl</listener-class>
</listener>