当前位置: 首页 > news >正文

2022/08/31 吉软 JSP的基本使用

学习目录

一、JSP的介绍与创建

二、JSP的本质

三、JSP的语法

四、JSP中的常用脚本

1. 声明脚本

2. 表达式脚本

3. 代码脚本

五、JSP三种注释

六、JSP九大内置对象

七、JSP四大域对象

面试题:

1.JSP和servlet的区别

2.JSP作用域

3.JSP的九大内置对象。内置:不需要创建,直接就能用。


一、JSP的介绍与创建

  1. JSP的全称是Java Server Pages,即Java的服务器页面
  2. JSP的主要作用是代替Servlet程序回传HTML页面的数据
  3. web目录(或其他)右击 --> new --> JSP/JSPX --> 输入文件名 --> 选择JSP file创建

二、JSP的本质

JSP页面本质上是一个Servlet程序,第一次访问JSP页面时(运行Tomcat服务器后在浏览器地址栏

输入路径),Tomcat服务器会将此JSP页面翻译成为一个Java源文件,并对其进行编译成为.class字

节码文件(一个.java,一个.class),当打开.java文件时发现其中的内容是:

而HttpJspBase类直接继承于HttpServlet类,即JSP翻译出来的Java类间接继承于HttpServlet类,证明JSP页面是一个Servlet程序

三、JSP的语法

JSP头部的page指令:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

JSP头部的page指令可以修改JSP页面中的一些重要属性或行为

(以下属性均写在page指令中,默认page指令中没有出现的属性都采用默认值):

(1) contentType属性:表示JSP返回的数据类型是什么,即response.setContentType()的参数值

(2) language属性:表示JSP翻译之后是什么语言文件(目前只支持Java)

(3) pageEncoding属性:表示当前JSP文件本身的字符集(可在IDEA右下角看到)

(4) import属性:表示导包(导类),与Java一致

(5) autoFlush属性:设置当out输出流缓冲区满了之后是否自动刷新缓冲区,默认值是true

(6) buffer属性:设置out缓冲区的大小,默认是8kb

        注意:out缓冲区满了之后不能自动刷新的话会报错

(7) errorPage属性:

        设置当JSP页面运行出错时自动跳转到的页面(错误信息页面)的路径,这个 路径一般都是以斜杠打头,表示请求的地址是http://ip:port/工程路径/,对应代码web目录

(8) isErrorPage属性:

        设置当前JSP页面是否是错误信息页面,默认是false,如果是true可以 获取错误信息

(9) session属性:设置访问当前JSP页面时是否会创建HttpSession对象,默认值是true

(10) extends属性:设置JSP页面翻译出来的Java类默认继承谁

        注意:以上默认值除非有特殊需要,否则不建议修改

四、JSP中的常用脚本

1. 声明脚本

格式:<%! 声明Java代码 %>

作用:可以给JSP翻译出来的Java类定义属性、方法、静态代码块、内部类等

特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中

代码演示:声明脚本的使用(此JSP文件在web目录下,名为First.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--1.声明类属性--%>
    <%!
        private String name;
        private static Map<String, Object> map;
    %>
    <%--2.声明类方法--%>
    <%!
        public int sum() {
            return 12;
        }
    %>
    <%--3.声明静态代码块--%>
    <%!
        static {
            map = new HashMap<String, Object>();
            map.put("key1", "value1");
        }
    %>
</body>
</html>

2. 表达式脚本

格式:<%=表达式 %>

作用:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)

特点:

(1) 所有的表达式脚本都会被翻译到对应的Java类的_jspService()方法中,故表达式脚本可以 直接

使用_jspService()方法参数中的对象

(2) 表达式脚本都会被编译后的Java类中的out.print()方法输出到浏览器页面上

(3) 表达式脚本中的表达式不能以分号结束

代码演示:表达式脚本的使用(此JSP文件在web目录下,名为First.jsp)

<%=22 %> <br/>
<%="可以输出字符串" %> <br/>
<%=map %> <br/>
<%--使用_jspService方法中的对象--%>
<%=request.getParameter("username") %>

注意:

write方法中的标签、转义字符自动识别为对应的功能,不在页面输出,执行各自代表的功能

out的两个方法也在_jspService方法中,也都是java语言

只有print、write方法、表达式脚本中的内容才可在浏览器中显示,其余Java代码的sout在控制台输出

3. 代码脚本

格式:<% Java语句 %>

作用:在JSP页面中可以编写需要的Java代码

特点:

(1) 代码脚本翻译后都在_jspService方法中,故代码脚本可以直接使用此方法参数中的对象

