- JSP:它是和Servlet技术一样,都是SUN公司定义的一种用于开发动态WEB资源的技术,JSP实际上就是Servlet
- JSP执行原理
当浏览器发送请求给服务器时,访问index.jsp,会先创建一个index_jsp.java\index.jsp.class,在服务器work目录下,而这个类其实就是一个servlet底层代码实现就是继承了HttpServlet
- 最佳实践
Servlet:控制器。重点编写Java代码逻辑(获取表单数据、处理业务逻辑、分发转向)
JSP:代码显示模板。重点在于显示数据
JS的基本语法
- JSP模板元素
网页的静态内容,如:html标签和文本; - JSP的脚本
小脚本:<%java代码%>
表达式:<%=2+3%>等价于out.print(2+3)
声明<%!%>表示在类中定义全局成员、和静态块 - JSP注释
JSP注释:<%- -被注释的内容- -%>特点:安全、高效
网页注释:<!-- 网页注释 – 特点:不安全,费流量,因为会从服务器写到客户端去,没必要
JSP的3个指令
- JSP指令:是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引挚如何处理JSP页面中的其他部分;
- page:配置指令
作用:用于定义JSP页面的各种属性
language=“java”:表示支持JAVA语言
import:导包
session:true/false;如果是true创建session,如果是false不创建
buffer=“none/8kb/sizekb”;缓冲区大小
autoFlush=“true/false”;自动刷新
isThreadSafe=“true/false”
info=“text”;输出页面基本信息
errorPage=“url”;当jsp中报错,就跳到些url页码
isErrorPage=“true/false”
contentType=“text/html;charset=utf-8”;
pageEncoding=“characterSet/ISO-8859-1”
isELIgnored;是否支持EL表达式,默认是false表示支持 - include指令
静态包含:把其它资源包含到当前页面中
<%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
两者的区别:
静态:在编译时把两个文件合并
动态:不会合并文件,当代码执行到include时,才包含另一个文件的内容
原则:能用静的就不用动的 - taglib
作用:在jsp页面中导入JSTL标签库。替换jsp中的java代码
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %> c是别名
JSP的6个动作
- jsp:useBean创建一个对象
- jsp:setProperty设置对象的属性
- jsp:getProperty取出指定对象的属性值
- jsp:include动态导入
- jsp:forward请求转发
- jsp:param设置请求参数
9大内置对象
- 指在jsp的<%=%>和<%%>中可以直接使用的对象
- pageContext(重要)
1、本身也是一个域对象:它可以操作其它三个域对象(request、application、Session)的数据
void setAttribute(String name,Object value)
Object getAttribute(String name)
void removeAttribute(String name);
操作其它域对象
void setAttribute(String name, Object value, int Scope)
Object getAttribute(String name, int Scope)
void removeAttribute(String name)
Scope的值:
PageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
findAttribute(String name);自动从pare.request,session,application依次查找,找到了就取值,,结束查找;
2、它可以创建其它8个内置对象
在普通类中可以通过pageConext获取其它JSP隐式对象,自定义标签就使用
3、提供了简单的方法
pageContext.forward(“2.jsp”);
pageContextinclude(2.jsp);
四大域对象实际开发
PageContext:存放数据当前页面有效,开发时使用较少
ServletRequest:存放数据在一次请求(转发内)有效,使用非常多
HttpSession:在放数据在一次会话中有效,使用比较多,如:存放用户的提交信息,购物车功能
ServletContext:存放数据在整个应用范围内有效,因为范围太大,尽量少用,可以用来记录在线人数
EL表达式
-
要简化JSP中java代码的开发,它不是一种语言,是jsp中获取数据的一种规范;
-
获取数据
EL表达式只能获取存在4个作用域中的数据
${u}原理:pageContext.findAttribute(“u”)
EL获取对于null的数据,在页面表现为""字符
${u.nam } == u.getName();
点(.)运算符相当于调用get方法,
${u.name } == ${u[‘name’] } == ${u[“name”]}
-
运算
empty:判断null,空字符串和没有元素的集合,如果为null就返回true
三目运算符:${ empty list3 ? “您还没有买商品” : “您的商品如下”} -
11个隐式对象
JSTL
- 什么是jstl?:JSTL是jsp标准标签库
- JSTL的作用:使用JSTL实现JSP页面中逻辑处理。如判断、循环
- JSTL
1、在jsp页面添加taglib指令:
<%@ table uri =“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
<c:if test=""> < /c:if>
- 通用标签
set:定义变量
out:输出变量
remove:删除变量
- 条件标签
- 迭代标签(也就是循环)
普通循环&&增强循环
forEach中的varStatus属性
指向一个字符串,该字符串引用一个对象,map.put(“vc” ,一个对象)
这个对象记录着当前遍历的元素的一些信息
getIndex();返回索引,从0开始
getCount();返回计数,从1开始
isLast();是否是最后一个数,
isFirst();是否是第一个数