JSP概述:
什么是JSP:java服务器端页面,它是建立在servlet规范基础上的动态网页开发技术。
java服务端页面:在jsp可以写java代码,也可以写HTML标记,它运行在服务器端。
jsp=java+html+jsp自身的一些东西。
为什么会产生jsp技术?
因为在早期没有jsp时,需要servlet向页面写数据,比较麻烦,所以产生了jsp技术。
jsp其实它的本质是servlet。
可以看到jsp继承了HttpJspBase 继承 HttpServlet
jsp生成java文件,编译成class文件,存在Tomcat服务器的work目录下。
jsp运行原理:
1.通过浏览器首次访问jsp时,
2.jsp容器会生成对应的servlet文件,也就是.java文件。
3.jsp容器,会把生成的java文件编译成对应的class文件。
4.jsp容器,会生成对应的servlet对象
5.通过生成的servlet对象,去处理浏览器发送的请求,响应数据到浏览器。
JSP基本语法
jsp的脚本元素
在jsp页面中书写java的三种方式:
1.可以声明语句和方法
2.可以书写java代码
3.可以书写表达式
jsp书写java代码对应的位置在_jspService方法内。局部内
声明式:对应的位置是在生成在成员位置,成员内
jsp表达式:对应的位置生成在成员位置。
<%=表达式%,其实就相当于out.print(),注意表达式后面不能写分号。
<%@ page import="com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput" %>
<%@ page import="org.w3c.dom.ls.LSOutput" %><%--
Created by IntelliJ IDEA.
User: 86133
Date: 2021/9/1
Time: 15:39
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>
<%--一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,您必须先声明这些变量和方法然后才能使用它们。--%>
1.<% %>叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中,显然我们可以在Service方法中定义局部变量或者调用其他方法,但是不能
在Service中再定义其他的方法,也就是我们可以在<%%>中定义局部变量或者调用方法,但不能定义方法。在jsp页面可以有多个脚本片段,但是多
个脚本片段之间要保证结构完整。
<% int a =2;
System.out.println(a);
int b=6;
System.out.println(a>b);
method();
System.out.println(c);
//方法里不能在嵌套方法,所以一般式不能写方法,可以调用声明式的方法
%>
<%
System.out.println(a);
System.out.println(c);
%>
<%!%>称作声明,其中写的内容将来会直接翻译在Servlet类中,因为我们可以在类中定义方法和属性以及全局变量,所以我们可以在<%!%>中声
明方法、属性、全局变量。
<%!
public void method(){
System.out.println("哈哈");
}
private int c=20;
%>
<%--声明式是在类的下面,方法的上面,属于成员变量或者方法,而一般式是在方法中,属于局部变量--%>
<%--<%=method()%> <%–//需要输出到浏览器页面显示–%>--%>
<%--3.<%=%>称作jsp表达式,用于将已经声明的变量或者表达式输出到网页上面。--%>
<%=application.getAttribute("name")%>
</body>
</html>
jsp指令:page指令,include指令,taglib指令。
page指令的用途是设置与jsp页面相关的信息,比如jsp页面的编码格式,默认语言,
基本语法:<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
import属性:用于导包,和java里面一样,使用哪个类,导入某个类的包。
include指令
在jsp页面通常会需要显示其他的页面,所以可以通过这个include指令把其他页面包含过来,
基本语句:<%@ include file=“被包含页面的URL” %>
静态包含的特点:
1.把多个页面的内容,合并输出,
2.多个页面的对应生成一个java文件,编译后生成一个class文件。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<% out.write(new Date().toLocaleString());%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
当前时间是:
<%@ include file="date.jsp"%>
</body>
</html>
jsp九大隐式对象
request:HttpServletRequest,请求对象,它同时也是域对象,作用范围一次请求。
response:HttpServletResponse,响应对象。
session:HttpSession,会话对象,它同时也是域对象,作用范围是一次回话。
application:ServletContext;上下文对象,它同时也是域对象,作用范围整个项目。
config:ServletConfig;配置对象。
out:jspWriter;其实和printwriter作用差不多。
page:Object;代表当前jsp页面对象。
pageContext:PageContext;jsp容器。
exception:Throwable,异常对象,用来捕获异常。
out对象:
pageContext对象
1.获取其他八大隐式对象。
例如:获取请求对象; getRequest();
获取响应对象;getResponse();
获取输出对象;getOut();
…
2.操作其他三个域对象。
request session application
pageContext也是一个域对象,范围是当前jsp页面。
存值:
setAttribute(String key,Object obj,int scope);
APPLICATION_SCOPE;对应的是application
REQUEST_SCOPE;对应的request
SESSION_SCOPE;对应的session
PAGE_SCOPE;对应自己
取值:
getAttribute(String key,int scope);
结论:在pageContext域对象使用findAttribute方法时,进行全局查找。
查找范围 pageContext -request -session- application
首先查找范围小的对象,如果有值,获取到,没有继续向下找。