-
概念:Java Server Pages Java服务器端页面
- 一个特殊的页面,其中既可以定义html标签,又可以定义Java代码。
- 作用:简化书写
- jsp本质上就是一个Servlet
- 简介:JSP(Java Server Pages,即:Java服务器页面),是一种跨平台的动态网页技术标准,由Sun Microsystems公司倡导、多家公司参与建立。它在HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
-
原理
- 服务器解析请求消息,获取index.jsp资源
- 将index.jsp转换为.java文件(本质就是Servlet)
- 编译.java文件,生成.class字节码文件
- 由字节码文件提供访问
详细过程:
- Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
- JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
- JSP引擎将servlet编译成可执行类,生成.class字节码文件,并且将原始请求传递给servlet引擎。
- Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
- Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。
-
JSP的脚本:JSP定义Java代码的方式
- <% 代码 %>:定义的Java代码的位置:在 service方法中,service方法中可以定义什么,该脚本中就可以定义什么
- <%! 代码 %>:定义的Java代码的位置:在jsp转换后的Java类的成员位置。【用的较少】
- <%= 代码 %>:定义的Java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么
-
指令
- 作用:用户配置jsp页面,导入资源文件
- 格式:
- <%@ 指令名称 属性名1=属性值1 属性名2=属性名2 %>
- 分类
- page:用户配置jsp页面
- 可以配置哪些属性
- contentType:等同于 response.setContentType()。比如:contentType=“text/html;charset=UTF-8”
- 设置响应体的MIME类型以及字符集
- 设置当前jsp页面的编码(只能是高级IDE才能生效。如果使用低级工具,如记事本,则需要设置pageEncoding属性设置当前页面的字符集)
- buffer:设置页面out输出对象的缓冲区大小,默认是8kb。比如:buffer=“16kb”
- import:导包。比如:<%@ page import=“java.util.List” %>
- errorPage:当前页面发生异常后,会跳转到指定的错误页面。比如:errorPage=“500.jsp”
- isErrorPage:标识当前页面是否是错误页面。
- false:默认值,不可以使用exception对象
- true:可以使用内置对象exception。 比如:<% out.print(exception.getMessage()); %> 输出错误信息到页面
- isELIgnored:是否忽略EL表达式
- false:默认是,不忽略EL表达式,jsp引擎会解析表达式
- true:忽略EL表达式,原样展示EL表达式内容
- contentType:等同于 response.setContentType()。比如:contentType=“text/html;charset=UTF-8”
- 可以配置哪些属性
- include:完成页面包含的。导入页面的资源文件。
- 比如:<%@include file=“top.jsp”%>
- taglib:导入资源
- <%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
- prefix:前缀,自定义。
- page:用户配置jsp页面
-
jsp页面的注释
- :只能用来注释html代码片段
- <%-- 注释 --%>:可以用来注释所有代码。【推荐使用】
-
JSP的隐式对象(内置对象)
- JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
- jsp有9个内置对象。其中有4个为域对象:request、session、pageContext、application
- request:HttpServletRequest类的实例
- 作用:一次请求访问的多个资源(转发)
- session:HttpSession类的实例
- 一次会话的多个请求间
- pageContext:PageContext类的实例,代表整个JSP页面。可以获取其他8个内置对象.
- 作用:当前页面共享数据。
- application:ServletContext类的实例,与应用上下文有关
- 所有用户间共享数据。
- response:HttpServletResponse类的实例,相应对象
- out:PrintWriter类的实例,用于把结果输出至网页上,字符输出流对象。可以将数据输出到页面上。和 response.getWriter() 类似
- response.getWriter()和out.print()的区别
- 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。response.getWriter()数据输出永远在out.print()之前。
- 不推荐在jsp中使用response.getWriter()输出,容易影响布局。
- response.getWriter()和out.print()的区别
- config:ServletConfig类的实例
- page:类似于Java类中的this关键字
- 当前Servlet对象
- Exception:Exception类的对象,代表发生错误的JSP页面中对应的异常对象
- request:HttpServletRequest类的实例
-
MVC:软件设计架构
- Model 模型。JavaBean
- 封装数据,操作数据库,处理业务逻辑
- View 视图。jsp/html
- 展示数据
- Controller 控制器。Servlet
- 获取客户端输入
- 调用模型
- 将数据交给视图展示
- 优点:耦合性低,重用性高,生命周期成本低,部署快,可维护性高
- 缺点:项目架构变得复杂,对开发人员要求高
- Model 模型。JavaBean
-
EL表达式 https://blog.csdn.net/qwerasdf123/article/details/4189889
- 概念:Expression Language 表达式语言
- 作用:替换和简化jsp页面中Java代码的编写
- 语法 ${表达式}
- 注意
- jsp默认支持EL表达式
- 忽略EL表达式
- 忽略当前jsp页面所有表达式:设置page指令中的属性isELIgnored=true
- 忽略某个EL表达式,EL表达式前添加反斜杠\:${表达式}
- 忽略EL表达式
- jsp默认支持EL表达式
- 功能
- 运算
- 运算符
- 算数运算符: 加+ 减- 乘* 除/或者div 取余%或者mod
- 比较运算符: > < >= <= == != 。返回值就是true、false
- 逻辑运算符:&&(and) ||(or) !(not)
- 空运算符:empty
- ${empty 值}:判断字符串、集合、数组对象是否为null或者长度是否为0
- ${not empty 值}:判断字符串、集合、数组对象不为null并且长度不为0
- 运算符
- 获取值,【常用】
- EL表达式只能从域对象中获取值。域对象:request、session、pageContext、application
- 语法
-
域
名
.
键
名
:
从
指
定
域
中
获
取
指
定
键
的
值
。
如
果
{域名.键名}:从指定域中获取指定键的值。如果
域名.键名:从指定域中获取指定键的值。如果{域名.键名}获取值为空,页面不会展示null,不展示任何异常字符。
- 域名,域的范围从小到大,如下:
- pageScope --> pageContext
- requestScope --> request
- sessionScope --> session
- applicationScope --> application(ServletContext)
- 比如:在request域中存储了key=value。
- 获取:${requestScope.key}
- 域名,域的范围从小到大,如下:
- ${键名}:表示从依次从最小的域中查找是否有该键对应的值,直到找到为止。
- 若域对象存储的数据对应的是对象、List集合、Map集合的值,如何获取?
- 对象:
- 语法:${域名.键名.属性名}
- 本质上会去调用对象的getter方法
- List集合
- 语法:${域名.键名[索引]}
- Map集合
- 语法1:${域名.键名.key名称}
- 语法2:${域名.键名[“key名称”]}
- 对象:
-
域
名
.
键
名
:
从
指
定
域
中
获
取
指
定
键
的
值
。
如
果
{域名.键名}:从指定域中获取指定键的值。如果
域名.键名:从指定域中获取指定键的值。如果{域名.键名}获取值为空,页面不会展示null,不展示任何异常字符。
- 隐式对象
- EL表达式中有11个隐式对象
- pageContext:获取jsp其他8个内置对象
- ${pageContext.request}
- ${pageContext.request.contextPath} 动态获取虚拟目录。
- 比如: code…
- pageContext:获取jsp其他8个内置对象
- EL表达式中有11个隐式对象
- 运算
-
JSTL标签
- 概念:JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由Apache的来维护的。
- 作用:用户简化和替换jsp页面上的java代码。
- 使用步骤
- 导入JSTL相关的jar包
- 引入标签库
- 语法 <%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
- 常用的JSTL标签
-
if :相当于Java代码if语句c:if标签。比如:<c:if test=“boolean表达式”></c:if>
-
属性
- test:接收boolean表达式(必须的属性)
- 表达式为true,则显示if标签体内容
- 表达式为false,则不显示if标签体内容
- test表达式,一般结合EL表达式一起使用
- test:接收boolean表达式(必须的属性)
-
c:if标签没有else情况。若需要else,则再定义一个c:if标签
<c:if test="${number % 2 != 0}">
${number}为奇数
</c:if><c:if test="${number %2 == 0}">
${number}为偶数
</c:if>
-
-
choose :相当于switch
- choose 相当于switch声明
- when 相当于case
- otherwise 相当于default
比如:
<c:choose>
<c:when test=“表达式”></c:when>
<c:otherwise></c:otherwise>
</c:choose> -
foreach:相当于Java中的for循环【重要,常用】
- 普通for循环:for (int i = 0; i <= 10; i++) {}
- 属性
- begin:开始值(包含)
- end:结束值(包含)
- var:临时变量(相当于i)
- step:步长(每次循环增加的数量)
- varStatus:循环状态对象
- count:循环的次数,从1开始
- 增强for循环:foreach
- 属性
- item:容器对象。 相当于list
- var:容器中元素的临时变量 相当于user
- varStatus:循环状态对象
- index:容器中元素的索引,从0开始
- count:循环的次数,从1开始
- 属性
- 普通for循环:for (int i = 0; i <= 10; i++) {}
-
JSP
最新推荐文章于 2022-04-11 10:38:00 发布