一、JSP
JSP全名Java Server Page,运行在服务器端的页面,。
有了JSP我们可以在JSP页面上,既写HTML代码,又可以写Java代码,简化了开发。
JSP中怎么写JAVA?
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
- <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
- <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
JSP的指令:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
指令:
- 1.page 设置一些配置
- ①、contentType,相当于response.setContentType()
作用:
1、 设置响应体的mime类型以及字符集
2、 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用
低级工具,则需要设置pageEncoding属性设置当前页面的字符集) - ②、import:导包
- ③、errorPage:设置出现错误,跳转的JSP页面。
- ④、isErrorPage:声明当前页面是错误页面,让该页面可以使用exception对象。
- ①、contentType,相当于response.setContentType()
- 2.include 在当前页面,导入其他的JSP子页面使用这个指令。
- 3.taglib 导入标签库资源,使用这个指令。
JSP的九种内置对象
- 1.pageContext对象
- 2.request对象
- 3.session对象
- 4.application对象
- 5.response对象
- 6.page对象
- 7.out对象
- 8.config对象
-
9.exception对象
二、MVC开发模式
如果在JSP中写了过多的代码,阅读维护都会变得是否困难,分工合作就更加困难了,所以要使用MVC开发模式。
M:Model(业务模型)——> JavaBean
V:View(视图) ——> JSP
C:Controller(控制器)——> Servlet
JSP尽量只用来写展示,那么如何获取数据呢?
EL表达式:${表达式}
EL表达式的作用:
1、运算:
- 运算符:
- 算数运算符: + - * /(div) %(mod)
- 比较运算符: > < >= <= == !=
- 逻辑运算符: &&(and) ||(or) !(not)
- 空运算符: empty
- 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
- ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
- ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
2、获取值、EL表达式只能从四个内置的域对象中获取值
-
1、${域名称.键名}:从指定域中获取指定键的值
域名称:- pageScope --> pageContext
- requestScope --> request
- sessionScope --> session
- applicationScope --> application(ServletContext)
2、 ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
如何获取对象中的值?
和BeanUtils类似,EL表达式也会去调用属性对应的getter方法来获取。
格式:${域名称.键名.属性名}
比如:${域名称.键名.name}——>就会去调用JavaBean中的getName方法。
利用这个原理,我们可以在类中设置getXxx的方法,在方法中把数据转换好格式,再调用${域名称.键名.xxx}就能显示格式化好之后的数据了,这叫逻辑视图,类中并没有xxx成员变量。
如何获取List集合中的值?
${域名称.键名[index]}
如何获取Map集合中的Value值?
- 1、${域名称.键名.key的名称}
- 2、${域名称.键名["key的名称"]}
隐式对象:
- el表达式中有11个隐式对象
- pageContext:
- 获取jsp其他八个内置对象
- ${pageContext.request.contextPath}:动态获取虚拟目录
JSTL(JavaServer Pages Tag LIbrary)JSP标准标签库
作用:用于简化和替换jsp页面上的java代码
使用步骤
- 1.导入Jar包
- 2.使用taglib引入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 3.使用标签
forEach循环标签:
<c:forEach items="${requestScope.users}" var="user" varStatus="c">
循环体
</c:forEach>
forEach相当于增强for循环,items 是集合,var是集合中的每个元素
varStatus的属性含义:
if标签:相当于java代码的if语句
<c:if test="">
若 test中的表达式为true就显示if标签体内容,false就不显示if标签体内容。
</c:if>
- 属性:
- test 必须属性,接受boolean表达式
- 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
- 一般情况下,test属性值会结合el表达式一起使用
- 注意:
- c:if标签没有else情况,想要else情况,则可以在定义一个c:if标签
choose选择标签、类似于switch标签。
test中获取的值等于谁就显示谁下面的标签体内容。
<c:choose>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:otherwise></c:otherwise> //相当于default
</c:choose>
三层架构:软件设计架构
- 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互。
- 业务逻辑层:处理业务逻辑的。
- 数据访问层:操作数据存储文件。
图解: