你不得不知道的JSP知识点

“拥有梦想只是一种智力,实现梦想才是一种能力”
你好,我是梦阳辰!期待与你相遇!

在这里插入图片描述

01.JSP概述

在Java程序中存在前端的代码。扩展功能时,改变前端代码时,需要重新编译。而JSP可以很好的解决了这个问题。

JSP是什么?
JavaServer Pages
基于java语言实现的服务器端页面。
JSP是JavaEE规范之一。

JSP文件通常存放在什么位置?
JSP可以放到WEB-INF目录外。
在实际开发中,有很多是将JSP放到WEB-INF目录中,保护JSP。
WEB-INF目录中的数据是相对安全的。

JSP文件的后缀。
默认是.jsp
但是jsp文件的后缀也可以修改的,通过CATALINA_HOME/conf/web.xml文件。

JS和JSP的区别
JS:javaScript,运行在浏览器中,和服务器没有关系。

JSP:JavaServer Pages,运行在服务器中,JSP底层就是java程序,运行在JVM中。其翻译生成的class文件,在CATALINA_HOME/work目录下。

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

02.JSP的执行原理

浏览器上访问的路径虽然是.jsp结尾,访问的是jsp文件,其实底层执行的是jsp对应的java程序。
Tomcat服务器负责将jsp文件翻译生成.java源文件,并且将java源文件编译生成.class字节码文件。
Tomcat服务器内置了一个JSP翻译引擎,专门负责翻译JSP文件,编译java源文件。

index.jsp会被翻译生成index_jsp.java,编译生成index_jsp.class
index_jsp这个类继承了HttpJspBase,而HttpJspBase继承了HttpServlet。
所以说JSP就是Servlet,只不过职责不同,JSP强项是做页面展示。

通过学习JSP语法,你就可以在JSP中写java程序,比如:

//_jspService方法中
<%
java程序
%>
//出现在类中
<!%
java程序
%>

在JSP文件中编写的HTML,CSS,JavaScript都以字符串的形式被翻译到:out.wirter(“这里”)。将其翻译成.java源代码,就是JSP规范。

与纯 Servlet 相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
与JavaScript相比:虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。

与静态HTML相比:静态HTML不包含动态信息。

第一次访问jsp文件
启动JSP翻译引擎
需要一个翻译的过程
需要一个编译的过程
需要Servlet对象创建的过程
init方法调用
service方法调用…

jsp也是单实例多线程环境下运行的一个Servlet对象。

只要jsp文件改动,就会被重新翻译(根据最后修改时间)。

03.JSP语法

小脚本
1.jsp注释(不会翻译到java源文件中)

<%--
--%>

2.关于jsp的小脚本scriptlet:

<%
java语句
%>

小脚本的java语句被翻译到Servlet的service方法中,所以小脚本必须编写“java语句”,java语句以分号结尾。

3.在JSP文件中编写的HTML,CSS,JavaScript都以字符串的形式被翻译到:out.wirter(“这里”)。

4.jsp规范,就是sun公司制定好的一些翻译规则,按照翻译规则进行翻译,生成对应的java源程序。不同的web服务器,翻译的结果是完全相同的。

5.小脚本的数量随意,可以多个,小脚本中编写的java程序出现在service方法中,service方法的代码时有执行顺序的,所以小脚本的程序也是有顺序的。

6.方法不可以嵌套,方法中的局部变量不能用pritvate,public修饰,不能编写静态语句块。

声明语法格式

1.jsp的声明语法格式:

<%!
实例变量
静态变量
方法
静态语句块
构造函数
......
%>
注:声明块中的java程序会被jsp翻译引擎翻译到service方法之外。
声明块中不能直接编写java语句(因为在类中)。
可以定义方法,声明变量。 

2.关于jsp的九大内置对象
1.什么是内置对象?
可以在jsp文件中拿来使用的引用。

2.九大内置对象名称。

