JSP
-
指令
- 作用:用于配置JSP页面,导入资源文件
- 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
例:- 分类:
- page : 配置JSP页面的
- contentType:等同于response.setContentType()
- 设置响应体的mime类型以及字符集
- 设置当前jsp页面的编码(只能是高级的IDE才能自动设置,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
- import:导包,写java代码,比如List 则需要导包。
- errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
测试:
3/0是报错的,当发生报错的时候,可以访问500.jsp页面。 - isErrorPage:标识当前是否是错误页面。
- true:是,可以使用内置对象exception
- false:否。默认值。不可以使用内置对象exception
在500.jsp页面上,可以导入isErrorPage;当发生错误的时候,可以将错误信息输出页面或者输出到日志中;
结果如下:
指令2.include : 页面包含的。导入页面的资源文件(我们编写了很多页面,其中有好多页面头信息是一样的。这时候,我们就不要重复编写了,只要让其中的页面进行包含即可)
- <%@include file=“top.jsp”%>
例:先写一个top.jsp文件
然后,再写一个home.jsp文件,并且对top.jsp进行导入:
访问home.jsp结果如下所示:
指令3: taglib : 导入资源(比如导入jstl标签库)
在没有导入标签库的时候,只能是使用html的标签,导入之后使用的更加多了- <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
- prefix:前缀,自定义的
例:在web下面创建WEB-INF,在WEB-INF下面创建lib将所需要的jar进行复制进去。
结果如下:
此时进行添加一个Library
点击确定;结果如下所示:
下面在jsp中进行导入:
取名前缀为c,此时就可以使用c标签了;
c下面的标签都可以使用了。
2.注释:
- contentType:等同于response.setContentType()
- html注释:(会发送到浏览器) :只能注释html代码片段
- jsp注释:推荐使用(不会发送)
<%-- --%>:可以注释所有
-
内置对象
- 在jsp页面中不需要创建,直接使用的对象
- 一共有9个:
变量名 真实类型 作用- pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
- request HttpServletRequest 一次请求访问的多个资源(转发)
- session HttpSession 一次会话的多个请求间
- application ServletContext 所有用户间共享数据
- response HttpServletResponse 响应对象
- page Object 当前页面(Servlet)的对象 this
- out JspWriter 输出对象,数据输出到页面上
- config ServletConfig Servlet的配置对象
- exception Throwable 异常对象
MVC:开发模式
- jsp演变历史
- 早期只有servlet,只能使用response输出标签数据,非常麻烦
- 后来有了jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作
- 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
- MVC:
- M:Model,模型。JavaBean
- 完成具体的业务操作,如:查询数据库,封装对象
- V:View,视图。JSP
- 展示数据
- C:Controller,控制器。Servlet
- 获取用户的输入
- 调用模型
- 将数据交给视图进行展示
图示:
优缺点:
-
优点:
- 耦合性低,方便维护,可以利于分工协作
- 重用性高
-
缺点:
- 使得项目架构变得复杂,对开发人员要求高。
- M:Model,模型。JavaBean
EL表达式(帮助jsp来简化java代码)
1.概念:Expression Language 表达式语言
2. 作用:替换和简化jsp页面中java代码的编写
3. 语法:${表达式}
例:${ 3 > 4}比如说对于这个表达式来说,它会判断为false;然后在页面上显示出来。
4. 注意:
jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式(此时,这个el表达式会在页面上进行纯字符串展现,如在页面上显示${3 > 4})
2. \${表达式} :忽略当前这个el表达式
5. 使用:
1. 运算:
* 运算符:
1. 算数运算符: + - * /(div) %(mod)
2. 比较运算符: > < >= <= == !=
3. 逻辑运算符: &&(and) ||(or) !(not)
4. 空运算符: empty
* 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
* ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
* ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
测试:
结果如下:
2. 获取值
1. el表达式只能从域对象中获取值 jsp中有四个域对象,上文内置对象前四个
2. 语法:
1. $ {域名称.键名}:从指定域中获取指定键的值
* 域名称:
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application(ServletContext)
* 举例:在request域中存储了name=张三
* 获取:$ {requestScope.name}
* 如果没有获取到就会显示一个空字符串,不报错或者显示null
2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
例:
el:的作用是用来简化jsp中java代码的,因为jsp现在不和适合拿来写java代码。
- 获取对象、List集合、Map集合的值
1.对象:
1. $ {域名称.键名.属性名}
本质上会去调用对象的getter方法
例:
结果如下:
注意:如果写 u . b i r S t r 代 表 的 是 执 行 u 对 象 中 g e t B i r S t r ( ) 方 法 的 返 回 值 , 这 个 方 法 叫 做 逻 辑 视 图 2. L i s t 集 合 : {u.birStr}代表的是执行u对象中getBirStr()方法的返回值,这个方法叫做逻辑视图 2. List集合: u.birStr代表的是执行u对象中getBirStr()方法的返回值,这个方法叫做逻辑视图2.List集合:{域名称.键名[索引]}
例:
结果如下
注意:list中存的是对象也是一样的,可以结合对象中查询进行查找的。
3. Map集合:
${域名称.键名.key名称}
${域名称.键名[“key名称”]}
例:
empty测试
不仅可以判断是否为null,也可以判断是否为空,当把str置为空字符串时,它就会显示为true;取反为 ${not empty str}判断是否不为空,不为null; - 隐式对象:(在el表达式中可以直接拿来使用)
* el表达式中有11个隐式对象
* pageContext:
* 1.可以获取jsp其他八个内置对象
* 例:${pageContext.request}
*2. ${pageContext.request.contextPath}:在jsp中动态获取虚拟目录(到时候虚拟目录改了,也不用改路径了)
JSTL
1.概念:JavaServer Pages Tag Library JSP 标准标签库
由Apache组织提供的开源的免费的jsp标签
2.作用:用于简化和替换jsp页面上的java代码
比如后端查出一个list集合,返回jsp 则需要他进行显示出来
3.使用步骤:
1.导入jstl相关jar包
2.引入标签库:taglib指令 : <%@ taglib%>
3.使用标签
4.常用的JSTL标签
1.if
2.choose:相当于switch
3.foreach:相当于for语句
5.测试
1.新建一个jstl文件夹,在文件夹里新建一个jstl1.jsp
2.将jar导入,并且加入到模块中,这个步骤之前已做
3.在jstl1.jsp中进行uri的引入,取名前缀为c
4.在jstl1.jsp中写如下代码:进行if语句的使用:
结果如下:
if常用的用法:
结果如下:
注意:jsp中if没有else如果需要写else则需要再写一份if即可;代码如下:
输出为3为奇数
2.choose学习,代码如下:
输出如下:
foreach:相当于for 作用是:1.完成重复的操作 2.遍历容器
1.完成重复操作时:有属性如下:1.begin:开始值2.end结束值3.var:临时变量
4.step:步长
5.varStatus:循环状态对象 他有两个属性 一个是index 代表容器中元素的索引,从0开始; 另一个是count代表的是当前循环是第几次循环,从1开始。
代码如下:
结果如下:
小案例jstl练习
有一个list集合,上面有一些user对象,目标是将list对象给显示出来
代码如下:
html显示如下: