JSP
简介
JSP对比html 而言,html 只能为用户提供静态数据,而 Jsp 技术允许在页面中嵌套 java 代码,为用户提供动态数据。
相比 servlet 而言,servlet 很难对数据进行排版,而 jsp 除了可以用 java 代码产生动态数据的同时,也很容易对数据进行排版。
不管是 JSP 还是 Servlet,虽然都可以用于开发动态 web 资源。但由于这 2 门技术各自的特点,在长期的软件实践中,人们逐渐把 servlet 作为 web 应用中的控制器组件来使用, 而把 JSP 技术作为数据显示模板来使用。
其实 Jsp 就是一个 Servlet,当我们第一次访问 Jsp 的时候,Jsp 引擎都会将这个 Jsp 翻译 成一个 Servlet,这个文件存放在tomcat(源码目录) 中的 work 目录中。
-C:\Users\alion\.IntelliJIdea2019.2\system\tomcat\Tomcat_9_0_30_WebPro1\work\Catalina\localhost\alion01\org\apache\jsp
注释
JSP 有3种注释的方式
-
html注释方式——<!—注释内容->
这种方式注释jsp代码。如果代码有问题。运行的时候还是会报错的。所以不靠谱 但是这种方式是显示注释,可以被浏览器解析。一般不用。
-
java方式注释——在<%%>中使用。
用来注释java代码。 是隐式注释。不会被浏览器读取
-
<%-- JSP 注释 --%>
jsp方式注释。在jsp页面中使用这种方式注释就好。
Scriptlet
在 JSP 中最重要的部分就是 Scriptlet(脚本小程序),所有嵌入在 HTML 代码中的 Java 程序。
在 JSP 中一共有三种 Scriptlet 代码:都必须使用 Scriptlet 标记出来
-
<% %> ——java脚本段,可以定义局部变量、编写语句
定义在这范围中的代码,会被tomcat解析到service方法中。并且是从上往下解析 因此不同的<%%>中的变量可以访问到。其实就和在service方法中写语句一样。没区别
<%
String name ="1234";
%>
<%
System.out.println(name);
%>
-
<%! %> ——用来声明 全局的变量、方法 、和类。
定义的方法会作为 编译后的Servlet类的 方法,而类会作为内部类存在。 声明的变量会被定义为全局变量
<%!
public void name(){
System.out.println("你好呀");
}
%>
<%!
class Person{
private String name;
}
%>
-
<%= %> ——定义表达式。存储一个变量或者具体的内容
在编译后的Servlet类中 以 out.print(name);方式输出。会在页面中显示该变量 所以可以用来做 显示一个具体内容或者变量。相当于在页面中写了out.print();
Include标签(指令标签)
使用包含操作,可以将一些重复的代码包含进来继续使用,从正常的页面组成来看,有时可能分为几个区域。而其中的一些区域可能是一直不需要改变的,改变的就其中的一个具体内容区域。
include 静态包含
<%@ include file=“要包含的文件路径” %> ——file中写相对路径
只能包含本地资源文件,可以是jsp文件,也可以是html页面
<%@include file="index.jsp"%>//index.jsp为同级页面。
静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样,是在 servlet 引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起, 全部放到_jspService 方法中),所以只生成了一个 servlet,所以两个页面不能有同名的变量。 运行效率高一点点。耦合性较高,不够灵活。
include 动态包含
动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分,只有当运行时,才会动态包含进来,好比方法的调用。
-<jsp:include page="include.jsp"></jsp:include>
注意:动态包含,中间不要加任何内容,包括空格,除非确认要使用参数,否则报错!
<%
String a = "hello.jsp";
%>
<jsp:include page="<%=a %>"></jsp:include> //通过<%=%>来使用变量。
org.apache.jasper.runtime.JspRuntimeLibr