一、 JSP:
Java Server Pages, java服务器端页面,它是一个特殊的页面,可以定义html标签,也可以定义java代码,在本质上就是一个Servlet
1、指令:用于配置页面,导入资源文件
** 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
** 指令名称—pag: 用于配置JSP页面
1. 属性contentType:等同于response.setContentType(),设置响应体的mime类型以及字符集,在高级的开发工具中可以设置当前jsp页面的编码,当使用低级的工具的时候,通过设置pageEncoding属性设置当前页面的字符集
2. 属性import:导包,java需要用到的资源包
3. 属性errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
4. 属性 isErrorPage:标识当前也是是否是错误页面,true可以使用内置对象exception,false是默认值,不可以使用内置对象exception
** 指令名称—include : 页面包含的。导入页面的资源文件,例如: <%@include file="top.jsp"%>
** 指令名称—taglib: 导入资源,例如:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>。其中prefix:前缀,自定义的
2、注释
** <!-- -->:只用于注释html代码片段
** <%-- --%>:jsp注释可以注释所有
3、JSP的脚本
** <% 代码 %>:定义的java代码,在service方法中
** <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置
** <%= 代码 %>:定义的java代码,会输出到页面上,类似于输出语句
4、 JSP的内置对象:在jsp页面中不需要获取和创建就可以直接使用,一共有9个内置对象
对象名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象 this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对 |
** response.getWriter()和out.write()的区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。response.getWriter()数据输出永远在out.write()之前,out会在指定位置出现,但是response.getWriter()会出现在最前面。一般推荐使用response.getWriter()。
二、 MVC开发模式
早期只有servlet,只能使用response输出标签数据,后来有jsp简化了Servlet的开发,过度使用jsp页面,造成难于维护,难于分工协作,后来借鉴mvc开发模式,使得程序的设计更加合理性
1、具体模式:
** M:Model,代表一种模型。JavaBean完成具体的业务操作。如:查询数据库,封装对象
** V:View,视图,JSP 展示数据
** C:Controller,控制器,Servlet,主要获取用户的输入,调用模型,并将数据交给视图进行展示
2、 优缺点:
** 优点:耦合性低,方便维护,可以利于分工协作,重用性高
** 缺点:使得项目架构变得复杂,对开发人员要求高
三、 EL表达式
Expression Language 表达式语言,用于替换和简化jsp页面中java代码的编写,el表达式中有11个隐式对象
1、 语法格式: ${表达式}。jsp默认支持el表达式的。如果要忽略el表达式,可以设置jsp中page指令中的isELIgnored="true" 忽略当前jsp页面中所有的el表达式,也可以用 \${表达式} 忽略当前这个el表达式
2、 运算符
** 算数运算符: + ,-, *, /(div), %(mod)
** 比较运算符: > ,< ,>=, <=, == ,!=
** 逻辑运算符: &&(and) ,||(or) ,!(not)
** 空运算符: empty,用于判断字符串、集合、数组对象是否为null或者长度是否为0
1. ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
2. ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
3、 获取值:el表达式只能从域对象中获取值
** ${域名称.键名}:从指定域中获取指定键的值
1. 域名称—pageScope --> pageContext
2. 域名称—requestScope --> request
3. 域名称—sessionScope --> session
4. 域名称—applicationScope --> application(ServletContext)
** ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
** 获取对象、List集合、Map集合的值:
1. 对象:${域名称.键名.属性名},在本质上会去调用对象的getter方法
2. List集合:${域名称.键名[索引]}
3. Map集合: ${域名称.键名.key名称} 或 ${域名称.键名["key名称"]}
** pageContext:可以获取jsp其他八个内置对象,${pageContext.request.contextPath} 可以实现动态获取虚拟目录
四、 JSTL标签
JavaServer Pages Tag Library JSP标准标签库,是由Apache组织提供的开源的免费的jsp标签 ,用于简化和替换jsp页面上的java代码
1、使用步骤:导入jstl相关jar包;引入标签库::<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2、常用JSTL标签
** if标签:if语句,但是没有else情况
1. 属性—test :必须属性,接受boolean表达式,一般test属性值会结合el表达式一起使用,为true显示标签体内容,否则不显示
** choose标签:相当于java代码的switch语句
1. when标签:在choose标签体内,用于做判断,相当于case
2. otherwise标签:在choose标签体内,其他情况的声明,相当于default
** foreach标签:相当于java代码的for语句