java必知必会-jsp

文章目录

  • 一、什么是JSP?
  • 二、jsp运行原理
  • 三、文档结构
  • 四、jsp基本语法
  • 五、jsp9大内置对象(笔试)
  • 六、el(${el表达式}):Expression Language
  • 七、11个内置对象(自定义的数据必须放在域中el才能得到)
  • 八、jstl(jsp Standard Tag Library)
  • 总结


一、什么是JSP?

JSP(Java Server Page)

  • 建立在Servlet规范上的动态网页开发技术本质是servlet(Html + Java)
  • 特点:跨平台、业务代码相分离、JavaBean组件重用、预编译(一个用户只编译一次)
  • 产生原因:html页面输出太麻烦

二、jsp运行原理

  • 本质就是servlet,第一次被访问的时候被web容器翻译成servlet再执行
  • helloServlet.jsp→helloServlet_jsp.java源文件→helloServlet_jsp.class字节码文件
  • 被翻译后的servlet在Tomcat的work目录中可以找到
  • F:\Tomcat\apache-tomcat-7.0.52\work\Catalina\localhost\WEB17\org\apache\jsp
  • jsp继承了HttpjspBase,HttpjspBase类又继承了HttpServlet,故jsp就是servlet

三、文档结构

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
	</body>
</html>

四、jsp基本语法

脚本分类说明
<%(变量/方法/语句等)%>jspScriptlets:被翻译到Servlet中的service方法的局部变量。调用完则释放内存空间,常用于输出
<%=(变量/表达式)%>jsp表达式:被翻译成servlet中service方法内部out.print()输出,变量或者表达式后面不能有分号
<%!java代码%>jsp声明语句:被翻译成servlet类的成员方法/变量/代码块,静态方法/变量/代码块,对整个jsp页面有效
注释分类说明可见范围
Html注释<!–注释内容–>jsp源码、java源码、html源码
java注释//单行注释/多行注释/java源码、jsp源码
jsp注释<%–注释内容–%>jsp源码
指令(指导jsp翻译和运行的命令)分类属性
<%@page 属性名1=“属性值1”%>language:jsp脚本中可以嵌入的语言种类java
属性名称区分大小写pageEncoding:读取jsp文件内容采用的编码一定要和保存文件的编码一致–内部可以包含contentType
contentType:有效文档类型text/html;
session:是否jsp在翻译时自动创建true/false
import:导入java的包 可多次,其他只能一次java.util.*
errorPage:当当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面true/false
buffer:8kb,jsp缓存大小,也是out的缓冲区大小
autoFlush:自动刷新,true/false
<%@taglib 属性名1=“属性值1” >uri:要引入的(jstl、struts2)标签库地址, prefix:前缀 使用xxx:前缀
<%@include 属性名1=“属性值1”%>file:被包含的相对于webcontent文件地址(静态包含)

五、jsp9大内置对象(笔试)

jsp被翻译成servlet后,service方法中有9个对象定义并初始化完毕,jsp脚本可直接使用
所有对象都可以存取数据request.setAttribute("age", 30);
9大内置对象名称类型说明
requestHttpServletRequest得到用户请求信息
responseHttpServletResponse服务器向客户端回应信息
configServletConfig服务器配置,可以取得初始化参数
sessionHttpSession保存用户信息
applicationServletContext所有用户的共享信息
pageObject指当前页面转换后的Servlet类的实例
exceptionThrowable表示jsp页面所发生的异常,在错误页面中才起作用
pageContextPageContextjsp的页面容器,jsp页面的上下文对象
①获得其他8个内置对象:pageContext.getRequest()
②域对象:setAttribute(String name,Object obj[,int scope])
getAttribute(String name[,int scope])
removeAttrbute(String name[,int scope])
pageContext.(PAGE/REQUEST/SESSION/APPLICATION)_SCOPE
③findAttribute(String name)依次从page,request,session,application域中获取属性
outjspWriter用于页面输出
response.getWriter().write(“a”),先输出,out.write后输出
out.write()先放到jspWriter缓冲区中(默认8kb)
若page属性buffer=“0kb” 关闭out缓冲区,则按顺序输出
jsp标签/动作说明
<jsp:include />page:被包含的页面的地址 flush:包含页面flush是否将输出内容立即刷新到客户端,默认false,
false;等全部加载完了再刷新
<jsp:forward />page=“要转发请求的资源相对于webcontent地址”
include指令(静态包含)include标签(动态包含)
引入的资源必须是jsp格式的文件引入的资源必须能被web容器独立运行
引入的资源是编译前包含的引入的资源是编译后包含的
不限制改变状态码和设置响应头不能改变状态码和设置响应头

六、el(${el表达式}):Expression Language

简单的数据访问语言,使jsp的代码更加简化

七、11个内置对象(自定义的数据必须放在域中el才能得到)

