柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

    • Tomcat
    • JavaWeb Servlet
    • JSP
      • JSP 引入
      • JSP 原理
      • JSP 内置对象
        • request对象
        • response对象
        • session对象
        • application对象
        • out对象
        • pageContext对象
        • config对象
        • page对象
        • exception对象
      • JSP 指令
      • 状态码
      • EL表达式
      • JSTL
        • JSTL引入
        • 核心标签
        • 应用实例
    • 过滤监听器
    • 会话跟踪
    • MVC设计模式
    • Ajax
    • JSON
    • JspSmartUpload应用
  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • JavaWeb
柏竹
2020-02-18
目录

JSP

# JSP

JSP是 Servlet设计的简化版,可在HTML页面添加 Java语言的脚本。JSP开发的Web应用可跨平台,也能在其他系统运行

*.html 静态页面

*.jsp 动态页面(嵌套Java和html代码)

# JSP 引入

声明标签 <%! 变量/方法 的声明%>

表达式 <%= 表达式%>

执行标签 <%java代码%>

# JSP 原理

当浏览器访问服务器时。地址后缀为 .jsp ,会先找 index.jsp ,找到随后进行翻译成 index_jsp.java 并对其进行编译,产生一个 index_jsp.class 进行加载运行

# JSP 内置对象

# request对象

request 对象是 javax.servlet.HttpServletRequest 类型的对象 该对象代表了客户端的请求信息,主要⽤于接受HTTP协议传送到服务器的数据 作用域:一次请求

点击详细说明HttpServletRequest (opens new window)

# response对象

response 对象是 javax.servlet.HttpServletResponse 类型的对象 response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端 作用域:本页面

点击详细说明HttpServletResponse (opens new window)

# session对象

session 对象是由服务器自动创建的与用户请求相关的对象,每个会话都有对应的会话ID,用于保存信息,以及跟踪用户的操作状态 作用域:本次会话

点击详细说明HttpSession (opens new window)

# application对象

application对象 可将信息保存在服务器,直至服务器关闭(类似于全局变量) 作用域:服务器运行

点击详细说明ServletContext (opens new window)

# out对象

out对象 可在Web浏览器内输出信息,管理应用服务器上的输出缓冲区(输出完及时不关闭流)

点击详细说明ServletOutputStream (opens new window)

# pageContext对象

pageContext对象 用于获取任何范围的参数

更多方法说明ServletContext (opens new window)

# config对象

config对象 用于获取服务器的配置信息 使用前提需要 pageConext对象 的 getServletConfig() 方法 获取 config对象

更多方法说明ServletConfig (opens new window)

# page对象

page对象 代表JSP本身(类似于Java语言 的 this)

# exception对象

exception对象 用于显示异常信息 在JSP页面 page指令 添加 isErrorPage = "true" 属性 和 errorPage="XXX.jsp"页面才生效 如果页面异常则会生成 exception对象 并把 page指令 设定在错误页面中进行处理

更多方法说明ServletException (opens new window)

# JSP 指令

JSP指令 控制JSP编译器如何去生成servlet

page指令 定义网页依赖(脚本、异常、缓冲、...) <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

属性 值 说明
language java、... 解释JSP文件使用的语言
extends 任何类的全名 编译时继承哪个类
import 任何类的全名 引入类、包等...
session true、false 设置JSP文件是否内置Session对象 (默认true)
autoFlush true、false 是否运行缓存 (默认true)
buffer none、 指定KB 指定缓存大小 (默认none)
contentType 文档类型 规定了生成内容的类型。当生成非HTML内容或者当前字符集并非默认字符集时使用
errorPage 相对路径 指定 页面异常时转送的页面
isErrorPage true、false 指定页面是否显示错误提示页面 (默认false)
isThreadSafe true、false 最终生成的servlet是否具有线程安全性 (默认false)
pageEncoding utf-8、... 指定 编码类型