(2) 可以由多个代码脚本块组合完成一个完整的Java语句

(3) 代码脚本还可以和表达式脚本一起组合使用,在JSP页面上输出数据

代码演示:代码脚本的使用(此JSP文件在web目录下,名为First.jsp)

<%--1.if语句--%>
<%
    int i = 1;
    if (i == 1) {
        System.out.println("我爱祖国!");
    } else {
        System.out.println("我很爱祖国!");
    }
%> <br/>
<%--2.for循环语句--%>
<%
    for (int j = 0 ; j < 3; j++) {
        System.out.println("第" + j + "次循环");
    }
%> <br/>
<%--3.使用_jspService方法参数中的对象--%>
<%
    String username = request.getParameter("username");
    System.out.println("username对应的值为:" + username);
%>

五、JSP三种注释

HTML注释:<!--HTML注释-->

HTML注释会被翻译到JSP文件对应的Java类的_jspService方法中,以out.write()输出到客户端,

write方法会自动识别标签,执行标签对应的功能,不会在浏览器的页面上输出注释

Java注释:

        (1) //单行注释 (2) /*多行注释*/

Java注释要写在声明脚本和代码脚本中才被认为是Java注释,会被翻译到JSP文件对应的Java类

的_jspService方法中,在对应的Java类中也是注释

JSP注释:<%- -这是JSP注释- -%>

JSP注释中的内容不会在JSP文件翻译后的Java类中出现,即注释中的内容没有任何功能

六、JSP九大内置对象

JSP的内置对象指的是Tomcat服务器将JSP页面翻译为Java类之后内部提供的九大对象:

(将page指令的isErrorPage属性写成true可以出现exception对象)

request:请求对象
response:响应对象
pageContext:JSP的上下文对象
session:会话对象
application:ServletContext对象
config:ServletConfig对象
out:JSP输出流对象
page:指向当前JSP的对象
exception:异常对象

七、JSP四大域对象

在这里插入图片描述

域对象是指可以像Map一样存取数据的对象,四个域对象功能一样,只是对数据的存取范围不同


面试题:

1.JSP和servlet的区别

1、JSP本质上就是一个servlet

2、JSP更侧重于视图展示,servlet更侧重于逻辑处理

3、先有的servlet,后有的JSP

2.JSP作用域

四大作用域:

1、当前页(pageContext):一个属性只能在一个页面中获取。

2、一次请求(request):一个页面中设置的属性,范围是一次请求。

3、一次会话(session):一个会话中的属性,只要页面不关闭,都能获取到

4、整个web应用(application):在这个服务器上,当前项目下的任何一个位置都能获取。

3.JSP的九大内置对象。内置:不需要创建,直接就能用。

    1、request                 请求

    2、response              响应

    3、session*               会话

    4、out                        输出

    5、page                     当前JSP页面对象

    6、application            应用

    7、exception*             异常,只能在指定了isErrorPage="true"

    8、pageContext         当前页,作用域

    9、config                    配置

相关文章:

  • Nginx--Rewrite重写
  • vue——响应式数据、双向数据绑定、filter过滤器、面试题
  • MindMaster思维导图及亿图图示会员 超值获取途径
  • STD::pair<>的使用
  • 公众号搜题功能接口API
  • python3-python中的GUI,Tkinter的使用,抓取小米应用商店应用列表名称
  • 公众号查题接口API
  • 提高「程序员」的思维方式
  • EasyExcel自定义Converter解决LocalDateTime系列时间日期转换的问题
  • Nginx限流优化
  • 洗地机暗战:蓝海到血海,内卷的尽头没有赢家
  • python神经网络编程 豆瓣,用python构建神经网络
  • 2-4.spring源码--BeanPostProcessor
  • Centos8/Rocky9/linuxmint-21/安装docker和docker安装python3.9【亲测有效】
  • 网课答案公众号接口API提供
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • C++类中的特殊成员函数
  • iOS 系统授权开发
  • java8 Stream Pipelines 浅析
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Node项目之评分系统(二)- 数据库设计
  • Python连接Oracle
  • Travix是如何部署应用程序到Kubernetes上的
  • Twitter赢在开放,三年创造奇迹
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 多线程事务回滚
  • 复习Javascript专题(四):js中的深浅拷贝
  • 复杂数据处理
  • 汉诺塔算法
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端存储 - localStorage
  • 前嗅ForeSpider采集配置界面介绍
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 小程序01:wepy框架整合iview webapp UI
  • 一些关于Rust在2019年的思考
  • 你对linux中grep命令知道多少?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #Z0458. 树的中心2
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (0)Nginx 功能特性
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据