分类内置对象名称说明
作用域pageScopepage作用域
requestScoperequest作用域
sessionScopesession作用域
applicationScopeapplication作用域
请求参数param获得一个参数
paramValues获得一组参数
请求头header获得一个请求头
headerValues获得一组请求头
jsp上下文对象pageContext
全局初始化参数initParam
cookiecookie
内置对象使用说明
${内置对象}获得内置对象
${内置对象.key}获得内置对象数据
${内置对象.[key-xxx]}获得内置对象有-或者空格的数据
${内置对象.key[index]}获得内置对象数据为数组,list,map,对象集合的数据
${key}底层使用findAttribute(“name”),依次从page、request、session、application获得数据
${pageContext.request}pageContext获得其他八大对象
$(pageContext.request.contextPath)/XXX相当于<%=pageContext.getRequest().getContextPath%>获得WEB应用的名称
${表达式}el表达式运算

八、jstl(jsp Standard Tag Library)

  • jsp标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。
  • jstl出现的目的同el一样也是要提到jsp页面中的脚本代码
jstl使用说明
导入jstl.jar包含JSTL规范中定义的接口和相关类
导入standard.jar包含用于实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)
引入标签库<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
遍历对象<c:forEach begin="0"end="5"var=“i” step=“2”>${i}</c:forEach>
<c:forEach items=“将要迭代的对象” var=“每一个对象的值” [varStatus=“”]>
获得普通list的值<c:forEach items=" l i s t " v a r = " s t r " > {list }" var="str"> list"var="str">{str }</c:forEach>
获得list对象的值<c:forEach items=" u s e r L i s t " v a r = " u s e r " > {userList}" var="user"> userList"var="user">{user.name }${user.age}</c:forEach>
获得普通map的值<c:forEach items=" s t r M a p " v a r = " e n t r y " > {strMap }" var="entry"> strMap"var="entry">{entry.key }==${entry.value }</c:forEach>
获得map对象的值<c:forEach items=" u s e r M a p " v a r = " e n t r y " > {userMap }" var="entry"> userMap"var="entry">{entry.value.name }–${entry.value.password }</c:forEach>
判断条件<c:if test=“” var=“” scope=“page”></c:if>
输出<c:out value=“hello,world”>

总结

本文介绍了jsp的使用,如有问题欢迎私信和评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/774663.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

气压传感器在自动驾驶汽车还有哪些应用场景

气压传感器在近年来被广泛应用于各种新兴领域&#xff0c;以下是其中几个最新的应用&#xff1a; 1、自动驾驶汽车&#xff1a;自动驾驶汽车需要精确的气压传感器来监测道路上的气压变化&#xff0c;帮助车辆进行准确的定位和导航。气压传感器可以提供高精度、可靠的气压数据&…

利用git将Qt代码托管到U盘或者网盘

文章目录 1.前言2.解决方案3.操作步骤3.1.软件安装3.2.在U盘创建裸仓库3.3.创建Qt程序并将代码上传至U盘3.4.版本标记及切换3.4.在别的电脑上clone代码出来 4.其他5.结语 1.前言 我们在开发项目时&#xff0c;随着项目需求的增加以及bug的修复&#xff0c;肯定会涉及到版本管理…

【山东大学】web数据管理——复习笔记

写在前面 若有图片加载失败&#xff0c;请科学上网 。本文为对软件学院连老师的PPT课件总结所得的复习笔记&#xff0c;仅供参考。不保证对考点的全覆盖&#xff0c;以PPT为主。对往年考过的题相关知识点前面都标注了“考过”&#xff0c;并高亮&#xff0c;供参考。写的比较匆…

智能插座搭配BIOS唤醒功能实现远程定时开关机

智能插座 智能插座凭借其强大的联网能力&#xff0c;不仅能够实现远程操控开关电源&#xff0c;部分高端型号更是集成了电量统计与自动化操作功能&#xff0c;为用户带来了前所未有的便捷体验。以下是我对几款体验过的智能插座的简要评价&#xff0c;因版本差异可能有所不同。…

分享6个自己每天都会打开的网站

分享6个自己每天都会打开的网站&#xff0c;有实用办公网站&#xff0c;也有休闲摸鱼网站&#xff0c;链接直达&#xff0c;速看~ 1、鸠摩搜索 https://www2.jiumodiary.com/ 一个免费的电子书下载网站&#xff0c;页面干净无广告&#xff0c;只有一个搜索框&#xff0c;输入…

Playwright之录制脚本转Page Object类

Playwright之录制脚本转Page Object类 设计思路 &#xff1a; 我们今天UI自动化设计的时候&#xff0c;通常会遵循一些设计模式&#xff0c;例如Page Object模式。但是自己找元素再去填写有一些麻烦&#xff0c;所以我们可以通过拆解录制的脚本&#xff0c;将其中的元素提取出来…

vue3中pinia使用持久化管理

安装插件 npm install pinia pinia-plugin-persistpinia进行注册 创建index.ts import { createPinia } from pinia; //对外暴露大仓库 export default createPinia(); 在mian.ts //引入pinpa import { createApp } from vue //引入根组件 import App from ./App.vue const…

