JSP学习(1)—— 基本语法
JSP主要作用是代替Servlet程序回传html页面的数据。
jsp页面和html页面一样,都是存放在web目录下,访问jsp页面也和访问html页面一样。
jsp本质上是Servlet程序,当访问jsp页面时,Tomcat服务器会把jsp页面翻译成java文件。
一. jsp三种脚本
1. 声明脚本:<%! %> (极少使用)
作用:在其中可以声明类属性、方法、静态代码块、内部类等,声明方式与java一样。
2. 表达式脚本:<%= %>
作用:在jsp页面上可以输出数据(整型、浮点型、字符串型、对象)
①所有表达式脚本都会被翻译到_jspService()方法中
②表达式脚本都会被翻译成为out.print()输出到页面上
③由于表达式脚本翻译到_jspService()方法中,所以_jspService()方法中的对象都可以直接使用
④表达式脚本中的表达式不能以分号结束
3. 代码脚本:<% %>
作用:在jsp页面编写需要的功能(写的是java语句)
①所有代码脚本都会被翻译到_jspService()方法中
②由于代码脚本翻译到_jspService()方法中,所以_jspService()方法中的对象都可以直接使用
③可以由多个代码脚本组合完成一个完整的java语句
④代码脚本可以和表达式脚本一起组合使用
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><!-- 声明属性 --><%!private String name;private int age;private static Map<String,Object> map;%><!-- 声明方法 --><%!public int show(){return 1;}%><!-- 声明静态代码块 --><%!static {map = new HashMap<String,Object>();map.put("key1","value1");map.put("key2","value2");}%><!-- 声明内部类 --><%!public static class User{private String name;private int age;}%><%= 12 %><br/><%= 12.13 %><br/><%= "字符串" %><br/><%= map %><br/><%= request.getParameter("username") %><br/><%int i = 1;if(i < 5){System.out.println(i);}%><%for(int j = 1; j <= 5; j++){%><%= j %><br><%}%><%String username = request.getParameter("username");System.out.println(username);%>
</body>
</html>
二. jsp中的注释
1. html注释:<!-- -->,会被翻译到java源代码中,在_jspService()方法中以out.writer输出到客户端
2. java注释:// 和 /* */,通常使用在表达式脚本和代码脚本中,会被翻译到java源代码中
3. jsp注释:<%-- %-->,可以注释jsp中的所有代码
三. jsp中的内置对象
jsp的内置对象是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的9个对象
1. request:请求对象;2. response:响应对象;3. pageContext:jsp的上下文对象
4. session:会话对象;5. application:ServletContext对象;6. config:ServletConfig对象
7. out:jsp输出流对象;8. page:指向当前jsp的对象;9. exception:异常对象
四. jsp四大域对象
pageContext(PageContextImpl类):当前jsp页面范围内有效
request(HttpServletRequest类):一次请求响应内有效
session(HttpSession类):一次会话内有效
application(ServletContext类):整个web工程范围内有效
参考:https://blog.csdn.net/Archer__13/article/details/123775110
使用的优先顺序:按照从小到大的范围顺序(pageContext --> request --> session --> application)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>page1.jsp页面</h1><%pageContext.setAttribute("key1","pageContext");request.setAttribute("key2","request");session.setAttribute("key3","session");application.setAttribute("key4","application");%><!-- 1.此时当访问page1.jsp页面时,都可以取到对应的值 -->pageContext保存作用域的值:<%=pageContext.getAttribute("key1")%><br/>request保存作用域的值:<%=request.getAttribute("key2")%><br/>session保存作用域的值:<%=session.getAttribute("key3")%><br/>application保存作用域的值:<%=application.getAttribute("key4")%><br/><!-- 2.此时当访问page1.页面时,此时取不到pageContext中的值--><%request.getRequestDispatcher("/page2.jsp").forward(request,response);%><!-- 3.此时当访问page1.jsp页面时,此时取不到pageContext和request中的值--><%response.sendRedirect("http://localhost:8080/StudyJSP_war_exploded/page2.jsp");%><!-- 4.当用其他客户端直接访问page2.jsp页面时,此时取不到pageContext、request和session中的值--><!-- 5.当重启服务器,然后直接访问page2.jsp页面时,此时取不到pageContext、request、session和application中的值-->
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>page2.jsp页面</h1>pageContext保存作用域的值:<%=pageContext.getAttribute("key1")%><br/>request保存作用域的值:<%=request.getAttribute("key2")%><br/>session保存作用域的值:<%=session.getAttribute("key3")%><br/>application保存作用域的值:<%=application.getAttribute("key4")%><br/>
</body>
</html>
五. jsp中的out输出和response.getWriter输出的区别
在响应时,首先将out缓冲区的数据追加在response缓冲区的末尾,最后将response缓冲区中的所有数据输出。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%out.write("out输出1 <br/>");out.write("out输出2 <br/>");response.getWriter().write("response输出1 <br/>");response.getWriter().write("response输出2 <br/>");%>
</body>
</html>
out.write()只能输出字符串,out.print()可以输出任意类型的数据(其本质是把数据都转化成字符串类型然后调用write方法输出)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%out.write("12");out.write(12); //不会输出out.print("12");out.print(12);%>
</body>
</html>
六. jsp常用标签
1. jsp静态包含(常用):<%@ include file="要包含的jsp页面路径"%>
会将要包含的页面的内容执行输出在当前页面,当修改包含页面时,当前页面也会随之变化
特点:①静态包含不会翻译被包含的jsp页面;②静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置执行输出
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>主体内容<br><%@ include file="/page.jsp"%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>包含的页面
</body>
</html>
2.jsp动态包含:<jsp:include page=" "></jsp:include>
动态包含也可以像静态包含一样,把被包含的内容执行输出到包含位置
特点:①动态包含会把包含的jsp页面翻译成java代码;②动态包含去调用被包含的jsp页面执行输出;③动态包含可以传递参数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>主体内容<br><jsp:include page="/page.jsp"><jsp:param name="username" value="Tom"/><jsp:param name="password" value="root"/></jsp:include>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>包含的页面 <br/><%=request.getParameter("username")%>
</body>
</html>
3.jsp请求转发:<jsp:forward page="请求转发路径"></jsp:forward>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><jsp:forward page="page.jsp"></jsp:forward>
</body>
</html>
JSP学习(1)—— 基本语法相关推荐
- 【Servlet】JSP学习-概念和运行原理
为什么需要JSP? 与HTML相比:根据后台的业务,可以动态输出HTML,网页内容是可以改变的. 与原生Servlet相比:不需要自己写输出语句resp.getWriter().write(" ...
- java jsp学习指南_JSP教程–最终指南
java jsp学习指南 编者注: JavaServer Pages(JSP)技术使您可以轻松创建同时包含静态和动态组件的Web内容. JSP技术提供了Java Servlet技术的所有动态功能,但提 ...
- 【学习笔记】JSP学习笔记(上)
我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...
- Jsp学习笔记——第二天
Jsp学习打卡 Jsp学习笔记---第二天 Jsp笔记 第二天 一. 复习 二. 动作元素(包含,转发) 1. 包含动作 [重点] 2. 转发动作 [了解] 三. 隐含对象(内置对象) 1. 概念 2 ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- python基础语法及知识总结-Python 学习完基础语法知识后,如何进一步提高?
---4.30更新---感谢大家支持,点赞都破两千了.给大家整理出来新的资料,需要的小伙伴来自取: Python练手项目视频如下: Python自学基础知识如下: 以下为原文内容: Python 学习 ...
- idea编译的文件怎么用cmd打开_JAVA学习册|基础语法|cmd输出HelloWorld
看到这个标题,估计已经有小伙伴知识本文要讲什么了,好,下面我们就开始正文 学java最开始的地方 很多老师的书和视频中,在安装完jdk,配置好环境变量,都会带大家用记事本写一个HelloWorld,然 ...
- java mysql jsp分页代码_JAVA/JSP学习系列之六(MySQL翻页例子)
JAVA/JSP学习系列之六(MySQL翻页例子) 更新时间:2006年10月13日 00:00:00 作者: 一.运行前准备 下载了mysql的jdbc驱动(一个jar文件)并加载在CLASSP ...
- eclipse加速之禁用JS、jsp等文件的语法验证
eclipse加速之禁用JS.jsp等文件的语法验证 去除eclipse的JS验证: 将windows->preference->Java Script->Validator-> ...
- 学习webpack4 - ES6语法转化
学习webpack4 - 基础配置 学习webpack4 - HTML处理 学习webpack4 - 样式处理 学习webpack4 - ES6语法转化 学习webpack4 - 第三方库的使用 学习 ...
最新文章
- 磁盘分区形式mbr和gpt哪个好_济南历下区中考美术集训应该选哪个
- 扩展虚拟机Ubuntu磁盘容量空间
- Ubuntu | ubuntu 中配置静态 IP
- 关不关机 扫地机器人_【小米智能家居】米家扫拖机器人,模拟人工来回擦拖地!...
- webdiyer aspnet pager最近又用这个。还是记录下。
- mysql-in关键字,分组查询,分页查询
- [Python图像处理] 三十四.数字图像处理基础与几何图形绘制万字详解(推荐)
- 重学java基础第三课:学习方法和课程概述
- Java加密与解密的艺术~安全协议~模型分析
- [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
- 基于视图的DNS解析
- BETA冲刺(6/7)
- 用WPF开发仿QQ概念版之--------Loading预加载界面(闪屏窗体)
- 谷歌浏览器添加扩展程序
- 树莓派和机器人有啥关系(也有jetson tx2的知识主要)
- VC知识库BLOG-技术,非技术......
- 安装Linux无盘工作站
- Axure 9 Mac 版
- 2022年互联网+全国大学生创新创业大赛解读
- 20170919_C++面试问题记录
热门文章
- 使用UTF8编码将Excel转换为CSV
- CVPR2022-图像恢复重建Restormer论文解读
- 手机上怎么压缩html文件夹,iphone手机怎么压缩文件 iphone自带文件压缩功能操作方法分享...
- 区块链报告会心得体会3000_心得体会范文3000字
- ACM--津津的储蓄计划
- 怎么用电脑屏幕录制工具录制游戏
- 剑指Offer(较难)
- Conda创建虚拟环境以及包
- 两个栈实现队列的push-pop操作---C++
- weka mysql 汉字_Weka访问MySQL数据库