从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

    • 服务器软件

    • 环境管理和配置管理-科普篇
    • Servlet入门

      • 什么是Servlet
      • Servlet入门案例
      • Servlet生命周期
      • Servlet中的注解
      • Tomcat集成IDEA
      • Servlet体系结构
      • HTTP协议基础
      • 深入request和response对象
      • request对象基本使用
      • request其他功能
      • Servlet实现登录功能
      • HTTP协议基础-响应
      • Response对象基本使用
      • response对象之重定向
      • response输出字符到浏览器
      • response输出字节数据
      • 验证码案例
      • ServletContext
      • 文件下载案例
      • Cookie笔记
      • Cookie的更多细节
      • Cookie实践:记住上次访问时间
      • JSP入门
      • JSP的内置对象和案例
      • IDEA与JavaWeb的小技巧
      • Session笔记
      • 验证码案例
      • JSP深入学习
        • JSP中的指令
        • JSP的注释
        • 内置对象
      • MVC开发模式
      • EL表达式和JSTL标签
      • JSTL标签库
      • 案例:列表的增删改查
      • Filter学习
      • Filter案例
      • Listener学习
      • Java中的Ajax
      • Java中的JSON
      • Servlet
    • JavaWeb
  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaWeb
  • Servlet入门
2023-04-17
目录

JSP深入学习

# 110.JSP深入学习

继续讲解如下内容:

  1. JSP的指令、内置对象和注释
  2. MVC开发模式
  3. EL表达式
  4. JSTL标签
  5. 三层架构   ‍

‍

# JSP中的指令

指令的作用:用于配置JSP页面,导入资源文件

格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>​

例如我们之前写的index.jsp的开头,就用到了page指令:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
1

这里设置了content-type,以及用的是Java语言,还有很多属性,这里就不一一介绍了

‍

‍

指令分类:

  • page指令:配置JSP页面的,较少使用
  • include指令:导入页面的资源文件,极少使用
  • taglib指令:导入资源,例如标签(例如Java中导入一个类),用的较多

‍

‍

# page 指令

page指令用来配置JSP页面,我们知道一些常见的属性就可以了。例如下面是一个page指令:

<%@ page contentType="text/html;charset=UTF-8" language="java" buffer="16kb"%>
1

常见的属性:

  1. contentType
  2. language
  3. buffer
  4. import
  5. errorPage,isErrorPage

详细说明如下:

‍

contentType:等同于response.setContentType()​,作用如下

  1. 设置响应体的mime类型以及字符集

  2. 设置当前jsp页面的编码

    只能是高级的IDE才能生效,修改charset后,文件编码格式也会自动切换

    如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集

‍

language:当初JSP被设计时,想要一举改变表现层的技术,支持多种开发语言;但直到如今,也只支持Java。不能省略。

‍

buffer:缓冲区,JSP有个内置对象是out的,其有一个缓冲区,默认是8kb,可以通过buffer修改大小

import:导包。例如使用List对象,需要导入:写了后相当于会在我们JSP转换的Servlet类里import

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
1
2

‍

‍

errorPage:当前页面发生异常后,会自动跳转到指定的错误页面。和isErrorPage​是配对的。

isErrorPage:标识当前也是是否是错误页面。默认值false。如果设置成true,可以使用内置对象exception; 如果设置成false,不可以使用内置对象exception。

例如新建一个500.jsp

<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h1>服务器正忙...</h1>
    <%
        String message = exception.getMessage();
        out.print(message);
    %>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍

然后在index.jsp里配置:

<%@ page contentType="text/html;charset=gbk" errorPage="500.jsp"   pageEncoding="GBK" language="java" buffer="16kb" %>

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

  <%
    int i = 3/0;
  %>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13

‍

访问index.jsp,会跳转到errosPage.jsp

‍

‍

‍

# include指令

用来包含页面的,例如我们写了很多个JSP后,可以抽出公用的部分,做出一个单独的文件,然后在其他JSP里引入这个JSP。我们来演示下,新建top.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>页面logo页面标题</h1>
1
2

‍

新建home.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<%@include file="top.jsp"%>

<html>
<head>
    <title>Title</title>
</head>
<body>
        <h1>hello</h1>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11

‍

那么home.jsp页面也会显示top.jsp的h1标签

‍

‍

# taglig指令

导入资源的,例如导入第三方标签库。我们先演示下效果,后续再说有什么用

首先将涉及到的jar包放到 WEB-INF/lib​目录(可以去我的GitHub或Gitee下载),然后将lib目录add 到Library中。

jstl-impl.jar
javax.servlet.jsp.jstl.jar
1
2

​

然后我们就可以引入标签库了:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1

prefix:定义标签的前缀,可自行修改,uri则是标签库的具体位置

‍

然后我们就可以使用标签库了:前缀加冒号。一般用约定俗成的。

<c:out>
1

‍

‍

# JSP的注释

  1. html注释 <!-- -->​: 只能注释HTML代码片段。注意,在客户端看HTML代码中还是能看到注释
  2. JSP注释 <%-- --%>​:可以注释所有(HTML和Java代码),在客户端看HTML代码中看不到注释,推荐使用

‍

<!--
	<h1>hello</h1>
-->


<%--
	<%
		System.out.println("hi~~~~");
	%>
--%>

<%--
	<input>
--%>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍

# 内置对象

什么是内置对象:在JSP中不需要创建,可以直接使用的对象。这是因为JSP转换为Servlet的时候,这些对象已经声明好了。一共有9个内置对象:

变量名 真实类型 作用
pageContext PageContext 域对象,当前页面共享数据,还可以获取其他八个内置对象(通过getXXX方法)
request HttpServletRequest 域对象,一次请求访问的多个资源(转发)
session HttpSession 域对象,一次会话的多个请求间
application ServletContext 服务器的域对象,所有用户间共享数据,范围最大
response HttpServletResponse 响应对象
page Object 当前页面(Servlet)的对象 相当于this
out JspWriter 输出对象,数据输出到页面上
config ServletConfig Servlet的配置对象
exception Throwable 异常对象,只有设置了isErrorPage才能使用

‍

‍

‍

我们可以通过转换后的Java代码里查看,在_jspService方法里有如下定义:

final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;

try {
      response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

‍

‍

‍

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/6 21:54:08
验证码案例
MVC开发模式

← 验证码案例 MVC开发模式→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式