JSP
问题:
Servlet:
- 优点:网页内容可以动态更改。
- 缺点:极大不便于网页内容的书写,影响开发效率
Servlet更适合做请求处理,但做响应JSP更方便
特点:
- 本质上还是Servlet
- 跨平台,一次编写处处运行
- 组件跨平台
- 健壮性和安全性
- JSP修改后不用重启服务器
过程:在url中输入a.jsp之后,tomcat会寻找name为a.jsp的Servlet,实际上底层有个Servlet叫JspServlet,把a.jsp转译为Servlet
JSP中的注释:
- 前端注释: 会被转译,也会被发送,但是不会被浏览器执行
<!-- -->
- java代码注释:会被转译,但是不会被servlet执行
//
- JSP注释:不会被转译
<%-- --%>
JSP语法指令:
1.前端代码直接编写
2.page指令:
<%@page 属性名="属性值" 属性名="属性值"...%>
language://声明jsp要被转译的语言
import://声明转译的java文件要导入的包,不同的包使用逗号隔开
pageEncoding://设置jsp文件的数据编码格式,
contentType,charset://设置jsp数据响应给浏览器时,浏览器的解析和编码格式
session://设置转译的servlet中是否开启session支持,默认开启。false表示关闭
errorPage://设置jsp运行错误跳转的页面
extends://设置jsp转译的java文件要继承的父类(包名+类名)
- 作用:配置jsp文件的转译的相关参数
3.局部代码块
<%
//声明java局部代码域
int a = 4;
%>
特点:
- 局部代码块中声明的java代码会被原样转译到jsp对应的servlet文件的_JspService方法中
- 代码块中使用的变量是局部变量
缺点:
- 使用局部代码块在jsp中进行逻辑判断,书写麻烦,阅读困难
开发:
- 使用servlet进行请求逻辑处理,使用jsp进行页面展现
4.jsp全局代码块
<%!
//声明java全局代码块
public void test(){
}
%>
特点: 声明的java代码作为全局代码转移到对应的servlet类中
注意: 全局代码块声明的代码需要使用局部代码块调用
5.Jsp的脚本段语句:
<%=
str
%>
等价于
<%
out.print(str);
%>
特点: 帮助我们快速的获取变量或者方法的返回值作为数据响应给浏览器
注意: 不要再变量名中加分号
位置: 除jsp语法要求以外的任意位置都可以写
1.JSP静态引入
<%@include file="includeStatic.jsp" %>
作用: 会将引入的jsp文件和当前的jsp文件转译成一个java(Servlet)文件使用
本质: 会将引入的.jsp的文件与原来的.jsp文件合并,引入的.jsp并没有被单独转译
注意: 当前文件和静态引入的jsp文件中不能够使用java代码块声明同名变量
2.动态引入
<jsp:include page="index.jsp"></jsp:include>
特点: 会将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件,在网页中显示合并后的显示效果
注意: 动态引入允许文件中声明同名变量
优点: 降低jsp代码的冗余,便于维护升级
JSP的转发 forward标签
<jsp:forward page="forward.jsp">
<jsp:param name="str" value="aaa"></jsp:param>
</jsp:forward>
特点:
- 一次请求
- 地址栏信息不变
注意:
- 在转发标签的两个标签中间除了写 param子标签不会出错,其他任意字符都会报错
- name为附带的数据的键名,value为附带的数据内容
- 数据会以?的形式拼接在转发路径的后面
JSP九大内置对象:
- jsp文件在转译成对应的Servlet文件的时候自动生成的并声明的对象。我们在jsp页面中直接使用即可。
- 注意:内置对象在jsp页面中使用,使用局部代码块或者脚本段语句来使用。不能在全局代码块中使用。
内容:
- 1.pageContext:页面上下文对象,封存了其他内置对象。封存了当前jsp的运行信息
注意:每个jsp文件单独拥有一个pageContext对象
作用域:当前页面
-
2.request:封存当前请求数据的对象。由tomcat服务器创建
-
3.session:此对象用来存储用户的不同请求的共享数据
-
4.application:ServletContext对象,一个项目只有一个。存储用户共享数据的对象,以及完成其他操作。作用域在项目内
-
5.response:响应对象,用来响应请求处理结果给浏览器的对象
-
6.out:响应对象,jsp内部使用。带有缓冲区的响应对象,效率高于response对象
-
7.page:代表当前jsp页面的对象,相当于java中的 this
-
8.exception:异常对象,存储了当前运行的异常信息
注意:使用此对象需要在page指定中使用属性isErrorPage="true"开启
-
9.config:也就是ServletConfig对象,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取
四个作用域对象
pageContext:
- 当前页面
- 解决了当前页面内的数据共享问题
- 获取其他内置对象
request:
- 一次请求
- 一次请求的servlet的数据共享
- 通过请求转发将数据流转给下一个servlet
session:
- 一次会话
- 一个用户的不同请求的数据共享
- 将数据从一次请求流转到其他请求
application:
- 项目内
- 不同用户的数据共享问题。
- 将数据从一个用户流转给其他用户
作用:数据流转
JSP的路径
在jsp中资源路径可以1.使用相对路径完成跳转。但是
- 资源的位置不可随意更改
- 需要使用…/来进行文件夹的跳出。比较麻烦
2.使用绝对路径:
- /虚拟项目名/项目资源路径
注意:在jsp中资源的第一个/表示的是服务器根目录,相当于localhost:8080