**Include指令** JSP可以通过include指令来包含其他文件 并且同时编译运行<%@ include file="相对url地址" %>`

Taglib指令 JSP允许自定义标签库,引入库、标签等... <%@ taglib uri="标签库路径" prefix="指定标签库前缀" %>

# 状态码

状态码 消息 说明
100 Continue 部分请求接收,但未被拒绝,客户端延长请求
101 Switching Protocols 服务器交换机协议
200 OK 请求被确认
201 Created 请求时完整的,新的资源被创建
202 Accepted 请求被接收,但未处理完
300 Multiple Choices 一个超链接表,用户可以选择超链接访问,支持5个超链接
301 Moved Permanently 被请求的页面已经移动到了新的URL下
302 Found 被请求的页面暂时性地移动到了新的URL下
303 See Other 被请求的页面可以在一个不同的URL下找到
400 Bad Request 服务器无法识别请求
403 Forbidden 禁止访问所请求的页面
404 Not Found 服务器无法找到所请求的页面
405 Method Not Allowed 请求中所指定的方法不被允许
500 Internal Server Error 请求不完整,服务器遇见出乎意料的状况
501 Not Implemented 请求不完整,服务器不提供所需要的功能
502 Bad Gateway 请求不完整,服务器中上游服务器接收了一个无效的响应
503 Service Unavailable 请求不完整,服务器暂时重启 / 关闭
505 HTTP Version Not Supported 服务器不支持指定的HTTP版本

# EL表达式

EL表达式可 讲话对象和变量 快速呈现出来

展示方式

默认展示:${需要展示的信息} 指定展示:${对象.key}

**默认获取顺序 ** 根据以下对象查找key值是否存在,存在则优先获取

  1. pageContext对象 (当前页面)
  2. request对象 (请求范围)
  3. session对象 (会话范围)
  4. application对象 (程序范围)

EL基本操作符

术语 定义
算术 +、-、*、/、%
逻辑 and、ro、not、&&、||、!
关系 ==、eq、!=、ne、gt、<=、le、>=、ge
Empty 判断前缀是否为null (应用==empty <域对象>== 返回 布尔值)
类型 三目运算符

示例:

<%
    pageContext.setAttribute("number",1);
    pageContext.setAttribute("name","");
    request.setAttribute("number",2);
    session.setAttribute("number",3);
    application.setAttribute("number",4);
%>
<h2>作用域数据获取:</h2>
<p>直接获取name:${number}</p>
<p>pageScope域获取name:${pageScope.number}</p>
<p>requestScope域获取name:${requestScope.number}</p>
<p>sessionScope域获取name:${sessionScope.number}</p>
<p>applicationScope域获取name:${applicationScope.number}</p>
<h2>表达式应用</h2>
<p>pageContext > session : ${number > sessionScope.number}</p>
<p>name 是否为空 : ${empty name}</p>
<p>session、application 获取最大值:${sessionScope.number > applicationScope.number?sessionScope.number:applicationScope.number}</p>
<%--  浏览器结果
作用域数据获取:
    直接获取name:1
    pageScope域获取name:1
    requestScope域获取name:2
    sessionScope域获取name:3
    applicationScope域获取name:4
表达式应用
    pageContext > session : false
    name 是否为空 : true
    session、application 获取最大值:4
--%>

# JSTL

JSTL是⼀个JSP标签集合,它封装了JSP应用的通用核心功能(条件判断、循环迭代、...)

点击JSTL标签更多说明 (opens new window)

# JSTL引入

  1. 引入jar依赖:standard.jar 、 jstl.jar
  2. 在JSP文件的页面 引入相应功能范围的标签 <%@ taglib prefix="前缀" uri="功能范围路径" %>
功能范围 uri 前缀
core http://java.sun.com/jsp/jstl/core c
i18n http://java.sun.com/jsp/jstl/fmt fmt
sql http://java.sun.com/jsp/jstl/sql sql
xml http://java.sun.com/jsp/jstl/xml x
functions http://java.sun.com/jsp/jstl/functions fn

# 核心标签

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

分类

  • 表达式操作 out、set、remove、catch
  • 流程控制 if、choose、when、otherwise
  • 迭代操作 forEach、forTokens
  • URL操作 import、param、url、redirect

<c:set>标签 保存数据

属性 值说明
value 存储的值
var 存入的变量名
scope 指定变量范围
target 对象类型
property 指定target对象的属性值

<c:out>标签 输出数据

属性 值说明
value 输出的数据
default 无输出则默认代替
escapeXml 是否忽略XML特殊字符

<c:remove>标签 删除保存的数据

属性 值说明
var 移除的变量名
Scope var变量的范围

<c:if>标签 if判断

属性 值说明
test 表达式的结果(true/false)
var 存储表达式结果的变量名
scope var变量的范围

<c:choose>,<c:when>,<c:otherwise>标签 if-else 判断

属性 值说明
test 表达式的结果(true/false)

<c:forEach>标签 循环循环

属性 值说明
var 迭代对象
items 迭代的集合对象
varStatus 迭代对象的相关成员信息
begin 开始迭代的位置
end 结束迭代的位置
step 每次迭代的间隔数

# 应用实例

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>JSTL 测试</h1>

  <h2>表达式操作 标签</h2>
  <h3>set存数据</h3>
  <c:set var="name" value="Sanscan12" scope="session"/>
  <c:set var="name" value="Sanscan12" scope="application"/>
  <h3>out显示数据</h3>
  sessionScope-name = <c:out value="${sessionScope.name}"/> <br>
  <%--sessionScope-name = Sanscan12--%>
  name = <c:out value="null" default="Error"/> <br>
  <%--name = null--%>
  <h3>remove移除数据</h3>
  移除 application-name数据!<c:remove var="name" scope="application"/> <br>
  <%--移除 application-name数据!--%>
  applicationScope-name = <c:out value="${applicationScope.name}" default="Error"/> <br>
  <%--applicationScope-name = Error--%>
  sessionScope-name = <c:out value="${sessionScope.name}" default="Error"/> <br>
  <%--sessionScope-name = Sanscan12--%>

  <h2>流程控制 标签</h2>
  <h3>if判断</h3>
  Sans 是本人?<c:if test="${name=='Sans'}" var="result" />
  <c:out value="${result}"/><br>
  <%--Sans 是本人? false--%>
  Sanscan12 是本人?<c:if test="${name=='Sanscan12'}" >true</c:if> <br>
  <%--Sanscan12 是本人?true--%>
  <h3>if-else判断</h3>
  Sanscan12 是本人?
  <c:choose>
    <c:when test="${name=='Sanscan12'}">
      Yes
    </c:when>
    <c:otherwise>
      No
    </c:otherwise>
  </c:choose>
<%-- Sanscan12 是本人? Yes --%>
  <h3>forEach循环</h3>
  <%
    List list = new ArrayList();
    list.add("123");
    list.add("456");
    list.add("789");
    pageContext.setAttribute("ulist",list);
  %>
  <c:forEach var="name" items="${ulist}" varStatus="sta">
<%--  个数-索引-值   --%>
    ${sta.count} --> ${sta.index} --> ${name} <br>
  </c:forEach>
<%--
1 --> 0 --> 123
2 --> 1 --> 456
3 --> 2 --> 789
--%>
    <c:forEach var="i" begin="1" end="10" step="1">
    	${i}
	</c:forEach>
  
  <h2>格式化 标签</h2>
  <h3>日期格式化 --> 字符串</h3>
  <%pageContext.setAttribute("nowDate",new Date());%>
  nowDate:<fmt:formatDate value="${nowDate}"/> <br>
  <%--2021年4月17日--%>
  YYYYMMdd-nowDate:<fmt:formatDate value="${nowDate}" pattern="YYYY-MM-dd"/> <br>
  <%--2021-04-17--%>
  date-nowDate:<fmt:formatDate value="${nowDate}" type="date"/> <br>
  <%--2021年4月17日--%>
  time-nowTime:<fmt:formatDate value="${nowDate}" type="time"/> <br>
  <%--上午10:38:38--%>
  both-now:<fmt:formatDate value="${nowDate}" type="both"/> <br>
  <%--2021年4月17日 上午10:38:38--%>
  <%--<h3>字符串格式化 --> 日期</h3>--%>
  <%--Format:<fmt:parseDate value="${nowDate}" var="test"/> <br>--%>
  <%--YYYY:<fmt:parseDate value="${nowDate}" var="forDate2" pattern="YYYY"/> <br>--%>
  <h3>数字格式化</h3>
  type-currency-value(3.14): <fmt:formatNumber value="3.14" type="currency"/> <br>
  <%--¥3.14--%>
  type-percent-value(3.14): <fmt:formatNumber value="3.14" type="percent"/> <br>
  <%--314%--%>
  maxIntegerDigits(4)-value(314159.26): <fmt:formatNumber value="314159.26" maxIntegerDigits="4"/> <br>
  <%--4,159.26--%>
  maxFractionDigits(2)-value(3.14159): <fmt:formatNumber value="3.14159" maxFractionDigits="2"/> <br>
  <%--3.14--%>
  maxFractionDigits(2)-value(3.14559): <fmt:formatNumber value="3.14559" maxFractionDigits="2"/> <br>
  <%--3.15--%>
  pattern(0.###E0)-value(0.31415926535897): <fmt:formatNumber value="0.31415926535897" pattern="0.###E0"/> <br>
  <%--3.142E-1--%>
  pattern(00.###E0)-value(0.31415926535897): <fmt:formatNumber value="0.31415926535897" pattern="00.###E0"/> <br>
  <%--31.416E-2--%>
  pattern(0.###E0)-value(31415926535897): <fmt:formatNumber value="31415926535897" pattern="0.###E0"/> <br>
  <%--3.142E13--%>
  </body>
</html>
#JSP
上次更新: 2023/03/12, 00:43:49

← JavaWeb Servlet 过滤监听器→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式