而HttpJSPBase类直接继续于HttpServlet类,即JSP翻译出来的Java类间接继续于HttpServlet类,证明JSP页面是一个Servlet程序

三、JSP的语法

JSP头部的page指令:

JSP头部的page指令可以修正JSP页面中的一些主要属性或行为

jsp使用JSP的根本应用总结 JavaScript

(以下属性均写在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代码 %&gt;

浸染:可以给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方法调用

[机警]点击获取资料