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)—— 基本语法相关推荐

  1. 【Servlet】JSP学习-概念和运行原理

    为什么需要JSP? 与HTML相比:根据后台的业务,可以动态输出HTML,网页内容是可以改变的. 与原生Servlet相比:不需要自己写输出语句resp.getWriter().write(" ...

  2. java jsp学习指南_JSP教程–最终指南

    java jsp学习指南 编者注: JavaServer Pages(JSP)技术使您可以轻松创建同时包含静态和动态组件的Web内容. JSP技术提供了Java Servlet技术的所有动态功能,但提 ...

  3. 【学习笔记】JSP学习笔记(上)

    我是灼灼,一只初学Java的大一金渐层. 向往余秀华和狄兰·托马斯的疯狂,时常沉溺于将情感以诗相寄:追逐过王尔德.王小波的文字,后陷于毛姆和斯蒂芬·金不可自拔:热爱文学的浪潮,白日梦到底却总在现实里清 ...

  4. Jsp学习笔记——第二天

    Jsp学习打卡 Jsp学习笔记---第二天 Jsp笔记 第二天 一. 复习 二. 动作元素(包含,转发) 1. 包含动作 [重点] 2. 转发动作 [了解] 三. 隐含对象(内置对象) 1. 概念 2 ...

  5. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  6. python基础语法及知识总结-Python 学习完基础语法知识后,如何进一步提高?

    ---4.30更新---感谢大家支持,点赞都破两千了.给大家整理出来新的资料,需要的小伙伴来自取: Python练手项目视频如下: Python自学基础知识如下: 以下为原文内容: Python 学习 ...

  7. idea编译的文件怎么用cmd打开_JAVA学习册|基础语法|cmd输出HelloWorld

    看到这个标题,估计已经有小伙伴知识本文要讲什么了,好,下面我们就开始正文 学java最开始的地方 很多老师的书和视频中,在安装完jdk,配置好环境变量,都会带大家用记事本写一个HelloWorld,然 ...

  8. java mysql jsp分页代码_JAVA/JSP学习系列之六(MySQL翻页例子)

    JAVA/JSP学习系列之六(MySQL翻页例子) 更新时间:2006年10月13日 00:00:00   作者: 一.运行前准备 下载了mysql的jdbc驱动(一个jar文件)并加载在CLASSP ...

  9. eclipse加速之禁用JS、jsp等文件的语法验证

    eclipse加速之禁用JS.jsp等文件的语法验证 去除eclipse的JS验证: 将windows->preference->Java Script->Validator-> ...

  10. 学习webpack4 - ES6语法转化

    学习webpack4 - 基础配置 学习webpack4 - HTML处理 学习webpack4 - 样式处理 学习webpack4 - ES6语法转化 学习webpack4 - 第三方库的使用 学习 ...

最新文章

  1. 磁盘分区形式mbr和gpt哪个好_济南历下区中考美术集训应该选哪个
  2. 扩展虚拟机Ubuntu磁盘容量空间
  3. Ubuntu | ubuntu 中配置静态 IP
  4. 关不关机 扫地机器人_【小米智能家居】米家扫拖机器人,模拟人工来回擦拖地!...
  5. webdiyer aspnet pager最近又用这个。还是记录下。
  6. mysql-in关键字,分组查询,分页查询
  7. [Python图像处理] 三十四.数字图像处理基础与几何图形绘制万字详解(推荐)
  8. 重学java基础第三课:学习方法和课程概述
  9. Java加密与解密的艺术~安全协议~模型分析
  10. [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
  11. 基于视图的DNS解析
  12. BETA冲刺(6/7)
  13. 用WPF开发仿QQ概念版之--------Loading预加载界面(闪屏窗体)
  14. 谷歌浏览器添加扩展程序
  15. 树莓派和机器人有啥关系(也有jetson tx2的知识主要)
  16. VC知识库BLOG-技术,非技术......
  17. 安装Linux无盘工作站
  18. Axure 9 Mac 版
  19. 2022年互联网+全国大学生创新创业大赛解读
  20. 20170919_C++面试问题记录

热门文章

  1. 使用UTF8编码将Excel转换为CSV
  2. CVPR2022-图像恢复重建Restormer论文解读
  3. 手机上怎么压缩html文件夹,iphone手机怎么压缩文件 iphone自带文件压缩功能操作方法分享...
  4. 区块链报告会心得体会3000_心得体会范文3000字
  5. ACM--津津的储蓄计划
  6. 怎么用电脑屏幕录制工具录制游戏
  7. 剑指Offer(较难)
  8. Conda创建虚拟环境以及包
  9. 两个栈实现队列的push-pop操作---C++
  10. weka mysql 汉字_Weka访问MySQL数据库