而HttpJSPBase类直接继续于HttpServlet类,即JSP翻译出来的Java类间接继续于HttpServlet类,证明JSP页面是一个Servlet程序
三、JSP的语法JSP头部的page指令:
JSP头部的page指令可以修正JSP页面中的一些主要属性或行为
(以下属性均写在page指令中,默认page指令中没有涌现的属性都采取默认值):
(1) contentType属性:表示JSP返回的数据类型是什么,即response.setContentType()的参数值
(2) language属性:表示JSP翻译之后是什么措辞文件(目前只支持Java)
(3) pageEncoding属性:表示当前JSP文件本身的字符集(可在IDEA右下角看到)
(4) import属性:表示导包(导类),与Java同等
(5) autoFlush属性:设置当out输出流缓冲区满了之后是否自动刷新缓冲区,默认值是true
(6) buffer属性:设置out缓冲区的大小,默认是8kb
把稳:out缓冲区满了之后不能自动刷新的话会报错
(7) errorPage属性:设置当JSP页面运行出错时自动跳转到的页面(缺点信息页面)的路径,这个 路径一样平常都因此斜杠打头,表示要求的地址是http://ip:port/工程路径/,对应代码web目录
(8) isErrorPage属性:设置当前JSP页面是否是缺点信息页面,默认是false,如果是true可以 获取缺点信息
(9) session属性:设置访问当前JSP页面时是否会创建HttpSession工具,默认值是true
(10) extends属性:设置JSP页面翻译出来的Java类默认继续谁
把稳:以上默认值除非有分外须要,否则不建议修正
四、JSP中的常用脚本1. 声明脚本格式:<%! 声明Java代码 %>
浸染:可以给JSP翻译出来的Java类定义属性、方法、静态代码块、内部类等
特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中
代码演示:声明脚本的利用(此JSP文件在web目录下,名为First.jsp)
%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--1.声明类属性--%>
<%!
private String name;
private static Map<String, Object> map;
%>
<%--2.声明类方法--%>
<%!
public int sum() {
return 12;
}
%>
<%--3.声明静态代码块--%>
<%!
static {
map = new HashMap<String, Object>();
map.put("key1", "value1");
}
%>
</body>
</html>
对应的翻译后的java源文件:
2. 表达式脚本
格式:<%=表达式 %>
浸染:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)
特点:
(1) 所有的表达式脚本都会被翻译到对应的Java类的_jspService()方法中,故表达式脚本可以 直策应用_jspService()方法参数中的工具
(2) 表达式脚本都会被编译后的Java类中的out.print()方法输出到浏览器页面上
(3) 表达式脚本中的表达式不能以分号结束
代码演示:表达式脚本的利用(此JSP文件在web目录下,名为First.jsp)
<%=22 %> <br/>
<%="可以输出字符串" %> <br/>
<%=map %> <br/>
<%--利用_jspService方法中的工具--%>
<%=request.getParameter("username") %>
启动Tomcat做事器后浏览器的运行结果:
对应的翻译后的Java源文件(在_jspService方法中):
把稳:
1.write方法中的标签、转义字符自动识别为对应的
功能,不在页面输出,实行各自代表的功能
2.out的两个方法也在_jspService方法中,也都是java措辞
3.只有print、write方法、表达式脚本中的内容才可在浏览器中显示,别的Java代码的sout在掌握台输出
3. 代码脚本格式:<% Java语句 %>
浸染:在JSP页面中可以编写须要的Java代码
特点:
(1) 代码脚本翻译后都在_jspService方法中,故代码脚本可以直策应用此方法参数中的工具
(2) 可以由多个代码脚本块组合完成一个完全的Java语句
(3) 代码脚本还可以和表达式脚本一起组合利用,在JSP页面上输出数据
代码演示:代码脚本的利用(此JSP文件在web目录下,名为First.jsp)
<%--1.if语句--%>
<%
int i = 1;
if (i == 1) {
System.out.println("我爱祖国!
");
} else {
System.out.println("我很爱祖国!
");
}
%> <br/>
<%--2.for循环语句--%>
<%
for (int j = 0 ; j < 3; j++) {
System.out.println("第" + j + "次循环");
}
%> <br/>
<%--3.利用_jspService方法参数中的工具--%>
<%
String username = request.getParameter("username");
System.out.println("username对应的值为:" + username);
%>
运行结果:
启动Tomcat做事器后在地址栏输入:http://localhost:8080/MyTest/First.jsp?username=Jaychou
在掌握台显示:
对应的翻译后的Java源文件(在_jspService方法中):
五、JSP三种注释
1.HTML注释:<!--HTML注释-->
HTML注释会被翻译到JSP文件对应的Java类的_jspService方法中,以out.write()输出到客户端,
write方法会自动识别标签,实行标签对应的功能,不会在浏览器的页面上输出注释
2.Java注释:(1) //单行注释 (2) /多行注释/
Java注释要写在声明脚本和代码脚本中才被认为是Java注释,会被翻译到JSP文件对应的Java类的_jspService方法中,在对应的Java类中也是注释
3.JSP注释:<%- -这是JSP注释- -%>
JSP注释中的内容不会在JSP文件翻译后的Java类中涌现,即注释中的内容没有任何功能
六、JSP九大内置工具JSP的内置工具指的是Tomcat做事器将JSP页面翻译为Java类之后内部供应的九大工具:
(将page指令的isErrorPage属性写成true可以涌现exception工具)
request:要求工具
response:相应工具
pageContext:JSP的高下文工具
session:会话工具
application:ServletContext工具
config:ServletConfig工具
out:JSP输出流工具
page:指向当前JSP的工具
exception:非常工具
七、JSP四大域工具域工具是指可以像Map一样存取数据的工具,四个域工具功能一样,只是对数据的存取范围不同
代码演示1:四个域工具存取数据的范围的不同(在web目录下创建scope1.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>scope1</title>
</head>
<body>
<h1>scope1.jsp页面</h1>
<%
//向四个域工具等分别保存数据
pageContext.setAttribute("key", "pageContext");
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
%>
<%-- <jsp:forward page=""></jsp:forward>是要求转发标签,
page属性设置要求转发的路径 --%>
<jsp:forward page="/scope2.jsp"></jsp:forward>
</body>
代码演示2:在web目录下创建scope2.jsp
<head>
<title>Title</title>
</head>
<body>
<h1>scope2.jsp页面</h1>
<%-- JSP页面中不加任何标签直接输入的内容被write方法输出在浏览器的页面上 --%>
pageContext域是否有值:<%=pageContext.getAttribute("key")%> <br>
request域是否有值:<%=request.getAttribute("key")%> <br>
session域是否有值:<%=session.getAttribute("key")%> <br>
application域是否有值:<%=application.getAttribute("key")%> <br>
</body>
运行结果1:
运行结果2:
把稳:若四个域工具在利用时范围都可知足哀求,则利用的优先顺序是(范围从小到大):
pageContext --> request --> session --> application
八、JSP的out输出和response.getWriter输出的异同1.相同点:response表示相应,用于给客户端(浏览器)返回内容
out同样也是用于给客户端(浏览器)输出内容
2.不同点:
3.把稳:由于官方的代码中翻译后的Java代码底层都是利用out进行输出,故一样平常都利用out进行 输出,out又分为write方法和print方法:
(1) out.print():会将任何内容转换成字符串后调用write方法输出
(2) out.write():输出字符串没有问题,但输出int型时会将int转换成char输出,导致输出的并非是想要的数字而是数字对应的ASCII码
结论:JSP页面的代码脚本中任何要输出在浏览器的内容均利用out.print()方法
九、JSP的常用标签1. 静态包含(1)利用场景:
(2)利用方法:
<%@include file=""%>
个中file属性设置要包含的JSP页面,以/打头,代表http://ip:port/工程路径/,对应web目录
代码演示1:在web目录下创建body.jsp
<body>
头部信息 <br>
主体信息 <br>
<%@include file="/foot.jsp"%>
</body>
代码演示2:在web目录下创建foot.jsp
<body>
页脚信息 <br>
</body>
运行结果:
(3)静态包含的特点:
①静态包含不会将被包含的JSP页面翻译成.java.class文件
②静态包含是把被包含的页面的代码拷贝到body.jsp对应的Java文件的对应位置实行输出
2. 动态包含(1)利用方法:
<jsp:include page=””></jsp:include>
个中page属性设置要包含的JSP页面,与静态包含同等
(2)动态包含的特点:
①动态包含将被包含的JSP页面翻译成.java.class文件
②动态包含还可以通报参数
③动态包含底层利用如下代码调用被包含的JSP页面实行输出:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, “/foot.jsp”, out, false);
代码演示1:在web目录下创建body.jsp
<body>
头部信息 <br>
主体信息 <br>
<jsp:include page="/foot.jsp">
<jsp:param name="username" value="Jaychou"/>
<jsp:param name="password" value="root"/>
</jsp:include>
</body>
把稳:
设置参数的标签要写在动态包含之中涌现Expecting “jsp:param” standard action with “name” and “value” attributes非常,两个缘故原由:①动态包含中未设置参数但没有把<jsp:include page=””></jsp:include>放在一行上
②动态包含中加了注释
代码演示2:在web目录下创建foot.jsp
<body>
页脚信息 <br>
<%=request.getParameter("username")%>
</body>
运行结果:
(3)动态包含的底层事理:
十、ServletContextListener监听器1. Listener监听器的先容
(1) Listener监听器是JavaWeb的三大组件之一
(2) Listener监听器是JavaEE的规范(接口)
(3) Listener监听器的浸染是监听某件事物的变革,然后通过回调函数反馈给程序做一些处理
2. ServletContextListener监听器ServletContextListener监听器可以监听ServletContext工具的创建和销毁(web工程启动时创建,停滞时销毁),监听到创建和销毁之后都会调用ServletContextListener监听器的方法进行反馈:
public interface ServletContextListener extends EventListener {
//在ServletContext工具创建之后调用
public void contextInitialized(ServletContextEvent sce);
//在ServletContext工具销毁之后调用
public void contextDestroyed(ServletContextEvent sce);
}
3. ServletContextListener监听器的利用步骤(1) 编写一个类实现ServletContextListener接口
(2) 重写两个方法
(3) 在web.xml文件中配置监听器
代码演示1:创建一个类
ublic class ListenerTest implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext工具创建");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext工具销毁");
}
}
代码演示2:在web.xml中配置
<listener>
<!-- <listener-class>标签中写上述程序的全类名 -->
<listener-class>com.qizegao.servlet.ListenerTest</listener-class>
</listener>
运行结果:
Tomcat做事器启动之后掌握台输出ServletContext工具创建
Tomcat做事器停滞之后掌握台输出ServletContext工具销毁
把稳:
查看翻译后的Java源文件的方法:启动Tomcat做事器访问到JSP页面之后在掌握台输出的信息的前端找到Using CATALINA_BASE中的路径,在硬盘中打开此目录,点击work --> Catalina --> localhost,找到对应的工程文件夹探求即可访问JSP页面实在是在实行对应的翻译后的Java代码的_jspService方法:翻译后的Java类中没有service方法,而是重写了父类的_jspService方法,这个方法会被父类的service方法调用[机警]点击获取资料