class类和style内联样式的绑定

这里的绑定其实就是v-bind的绑定&#xff0c;如代码所示&#xff0c;div后面的引号就是v-bind绑定&#xff0c;然后大括号将整个对象括起来&#xff0c;对象内先是属性&#xff0c;属性后接的是变量&#xff0c;这个变量是定义在script中的&#xff0c;后通过这个变量&#xff…

CAN转PN网关模块连接激光切割机的配置方法

激光切割机在工业生产中被广泛应用&#xff0c;而激光发射器与控制设备常以不同的协议存在两者之间&#xff0c;CAN总线和Profinet以各自的特点被广泛用于设备当中。本文将介绍介绍兴达易控CAN转Profinet网关模块&#xff08;XD-PN_CAN20&#xff09;连接 CAN 激光切割机的使用…

【算法 - 哈希表】两数之和

这里写自定义目录标题 两数之和题目解析思路解法一 &#xff1a;暴力枚举 依次遍历解法二 &#xff1a;使用哈希表来做优化 核心逻辑为什么之前的暴力枚举策略不太好用了&#xff1f;所以&#xff0c;这就是 这道题选择 固定一个数&#xff0c;再与其前面的数逐一对比完后&…

如何在 Ubuntu上搭建 LAMP

远程登录 Ubuntu系统环境 ssh (User)(IP) # 比如&#xff1a;ssh lennlouis192.168.207.128 为安全起见&#xff0c;建议你使用 root 登录 VPS 后创建一个具有 sudo 权限的帐号。 安装和配置 Apache 2 Apache Http Server 是一个开源的&#xff0c;非常流行&#xff0c;使用…

RAG 为什么需要文本分割(Chunking)

Picone上的一个博客&#xff0c;翻译过来学习一下&#xff0c;其中加入了一些个人的理解和调整&#xff0c;有兴趣更深入研究的可以看一下文章的原文。 为什么需要文本分割&#xff08;Chunking&#xff09; 在构建与LLM相关的应用程序时&#xff0c;Chunking是将大量文本分解…

anaconda命令大全

目录 查看所有虚拟环境查看某虚拟环境安装的包创建虚拟环境激活创建好的虚拟环境回到之前的环境删除创建的虚拟环境查看conda所在的位置、虚拟环境位置等信息conda修改虚拟环境所在的位置 查看所有虚拟环境 conda env list查看某虚拟环境安装的包 激活要查看的虚拟环境之后&a…

【黑马头条】 article微服务编译失败,包com.heima.model.common.article.dtos 不存在

解决办法&#xff0c; 将 model微服务重新打包编译下载 然后在service的pom文件里面加上版本号 这样编译就不会找不到啦

SQL注入【1】——通用漏洞/SQL注入/mysql跨库/ACCESS偏移

一、知识点: 1、脚本代码与数据库前置知识 2、Access数据库注入-简易&偏移 3、MYSQL数据库注入-简易:权限跨库 二、前置知识: &#xff08;一&#xff09;SQL注入漏洞产生原理分析 SQL注入产生条件&#xff1a;根本条件&#xff1a;可控变量、特定函数。 脚本代码在实现…

数学建模MATLAB绘图大全

最近快要开始一年一度的数学建模竞赛啦&#xff0c;接下来争取每天更一篇数学建模算法&#xff01;&#xff08;当然这是理想状态下&#xff09;&#xff0c;今天就先更一些MATLAB常用的绘图吧&#xff0c;论文赏心悦目的关键就在于丰富多彩的图&#xff0c;好看的图一定会成为…

MySql主从同步延迟怎么办?

文章目录 什么是MySQL主从架构主从架构的组成工作原理主从复制的步骤主从架构的优点主从架构的缺点 什么是主从同步延迟为什么会导致主从延迟主从延时的排查和解决如果发现主从数据不一致怎么办&#xff1f; 我们常说的业务量越来越大&#xff0c;I/O访问频率过高&#xff0c;单…

2021-06-15 protues(ISIS)脉冲发生器仿真仪表使用

缘由这个脉冲发生器怎么连线_编程语言-CSDN问答

​埃文科技受邀出席2024 “数据要素×”生态大会​

2024“数据要素”生态大会&#xff08;以下简称“大会”&#xff09;于2024年6月30日在河南省郑州市举办&#xff0c;大会主题为“加快数据要素化进程 推动新质生产力发展”。 本次大会旨在搭建高水平交流合作平台、分享前沿观点、展示先进技术、交流实践经验&#xff0c;共同探…

开放式蓝牙耳机推荐,开放式耳机选购小技巧大公开!

跑步是我们生活中最常见的运动方式。在跑步中佩戴耳机往往能达到“事半功倍”的效果&#xff0c;如何去选择一款好的运动耳机便需要精挑细选了。作为一个开放式耳机资深玩家兼马拉松参与者&#xff0c;我个人觉得开放式耳机是最适合跑步的了&#xff0c;其开放式的设计更加适合…