JSP
JSP
JSP与Servlet相辅相成:
Servlet:逻辑处理方便,页面处理麻烦,JSP:页面表现方便,逻辑处理麻烦。
本质:
JSP是一种动态网页技术:
动态生成网页数据,而不是有动态效果的网页!
常见的几种动态网页技术:
JSP(Java Server Page)
ASP(Active Server Page)
PHP(Hypertext Preprocessor)超级文本预处理语言
本质:
JSP就是Servlet,JSP也是Java类,通过JSP引擎将JSP转译成Servlet
JSP = java+ html
JSP执行流程:

浏览器输入:localhost:8080/jsp/1.jsptomcat收到*jisp请求,则会到
org.apache.jasper.servlet.JspServlet处理
JspServlet调用相应的java类,jsp引擎根据1_jsp生成的java类(位于tomcat子目录work下面:1jsp.java,_1 jsp.class)
执行1 .jsp.class,将HTML数据输出给tomcat, tomcat再将这些数据输出给客户端
使用标签:
编译指令:
page
<%page contentType="text/html; charset=GBK"%>-<%@page import="java.util., java.lang.” %>
<%@ page errorPage="error.jsp" %>
<%--
Created by IntelliJ IDEA.
User: 17612
Date: 2021/6/23
Time: 7:57
To change this template use File | Settings | File Templates.
html注释会被转义成java文件,会发送给浏览器,浏览器不会执行。
java注释:也会被转义,但是不会发送浏览器
jsp注释:不会被转义
page: 用来设置转义侧成Servlet文件时的参数
contentType:表示浏览解析响应信息的时候使用的编码和解析格式
language:表示就jsp要转义成的文件类型
import:导入需要的jar包,多个包使用逗号分割
pageEncoding:设置页面的编码格式
session:用来控制Servlet中是否有session的处理
errorPage:当页面发生逻辑错误的时候跳转的页面
extends:需要转义的servlet类要继承的父类
局部代码块:
可以将java代码跟页面展示的标签写到一个jsp页面中,java代码转义成servlet文件中,java代代码跟输出是保存在service方法中的
代码可读性比较差,开发比较麻烦
一般不使用
全局代码块:
定义公共的方法的时候需要使用全局代码块使用<%%> 生成的代码在servlet类中
调用的时候需要使用局部代码块
脚本调用方法:
使用<%=%>直接调用变量和方法(必须由返回值)
不能在变量或方法后面添加分号
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.*" %>
<%@ page pageEncoding="utf-8" %>
<%@ page errorPage="error.jsp" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%!
String str = "jsp";
%>
<%=str%>
<% int i = 5/0;%>
</body>
</html>
inculde
<%@ include file=“相对位置”%>
静态导入:
-<%@ include file="logojsp”%>
是在servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到jspService方法中),所以只生成了一个servlet,所以两个页面不能
有同名的变量。
运行效率高一点点。耦合性较高,不够灵活。
动态导入
<jsp:include page="logo.jsp"></jsp:include>
是在servlet引擎转译后,请求的此页面,所以共生成了两个servlet,所以可以有同名变量。
生成两个servlet,相当于两个类之间的调用,耦合性较低,非常灵
活。
<%--
Created by IntelliJ IDEA.
User: 17612
Date: 2021/6/22
Time: 9:23
To change this template use File | Settings | File Templates.
页面的导入方式:
静态导入:
<%@include file="1.jsp" %> file中填写的是jsp文件的相对路径
特点:
不会将静态导入的页面生成一个新的servlet文件,而是将两个文件合并
优点:运行效率高,
缺点:两个页面会耦合到一起,不利于维护,两个页面中不能存在相同名称的变量名
动态导入:
两个页面不会进行合并,分别生成自己的servlet文件,但是页面在最终展示的时候是合并到一起的
优点:没有耦合,可以存在同名的变量
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%-- 静态导入--%>
<%@include file="1.jsp" %>
<%-- 动态导入--%>
<jsp:include page="1.jsp"></jsp:include>
</body>
</html>
taglib
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
动作语法:-forword请求转发

Jsp9大内置对象:
<%--
Created by IntelliJ IDEA.
User: 17612
Date: 2021/6/23
Time: 9:14
To change this template use File | Settings | File Templates.
Jsp9大内置对象:
jsp页面在转义成其对应的servlet文件的时候,会自动生明一些对象,在jsp页面中可以直接使用,
内置对象是在jsp页面中使用的,可以在局部代码块中使用也可以在脚本段语句中使用。
pageContext:表示页面的上下问对象,封存了其他的内置对象,封存了当前页面的运行信息
注意:每一个页面都有一个对应的pageContext对象。伴随着当前页面的结束而结束
session: 用来封装同一个用户的不同请求的共享数据,一次会话对应一个session对象
application: 相当于ServletContext对象,一个web项目只有一个对象,存储这所有用户的共享数据,从服务器启动到服务器结束
config:相当于Servletconfig对象,用来获取web.xml配置的数据,完成Servlet的初始化操作
out:响应对象,给jsp内部使用,带有缓冲区的相应对象。效率高于response
page:代表当前jsp对象,相当于java中的this指针
request:封装当前请求数据,有tomcat创建,一次请求对应一个request
response:响应对象,用来响应请求数据,将处理结果返回给浏览器,可以进行重定向
exception: 封装异常对象,存储当前的异常信息。必须在page中添加属性。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
四大作用域:
<%--
Created by IntelliJ IDEA.
User: 17612
Date: 2021/6/23
Time: 9:37
To change this template use File | Settings | File Templates.
四大作用域:
pageContext:表示当前页面,解决当前页面内的数据共享问题,获取其他内置对象
request:一次请求,一次请求的servlet的数据共享,通过请求转发的方式,将数据流转到下一个servlet
session:一次会话,一个用户发送的不同请求之间的数据共享,可以将数据从一个请求流转到其他请求
application:项目内。不同用户的数据共享问题,将数据从一个用户流转到其他用户
路径问题:
想要获取项目中的资源,可以使用相对路径,也可以使用觉得路径。
相对路径:相对于当前页面的路径,资源的位置不可以随便更改,需要使用../的方法进行文件的消除,如果目录结构比较深,可以操作起来比较麻烦
绝对路径:在请求路径的前面加/.表示当前服务器的根路径,使用的时候要添加虚拟项目名称/资源目录
使用jsp中自带的全局路径声明:
<%
String path = request.getContextPath();
System.out.println(path);
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%>
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
System.out.println(path);
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%>
<html>
<head>
<title>Title</title>
<base href="<%=basePath%>">
</head>
<body>
</body>
</html>

浙公网安备 33010602011771号