Java Server Page

JSP
  • JSP全称是Java Server Page,基于Java和Servlet一样是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。
  • jsp是一种动态网页技术标准,jsp部署在服务器上可以处理客户端的请求,并根据请求内容动态生成HTML、XML或其他格式文档的Web网页,再响应给客户端
  • JSP的内容(标签)转成Java文件也是使用resp.getWriter().write去实现的,
JSP和HTML以及Servlet的适用场景:
类别适用场景
HTML只能开发静态资源,不能包含java代码,无法添加动态数据。
Servlet写java代码,可以输出页面内容,但是很不方便,开发效率极低。
JSP它包括了HTML的展示技术,同时具备Servlet输出动态资源的能力。但是不适合作为控制器来用。
JSP执行过程:

在这里插入图片描述

Jsp指令:

使用指令需要jar包,在Tomcat目录下的lib中的jsp-api.jar,复制到IDEA即可

Page指令:
属性描述
bufferJspWriter用于输出JSP内容到页面上。告知引擎,设定他的缓存大小。默认8kb
autoFlush控制out对象的 缓存区
contentType告知引擎,响应正文的MIME类型。contentType=“text/html;charset=UTF-8”
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage告知引擎,是否抓住异常。如果该属性为true,页面中就可以使用exception对象,打印异常的详细信息。默认值是false
pageEncoding:告知引擎,翻译jsp时(从磁盘上读取jsp文件)所用的码表。pageEncoding="UTF-8"相当于告知引擎用UTF-8读取JSP
extends指定servlet从哪一个类继承
import导入要使用的Java类
info定义JSP页面的描述信息
isThreadSafe指定对JSP页面的访问是否为线程安全
language定义JSP页面所用的脚本语言,默认是Java
session告知引擎是否产生HttpSession对象,即是否在代码中调用request.getSession()。默认是true
isELIgnored告知引擎,是否忽略EL表达式,默认值是false,不忽略
isScriptingEnabled确定脚本元素能否被使用
Include指令:

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址" %>
Taglib指令:

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

属性:

  • ​ uri:外部标签的URI地址。
  • ​ prefix:使用标签时的前缀。

Taglib指令的语法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>
Jsp隐式对象:

什么是隐式对象呢?它指的是在jsp中,可以不声明就直接使用的对象。它只存在于jsp中,因为java类中的变量必须要先声明再使用。其实jsp中的隐式对象也并非是未声明,只是它是在翻译成.java文件时声明的。所以我们在jsp中可以直接使用。

隐式对象名称类型备注
requestjavax.servlet.http.HttpServletRequest
responsejavax.servlet.http.HttpServletResponse
sessionjavax.servlet.http.HttpSessionPage指令可以控制开关
applicationjavax.servlet.ServletContext
pageJava.lang.Object当前jsp对应的servlet引用实例
configjavax.servlet.ServletConfig
exceptionjava.lang.Throwablepage指令有开关
outjavax.servlet.jsp.JspWriter字符输出流,相当于printwriter
pageContextjavax.servlet.jsp.PageContext很重要
PageContext对象:

-它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。

生命周期:

PageContext是一个局部变量,所以它的生命周期随着JSP的创建而诞生,随着JSP的结束而消失。每个JSP页面都有一个独立的PageContext。

在这里插入图片描述

四大域对象:
域对象名称范围级别备注
PageContext页面范围最小只能在当前页面用范围小,开发中用的少
ServletContext请求范围一次请求或当前请求转发用请求转发后再次转发时请求域丢失
HttpSession会话范围多次请求组数据共享时使用多次请求共享数据,但不同的客户端不能共享
ServletContext应用范围最大,整个应用都可以使用如果对数据有修改需要做同步处理,少用
MVC模型:
  • M(Model)模型:用于封装数据,封装的是数据模型
  • V(View)视图:用于显示数据,动态资源用JSP页面,静态资源用HTML页面
  • C(Controller)控制器:用于处理请求和响应
JSP代码演示:
<%--page指令--%>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
         language="java" errorPage="error.jsp"
%>

<%--include指令  可以包含其他页面--%>
<%@include file="/include.jsp" %>
<!DOCTYPE html>

<%--taglib:可以引入外部标签库--%>
<%--   <%@taglib uri=标签库的地址 prefix=前缀名称 %>   --%>
<%@taglib prefix="" %>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<%--这是jsp的注释格式--%>

<%
    System.out.println("这个输出只能打印到控制台");
    out.println("这个才是输出到页面,但是没有换行<br>");
%>

<%--表达式--%>
<%="相当于out.println<br>"%>
<%= request.getAttribute("username”)%>

<%--声明变量和方法--%>
<%--
    加!代表声明的是成员变量
    不加!代表的是声明局部变量
    声明方法必须加!
--%>
<%! String s = "itzhuzhu";%>
<% String s = "itzhuzhu";
    // 隐式对象:可以直接调用
    request.getSession();
    response.getWriter().write("隐式对象:可以直接调用");
    pageContext.setAttribute("直接用","直接用");
%>


<%
    // 定义数组
    ArrayList<Object> objects = new ArrayList<>();
%>
<%=s%>

<%--定义方法--%>
<%! public void method() {
    System.out.println(s);
}%>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzhuzhu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值