内置对象名称               完整类名
pageContext(页面范围)    javax.servlet.jsp.PageContext
request(请求范围)       javax.servlet.http.HttpServletRequest
session(会话范围)       javax.servlet.hhtp.HttpSession
out (应用范围)          javax.servlet.jsp.JspWriter
response(响应)                 javax.servlet.http.HttpServletResponse
config(Servlet配置信息对象)                  javax.servlet.ServletConfig
exception                java.lang.Throwable 异常引用(isErrorPage="true")
page                     java.lang.Object[page=this] 很少用

以上内置对象只能在service方法中直接使用。

3.<% out.print();%>
等同于
<%= %>

4.动态的输出h1到h6标题字

<% 
for(int i=1;i<=6;i++){
	
%>
<h<%=i %>>标题字</h<%=i 5>>
<% 
}
%>

04.jsp指令

1.指令的作用
指导jsp的翻译引擎如何翻译jsp代码。

2.jsp中共三个指令。

*page              页面指令
*include           包含指令
*taglib            标签库指令

3.指令的使用语法格式:

<%@指令名 属性名=属性值 属性名=属性值......%>

4.page指令,常用的属性
contentType(设置jsp的响应内容类型)
pageEncoding(设置jsp响应时的 字符编码方式)

<%@page contentType="text/html; pageEncoding=UTF-8"%>

import(组织导入)

<%@page import="java.util.Date" %>

session(设置当前jsp页面中是否可以直接使用session内置对象)

<%=session %>
关于page指令中的session属性:
-session="true"
表示在当前JSP中可以直接使用内置对象session

程序执行的时候获取当前的session会话对象,若获取不到则新建session对象。
-session="false"
表示在当前JSP中不可以直接使用内置对象session


errorPage(错误页面)
当前页面出错之后要跳转的页面。

<%@page contentType="text/html; charset=UTF-8" errorPage="页面地址" %>

isErrorPage(是否是错误页面)
isErrorPage=“false” 表示内置对象exception无法使用。【缺省情况位false】
isErrorPage=“true” 表示内置对象exeption可以使用。

使用内置对象exception打印异常堆栈追踪信息。

<%
exception.printStackTrace();

isELIgnored(是否是EL表达式)

include指令

<body>       
<%@include file="地址" %>
</body>
包含展示地址页面的内容

优点:便与维护。
在网页中有一些主体框架,例如:网页头、网页脚,这些都是固定不变的。
我们可以将网页头和网页脚等固定不变的单独编写到某个jsp文件中。

底层实现原理
include实现原理:
1.编译器包含
2.a.jsp包含b.jsp,底层功一个java源文件,一个class字节码文件,翻译器包含/编译器包含/静态联编
3.静态联编的时候,多个jsp中可以共享同一个局部变量。
因为最终翻译之后service方法只有一个。

jsp的动作

语法格式:<jsp:动作名 属性名=属性值 属性名=属性值...>
</jsp:动作名>

转发(是一次请求)

<jsp:forward page="/index2.jsp"></jsp:forword>

重定向

//java实现
response.serdRedirect(request.getContextPath()+"/index2.jsp");

jsp主要用于页面展示,最好在jsp文件中少的编写java源代码。以后会通过EL表达式+JSEL标签库来代替jsp的java源代码。当然使用某些动作也能代替java源代码。

include动作
1.a.jsp包含b.jsp,底层分别生成两个java源文件,两个class字节码文件。
2.编译阶段并没有包含,编译阶段是两个独立的class字节码文件,生成两个Servlet,两个独立的service方法。
3.使用include动作属于运行阶段包含,实际上是在运行阶段a中的service方法调用了b中的service方法,达到了包含效果。
4.a.jsp包含b.jsp,若两个jsp文件中有重名的变量,只能使用动态包含。其余都可以使用静态包含。
5.include动作完成的动态包含,被称位动态编联。

” 你怎么过一天,就怎么过一生“

关注公众号【轻松玩编程】回复关键字“电子书”,“计算机资源”,“Java从入门到进阶”,”JavaScript教程“,“算法”,“Python学习资源”,“人工智能”等即可获取学习资源。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章