菜鸟学JavaWeb之——JSP
九、JSP9.1 概念Java Server Pages:Java服务器端页面可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义Java代码指令JSP的指令格式:<%@ 指令名称 属性名1=属性值1 属性名2 = 属性值2 …%>分类page:配置JSP页面的contentType:等同于response.setContentType()...
九、JSP
9.1 概念
Java Server Pages:Java服务器端页面
- 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义Java代码
指令
JSP的指令格式:<%@ 指令名称 属性名1=属性值1 属性名2 = 属性值2 …%>
分类
-
page:配置JSP页面的
-
contentType:等同于response.setContentType()
-
import:导包
-
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
-
isErrorPage:标识当前页是否是错误页面
true:是,可以使用内置对象exception
false:否,默认值。不可以使用内置对象exception
eg:
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="500.jsp "%>
-
-
taglib:导入资源(比如导入JSTL标签库)
eg:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
9.2 JSP原理
JSP本质上就是一个Servlet,当我们发布的时候网络容器会将JSP页面解析为Java的一个类,将JSP的每一行解析为Java代码。这个Servlet是网络容器帮我们完成的。
9.3 JSP小脚本:JSP定义Java代码的方式
-
<% 代码 %>:定义的Java代码在service方法中。service方法中可以定义什么,该脚本就可以定义什么
-
<%! 代码 %>:定义的Java代码在JSP转换后的Java类的成员位置。(一般不会用)
-
<%= 代码 %>:定义的Java代码会输出到页面上,输出语句中可以定义什么,该脚本就可以定义什么。
9.4 JSP内置对象
内置对象:在JSP页面中不需要获取和创建,可以直接使用的对象
JSP一个有9个内置对象
-
pageContext:当前页面共享数据,还可以获取其他八个内置对象
-
request:请求对象。一次请求访问的多个资源(转发)
-
response:响应对象
-
session:一次会话的多个请求间
-
application:所有用户间共享数据
-
page:当前页面(Servlet)的对象 this
-
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
-
response.getWriter()和out.write()的区别
在Tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。所以response.getWriter()数据输出永远在out.writer()之前
-
-
config:Servlet的配置对象
-
exception:异常对象
9.5 MVC开发模式
M:Model,模型。JavaBean
- 完成具体的业务操作,如:查询数据库,封装对象
V:View,视图。JSP
- 展示数据
C:Controller(中介),控制器。Servlet
- 获取用户的输入
- 调用模型
- 将数据交给视图进行展示
9.6 EL表达式
JSP中写太多Java代码会让代码繁琐难以维护,但有时候又需要做一些逻辑处理,这就引入了EL表达式和JSTL标签来替换Java代码。
作用:替换和简化jsp页面中的Java代码的编写
语法:${表达式}
使用:
-
运算
-
算术运算符:+ - * /(div) %(mod)
-
比较运算符:> < >= <= == !=
-
逻辑运算符:&&(and) ||(or) !(not)
-
空运算符:empty
功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0(取反:not empty)
eg:${empty list}
-
-
获取值
-
el表达式只能从域对象中获取值
-
语法:
-
${域名称.键名}:从指定域中获取指定键的值
域名称
- pageScope —> pageContext
- requestScope —> request (当前页面,本次请求)
- sessionScope —> session (指当前用户,没有退出之前(程序启动着))
- applicationScope —> application(ServletContext) (指所有用户,任何时候(一般用application来统计页面访问次数))
举例:在request域中存储了name=张三
获取:${requestScope.name}
-
${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
注意:如果需要越级拿值,比如request中有值,同时session里面也有,现需要拿session里的值,则通过sessionScope来拿(同样:applicationScope)
-
获取对象、List集合、Map集合的值
-
对象:${域名称.键名.属性名}(本质上调用的是对象的getter()方法)
-
List集合:${域名称.键名[索引]}
eg: l i s t [ 0 ] 、 {list[0]}、 list[0]、{list[0].name}
-
Map集合:${域名称.键名.key名称}
eg: m a p . n a m e 或 {map.name}或 map.name或{map[“name”]}、${map.user.name}
-
-
-
9.7 JSTL
标签库就是把小脚本进行的一次封装,EL表达式也是对小脚本的一次封装。只不过EL表达式封住的式取值过程,而标签库封装的是流程控制过程
JSTL:JSP标准标签库,由Apache组织提供的开源的免费的jsp标签
作用:用于简化和替换JSP页面上的Java代码
使用步骤:
- 导入JSTL相关的jar包
- 引入标签库:taglib指令:<%@ taglib %>
- 使用标签
9.7.1 常用的JSTL标签
if
-
c : if 标签
属性:
-
test 必须属性,接受boolean表达式,如果表达式为true,则显示if标签体内容,如果为false,则不下显示标签体内容。
一般情况下,test属性值会结合el表达式一起使用
<body> <% List list = new ArrayList(); list.add("aaa"); request.setAttribute("list",list); %> <c:if test="${not empty list}"> 遍历集合... </c:if> </body>
-
注意:c : if 标签没有else情况,想要else情况,则可以再定义一个c : if 标签
-
choose(Java的switch)
choose标签:相当于switch声明
when标签:相当于case
otherwise标签:相当于default
foreach(Java的for)
属性
- begin:开始值
- end:结束值
- var:临时变量(或容器中元素的临时变量)
- step:步长
- items:容器对象(遍历容器时用)
<c:forEach begin="1" end="10" var="i" step="1">
${i}<br>
</c:forEach>
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list);
%>
<%--遍历容器--%>
<c:forEach items="${list}" var="str">
${str}<br>
</c:forEach>
9.8 三层架构
界面层(表示层):用户看得到的界面。用户可以通过界面上的组件和服务器进行交互
业务逻辑层:处理业务逻辑的。
数据访问层:操作数据存储文件。
内容持续更新中…
更多推荐
所有评论(0)