Jsp

本文详细阐述了JSP如何嵌入Java代码,涉及声明标签、表达式标签和程序代码标签的用法。深入解析了JSP的九大内置对象及其作用范围,并介绍了EL表达式和JSTL标签库在简化开发中的应用。此外,还涵盖了网页状态码和关键概念,如Page指令和常用标签库的引用。
摘要由CSDN通过智能技术生成


概述

jsp全名为Java Server Pages,由于servlet展示信息的不方便,引入了jsp,jsp本质上也是一个servlet。通俗的说法是jsp是嵌入了java代码的html文件


Jsp如何嵌入java代码

通过三种标签,在jsp文件里嵌入java的代码,实现动态网页

声明标签 <%!变量或者方法声明%>
表达式标签 <%= 表达式%> 在页面上显示的效果
程序代码标签 <%java代码%> 页面上动态展示内容


内部原理

jsp文件在被访问时,服务器识别到jsp的后缀,会将jsp文件翻译成java文件,再将java文件编译成class文件,因此jsp的本质也是一个servlet,同时,class文件被JVM加载完还会返回一个响应,将jsp里的html代码以流的形式返回给浏览器,最终呈现出效果

由此可以联想到tomcat,启动tomcat访问jsp文件时,产生的java与class文件都被存在了tomcat安装目录的work文件夹下
在这里插入图片描述


Jsp的九大内置对象

  1. request;代表客户端请求信息,作用域为一次请求
  2. response;代表服务器发送给客户端的响应,只在jsp页面有效
  3. session;服务器给每个用户都生成一个session对象
  4. application;比session的生命周期更长,服务器不关闭存储的数据不会丢失
  5. out;用于在浏览器内输出信息,甚至可以输出一段html语句以弹窗警告
  6. pageContext;存取数据,只作用于当前页面,离开当前页面数据即丢失
  7. config;获取服务器的配置信息,web.xml里配置的信息通过这个对象获取
  8. page;类似this,代表当前jsp页面的这个对象
  9. exception;在当前页面定义为error页面时才出现,显示异常信息

四个用于存取数据的对象的作用域范围比较:
pageContext < request < session < application

以上分别代表了当前页面,单次请求,一次会话,服务器运行期间,注意pageContext的值只在当前页面有效,而request如果不进行重定向,地址栏不改变,通过转发跳转到其他页面,request对象里存的值还是可以保留的,因此它的范围大于pageContext


Jsp的指令

Page:定义网页的依赖属性,比如脚本语言、error页面、缓存器等,在jsp页面的最顶端即可看到该指令<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Page指令里可供设置的的属性名:
在这里插入图片描述

Include:包含其他文件,当某个网站里的页面都有大量重复的内容时,可以通过这个指令来进行包含共同的内容,以避免程序员复制粘贴重复的代码
使用方法:<%@ include file="文件相对 url 地址" %>

Taglib:引入标签库的定义,具体在JSTL里说明
使用方法:<%@ taglib uri="uri" prefix="" %>


网页状态码

在这里插入图片描述
20开头的状态码主要与请求相关,30开头的状态码主要与被请求的页面相关,40、50开头的状态码都与服务器的状态相关,其中比较重要的有200、400、404、405、500


EL表达式

EL表达式的主要作用是简化对象和变量的访问,简单来说EL只负责取值而不是存值
使用方法:${需要获取的值的名称}
没有给定范围时,EL表达式会默认按照pageContext→request→session →application的顺序进行取值,如果要给定范围按照这个格式${sessionScope.value}同理类推其他的

EL表达式的基础操作符:
在这里插入图片描述


JSTL

JSTL是jsp标准标签库,一个jsp标签的集合,它封装了jsp应用的通用核心功能。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,SQL标签
使用方法:<%@ taglib prefix=”页面使用的名称” uri=”功能范围的路径”%>
在这里插入图片描述
core核心标签,最常用的JSTL标签
使用方法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

core里用于存取值的标签主要有set、out与remove这三个
在这里插入图片描述

// set标签把值存入request
<c:set value="request的值" var="str" scope="request"></c:set>
// el表达式将值取出
str=${request.str}<br>
// out标签将值取出
str=<c:out value="${request.str}"></c:out>
// remove标签将值移除
<c:remove var="str" scope="request"></c:remove>

core里还有用于流程控制的标签,主要有if,choose,when,otherwise与forEach
在这里插入图片描述

<c:set value="20" var="age" scope="request"></c:set>
// 如果test里的内容为true,输出c:if框内的内容
<c:if test="${request.age<18}">
	未成年人,小于18岁
</c:if>
// c:choose内添加c:when,通过test条件输出内容
<c:choose>
	<c:when test="${age<18}">
		未成年人
	</c:when>
	<c:when test="${age>18}">
		成年人
	</c:when>
</c:choose>
<%
	List list = new ArrayList();
	list.add(100);
	list.add("冠军");
	request.setAttribute("alist",list);
%>
// forEach遍历list集合里的元素
<c:forEach items="${alist}" var="va">
	${va}<br>
</c:forEach>

fmt格式化标签,主要用于进行日期或者数字的格式化
使用方法:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
fmt:formatDate 作用:将日期类型格式化为指定模式的字符串

<%
	request.setAttribute("day",new Date());
%>
// 将Date类型的日期转换为yyyy-MM-dd的格式
<fmt:formatDate value="${day}" pattern="yyyy-MM-dd" >
</fmt:formatDate>

fmt:parseDate 作用:将指定字符串转化为日期类型
fmt:formatNumber 作用:按照指定格式对数字进行格式化


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值