JSP
01. JSP的概念
JSP: Java Server Page: java服务端页面;
在这个页面中,既可以直接输出html代码,又可以定义java代码;
>> 主要作用是:简化书写;
02. JSP原理
JSP本质就是一个Servlet
03. JSP的脚本: JSP定义Java代码的方式;
1. <% 代码 %>: 定义的java代码,在service方法中;
2. <%! 代码 %>: 定义的java代码,在jsp转换后的java类的成员位置;
(在servlet中,不般不建议定义变量去使用,所以这种方式一般用得少)
3. <%= 代码 %>: 定义的java代码,会输出到页面上; 输出语句中可以定义什么,该脚本就可以定义什么;
样例如下:
JSP转化后的java代码如下:
04. JSP的指令
作用:用于配置 JSP页面,导入资源文件;
格式: <%@ 指令名称 属性1=值1 属性2=值2 ...%>
多个指令之间,使用空格分开;
分类:
a. page : 配置JSP页面的;
* contentType: 等同于 response.setContentType();
> 设置响应体的MIME类型及字符集;
> 设置当前JSP页面的编码(高级IDE下可生效,文本类编辑器需要手动调置 pageEncoding 属性)
* import: 导包;
* errorPage: 当前页面发生异常后,会自动跳转到指定的错误页面;
* isErrorPage: 标识当前页面是否为异常页面;
> true: 当前面面为错误页面,可以使用内置对象 exception;
> false: 非错误页面,不能使用内置对象 exception;
b. include: 页面包含的;一般用于包含一些公共的内容;
<%@ include file="top.jsp" %>
c. taglib : 导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
> prefix: 前缀,自定义的;
05. JSP注释
a. html注释: 只能注释html代码片段;
<!-- HTML内容 -->
b. jsp注释: 推荐使用; 可以注释所有;
<%-- 要注释的内容 --%>
06. JSP的内置对象
* 所谓的内置对应,就是可以直接使用的对象;
>> pageContext.getXXX 可以获取其它8个内置对象;
* out: 字符输出流对象; 可以将数据输出到页面上;和 response.getWriter()类似;
* out 与 response的区别
* response.getWriter()输出的内容,总会在 out 输出的内容之前
>> 原因:在 TomCat 服务器真正给客户端做出响应之前;
会先找 response 缓冲区的数据输出,再找 out 缓冲区的内容输出
>> 用法: 因为在转换jsp到java时,使用的都是 out 对象来输出,
所以建议都使用 out 来输出内容,而 避免 response.getWriter 来影响展示顺序;
07. MVC开发模式
a. M: Model; 模型; 通过 JavaBean 实现;
>> 完成具体的业务操作;如查询数据库,封装对象;
b. V: View; 视图; 通过JSP实现;
>> 展示数据;
c. C: Controller; 控制器;通过servlet 实现;
>> 获取用户户输入;
>> 调用模型;
>> 将数据将给视图进行展示;
08. EL表达式
a. 概念: Expression Language 表达式语言
b. 作用:替换和简化jsp页面中java代码的编写;
c. 语法:${ 表达式 }
d. 注意:
** jsp默认支持EL表达式,如果要忽略EL表达式
> 设置 jsp中 配置 page 指令 isELIgnored="true"
** 在EL表达式前使用转义字符 \; 如: \${ 表达式 } 将原样输出;
e. 运算
** 算术运算符: +,-,*,/ (div),% (mod)
** 比较运算符:>,>=,<,<=,!=
** 逻辑运算符:&&(and), ||(or), !(not)
** 空运算符: empty
> 用于判断字符串,集合,数组对象是否为Null ,或者不为Null时的长度是否为0
> 使用方式: ${ empty xxx }
f. EL表达式的使用
* El表达式只能从域对象中获取值;
* 语法:$( 域名称.键名 ) 从指定域中获取指定键的值
> 域名称
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application (servletContext)
> 举例: 在request域中存储了 name=张三
获取: $(requestScope.name)
* 语法: $(键名):
依次查找: pageScope > requestScope > sessionScope > applicationScope 中是否存在指定键名的内容,直到找到为止;
* 取对象、List集合、Map集合中的值
> 对象: ${域名称.键名.属性名} --> 本质上会去调用对象的 getter 方法;
(属性:去掉get后首字母转小写)
> List集合: ${域名称.键名[索引]}
> Map集合:${域名称.键名.Key名称} 或者 $(域名称.键名["Key名称"])
g. 隐式对象的使用
** 虚拟目录的动态配置: ${pageContext.request.contextPath}
09. JSTL标签
1. 概念: JavaServer Pages Tag Library; JSP标准标签库;
由Apache组织提供的开源的免费的JSP标签;
2. 作用: 用于简化和替换JSP页面上的java代码;
3. 使用步骤
a. 导入jstl相关jar包; jstl-1.2.jar
b. 引入标签库: taglig指令; <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
c. 使用标签; c:if c:choose c:foreach
4. JSTL标签的使用
a. if 标签: 相当于java上的 if 语句
** test 属性:是一个必须填的属性,接受boolean表达式;
如果为true: 则显示if标签体中的内容;如果为false,则不显示标签体中的内容;
一般情况下,test属性值会结合EL表达式一起使用;
** 注意: c:if 标签没有else情况;想要else时,需要另外开启一个c:if 标签;
b. choose 标签: 相当于java中的switch;
c. foreach: 相当于 java代码中的 for 语句
1. 完成重复的操作; for (int i = 0; i < ; i++) { }
2. 遍历对象
d. 综合示例
10. 三层结构及对应框架
样例分析