【JavaWeb】JSP的详解以及JSP基础语法的使用方式详解

1.首先需要明白JSP是什么?

JSP全称为JavaServer Pages.
.
JSP是一个java程序(并且本质上是一个Servlet)
.
Servlet是JavaEE的13个子规范之一,即JSP也是JavaEE的13个子规范之一
.
JSP是一套规范,所有的web服务器都遵循这套规范。
.
每一个web服务器都有内置一个JSP翻译引擎

如图,我们新建了一个index.jsp文件,并清空其内容,直接输入一段字符(随意输入)。
在这里插入图片描述
当我们启动服务器并访问此资源时可以在服务器输出局域栏上找到如图一段路径
CATALINA_BASE后面的路径,我的路径中由于有中文会乱码,实际路径为:C:\Users\chen\AppData\Local\JetBrains\IntelliJIdea2021.2\tomcat\90f022c8-52f0-46b3-a568-9adeb603cef7)

在这个路径下面继续点击work\Catalina\localhost\Test\org\apache\jsp
(Test为项目的名字,其他的路径名都相同)
如图:
在这里插入图片描述

当第一次访问index.jsp时,底层会在目标路径生成一个 index_jsp.java 文件,然后Tomcat服务器会将 index_jsp.java 编译生成 index_jsp.class 文件。
.
访问index.jsp实际上执行的是index_jsp.class中的方法。

JSP实际上就是一个Servlet

  • index.jsp访问的时候,会自动翻译生成index_jsp.java,会自动编译生成index_jsp.class,可知index.jsp就是一个类。

  • index_jsp类继承HttpspBase类,HttpspBase类又继承了HttpServlet类,所以index.jsp就是一个Servlet类。
    在这里插入图片描述
    在这里插入图片描述

  • JSP的生命周期和Servlet的生命周期完全相同,没有区别。

  • JSP和Servlet一样都是单例的

JSP和Servlet的区别

主要作用不同:

Servlet的职责:收集数据(Servlet的强项是逻辑处理,业务处理,之后连接数据库,获取或收集数据)

JSP的职责:展示数据(JSP的强项是做数据的展示)

JSP第一次访问为什么比较慢?

因为第一次访问jsp文件的时候

 1. 要把jsp文件翻译为生成Java源文件
 2. Java源文件要编译生成class字节码文件
 3. 再通过class字节码文件取创建Servlet对象
 4. 然后调用Servlet对象的init方法
 5. 最后调用Servlet对象的service方法

之后访问的时候就可以直接调用单例servlet对象的service方法即可。

JSP调试

直接打开JSP对应的Java源文件,对Java代码进行检查

JSP编译时报错:

当在jsp文件中编译了不合法的字符格式时,依旧会生成java源文件,但不会生成class字节码文件。

2.JSP的基础语法

在jsp文件中直接编写的字符会被保存翻译到java源文件的哪里?

在这里插入图片描述

而运行此文件在浏览器上呈现的效果如图:

在这里插入图片描述

这就是最开始我们在文件里面编辑的字符

翻译到servlet类的service方法的out.write(“字符目标位置”)
(注意:字符直接被翻译到双引号里面,被Java程序发当作普通字符串打印输出到浏览器)

在JSP中编写的HTML、CSS、JS代码,这些代码对于JSP来看只是一段普通的字符串。但是一旦将这些字符串输出到浏览器,浏览器就会对这些HTML、CSS、JS代码进行解释并执行,展现原有效果。

3.JSP中的基础语法

(1)<% java语句 %>


 1. 在这个符号中被编写的被视为java程序,被翻译到Servlet类的service方法体内部
 2. 在service当中编写的代码是有执行顺序的,方法体中的代码要遵循自上而下的顺序依次执行。
 3. 注意在方法体内部不能编写的代码同样也不能在此符号中编写,否则会报错(例如:静态代码块、方法、定义成员变量等等)。
 4. 此符号可以多次使用。

如图:

此时在index.java文件中的位置为:
在这里插入图片描述

(2)<%–注释–%>


 1. JSP的专业注释,不会被当作普通字符串翻译到Java源文件当中,只存在于index.jsp文件中
 2.  区别于<!--注释-->这种属于HTML的注释,依然会被翻译到java源代码当中,不建议使用。

(3)<%!代码 %> (少用,不建议使用)

在此符号当中编写的Java代码会自动翻译到service方法外。

由于在service方法外面编写静态变量和实例变量都会存在线程安全问题,在多线程并发的环境之下,单例的JSP中,一旦静态变量和实例变量发生修改操作,必然会引发线程安全问题。
在这里插入图片描述
在这里插入图片描述

(4)<% = %>


 1. 此符号用于向浏览器输出有Java代码的内容。
 2. 如果输出的内容中没有Java代码,可以直接编写在jsp文件中,不需要使用此符号。
 3. 这相当于翻译为了out.prin(Java代码);
 4. 编译到了java源文件的service方法中了
 5. 当输出的内容中含有Java的变量,输出的内容是一个动态的内容,则使用此符号。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)<%@page contentType=“text/html;charset=UTF-8”%>

page指令,通过contentType属性来设置响应的内容类型,一般用于防止中文乱码,编写在jsp文件的顶端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值