主要内容
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3d074635684186b25873f049e5dd6e7a.png)
一、JSP
1.1 JSP的基础语法
1.1.1 注释
JSP中支持两种注释语法操作:
一种是显示注释,这种注释允许客户端看见;另一种是隐式注释,这种注释客户端无法看见。
①显示注释:从HTML风格继承而来
②隐式注释:从JAVA风格继承;jsp自己的注释
JSP的三种方式:
- //单行注释
/* 多行注释*/<!--HTML风格的注释-->
<%-- JSP注释--%>
1.1.2 Scriptlet
JSP中的脚本小程序,所有嵌入HTML代码中的java程序,但是不建议使用,因为使用时会导致耦合过高。
JSP中的三种Scriptlet代码:
第一种:
<% %>
: java脚本段,可以定义局部变量、编写语句
第二种:<%! %>
::声明,可以定义全局(成员)变量、方法、类
第三种:<%= %>
:表达式,数据一个变量或具体类容
第一种和第三种生成的代码是在servlet的方法中,第二种生成的代码在servlet的类体中。
1.2 JSP的指令标签
使用包含操作,可以将一些重复的代码包含进来继续使用,从正常的页面组成来看,有时可能分为几个区域。而其中的一些区域可能是一直不需要改变的,改变的就其中的一个具体内容区域。现在有两种方法可以实现上述功能。
方法一:在每个JSP页面(HTML)都包含工具栏、头部信息、尾部信息、具体内容
方法二:将工具栏、头部信息、尾部信息都分成各个独立的文件,使用的时候直接导入
很明显,第二种方法比第一种更好,第一种会存在很多重复的代码,并且修改很不方便,在JSP中如果要想实现包含的操作,有两种做法:静态包含、动态包含,静态包含使用include 指令即可,动态包含则需要使用include动作标签。
1.2.1 include 静态包含
<%@ include file="要包含的文件路径"%> <!-- 相对路径 -->
静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样是在servlet引擎转译时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到_jspService方法中),所以只生成了一个servlet,所以两个页面不能有同名的变量。运行效率高一点点。耦合性较高,不够灵活。
特点:
- 将内容进行了直接的替换
- 静态包含只生成一个源码文件,最终的内容在一个jspservice方法体中,
- 不能出现同名变量
- 运行效率高一点点,耦合性较高,不够灵活。
1.2.2 include 动态包含
<jsp:include page="要包含的页面路径"></jsp:include>
特点:
- 动态包含相当于方法的调用
- 动态包含生成多个源码文件
- 可以定义同名变量
- 效率高,耦合度低
注意:当动态包含不需要传递参数时,include双标签之间不要有任何内容
使用动态包含传递参数:
<jsp:include page="要包含的页面路径">
<jsp:param name="参数名" value="参数值"/>
</jsp:include>
注意:name属性不支持表达式,value属性支持表达式
获取动态包含传递的数(被包含的j页面中):
<%
request.getParameter("参数名");
%>
1.3 JSP的四大域对象
1.3.1 四种属性范围
在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的就是一个设置的对象,可以再多少个页面中保存并可以继续使用
- page范围
pageContext :只在一个页面中保存属性,跳转之后无效 - request范围
request:只在一次请求中睐存,服务器跳转后依然有效 - session范围
session :在一次会话范围中,无论何种跳转都可以使用 - application范围
application :在整个服务器上保存
方法 | 类型 | 描述 |
---|---|---|
public void setAttribute(String name, Object o) | 普通 | 设置属性的名称及内容 |
public Object getAttribute(String name) | 普通 | 根据属性名称取属性 |
public void removeAttribute(String name) | 普通 | 删除指定的属性 |
1.3.2 属性范围的特点
- page
本页面取得服务器端跳转()(请求转发)后无效 - request
服务器跳转(请求转发)有效,客户端跳转无效
如果是客户端跳转,则相当于发出了两次请求,那么第一次的请求将不存在了;如果希望不管是客户端还是服务器跳转,都能保存的话,就需要继续扩大范围。 - session
无论客户端还是服务器端都可以取得,但是现在重新开启一个新的浏览器,则无法取得之前设置的session了,因为每一个session只保存在当前的浏览器当中,并在相关的页面取得。
对于服务器而言,每一个连接到它的客户端都是一个session
如果想要让属性设置一次之后,不管是否是新的浏览器打开都能取得则可以使用application - application
所有的application属性直接保存在服务器上,所有的用户(每一个session)都可以直接访问取得
只要是通过application设置的属性,则所有的session都可以取得,表示公共的内容,但是如果此时服务器重启了,则无法取得了,因为关闭服务器后,所有的属性都消失了,所以需要重新设置。
JSP中跳转方式