一:JSP
1、JSP注释
<!-- --> HTML注释,它注释的是HTML标签代码
//, /* */, /** */ :Java代码注释,在jsp中依然可用,在<% %>里面使用
<%-- --%> :JSP特有的注释,它注释java代码
总结:html注释在整个过程是可见的,而其他两种注释在生成页面是不可见。
2、JSP指令
page:设置jsp页面的属性
contentType="text/html;charset=UTF-8" :浏览器打开网页时的字符集
pageEncoding="UTF-8" :存储文件的字符集
import="java.util.*" :导包,可以出现多个
include:静态包含,引入其他页面的源代码,统一在一个jsp中进行编译
file :相对路径
taglib:引入其他标签库
uri:标签库的uri路径
prefix:标签库的别名
3、JSP内置对象
response :HttpServletResponse
request :HttpServletRequest
session :HttpSession
application :ServletContext
page :Oject
out :JspWriter :先输出到response.getWriter()的缓冲区,然后一起输出到浏览器
config :ServletConfig
exception :Thorwable
pageContext :PageContext
1、获取其他的8个内置对象:抽取公共代码(通用性代码、框架性代码)
2、操作四个作用域
PageScope :页面范围内, pageContext
RequestScope :一次请求范围内(转发), request
SessionScope :一次会话(多次请求), session
ApplicationScope:整个应用 application
4、JSP作用域
1、操作四个作用域
PageScope :页面范围内, pageContext
RequestScope :一次请求范围内(转发), request
SessionScope :一次会话(多次请求), session
ApplicationScope:整个应用 application
2、方法:
getAttribute(String name);
getAttribute(String name, int scope);
setAttribue(String name, Object value);
setAttribue(String name, Object value, int scope);
findAttribute(String name); :从pageContext -》request-》session-application依次查找,如果找到,就停下来,如果说找不到就依次向上查找。
5、JSP的动作标签
<jsp:forward />
index.jsp 和 logo.jsp:
静态包含和动态包含的区别(面试)
静态包含:使用的是<%@ include file="" %>, 它会将要包含的页面(logo.jsp)的源代码进行复制,复制到要包含的页面(index.jsp),统一进行一次翻译,翻译成一个index_jsp.java的Servlet,会将该java文件编译成一个index_jsp.class字节码文件,进行执行
动态包含:使用的是<jsp:include />, 被包含的页面(logo.jsp)和要包含文件的页面(index.jsp)分别会生成相对应的java文件,并被编译为class文件,然后在index执行结果中引入logo的执行的结果
二:EL表达式
概述:格式${表达式} 目的是为简化jsp页面中<%= %>符号的书写
功能: 用来获取数据
1、获取JSP作用域中的数据【重点】
${name}和${requestScope.name}一样吗? 不一样
${requestScope.name} :指定了需要在request域中寻找一个key为name的键对应的值
${name} :和pageContext.findAttribute()方法一样,从page域-request域-session域-application域依次查找
1、指定作用域:使用pageScope、requestScope、sessionScope、applicationScope指定域的范围
2、获取数组的数据: ${name[0]} :获取域中name数组的第一个元素
3、获取集合的数据: ${list[0]} :获取集合中第一个元素
4、获取map的数据: ${map.key} :获取map中key所对应的数据
5、获取一个对象中的属性:${user.username} :获取user对象中的username属性,前提这个username属性必须对应一个标准的get方法
[]和.的区别:
[]:取数组、list集合元素的值,可以取属性中包含特殊符号的属性的值
. :获取对象中属性对应的值,属性就是一个不包含特殊字符的属性。
2、执行运算
数学运算
逻辑运算【重点】
> < >= <= == !=
关系运算【重点】
&& || !
非空或者空判断【重点】
${empty user} ${user == null}
3、操作web常用的开发对象
EL中可以使用11个web对象(常见的对象):
域对象:pageScope、requestScope、sessionScope、applicationScope
pageContext对象,通过该对象可以获取其他8个JSP的内置对象
cookie对象,获取指定的cookie
header对象,获取请求头信息
其余四个:param,paramValues,initParam,headerValues不是很常用
经常使用的表达式:
获取项目名:${pageContext.request.contextPath}(EL的域对象pageContext获取JSP的内置对象request,request调用contextPath方法)
获取cookie:${cookie.history.value}
获取浏览器类型:${header["User-Agent"]}
使用EL表达式进行逻辑运算、关系运算、非空判断比较多
特殊字符:. - 空格 单引号 双引号
4、调用java方法(几乎不用)
注意:EL表达式一般经常会与JSTL标签一起使用
三、JSTL标签
概述:经常和EL表达式一起使用,简化jsp页面的java代码书写
版本: 1.0 不支持el表达式;
1.1、1.2:支持el表达式
标签库:
core :核心标签库
<c:forEach>
<c:if>
fn :函数库
${ fn:contains("Hello World","Hello") }
${ fn:length("HelloWorld") }
${ fn:toLowerCase("ABCDE") }
fmt :国际化标签库
使用标签:
1、添加jar : jstl.jar, standard.jar
2、需要在jsp页面使用taglib指令引入这个标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用:c:set --> 向作用域中设置一个值
<c:set var="n1" value="30" scope="page"></c:set>
var:这个值定义的变量
value:值
scope:作用域 page request session application
c:if --> 判断的标签,没有else
<c:if test="${逻辑运算的表达式}" >
当test的条件为真,就会输出
</c:if>
c:forEach --> 在jsp页面遍历集合数据 ; 得到连续的数列
例子:
<c:forEach items="${list }" var="str" varStatus="status" begin="2" end="3">
序号: ${status.count } - 数值: ${str}<br/>
</c:forEach>
如果说在遍历集合的时候,添加了bengin和end属性,那么遍历就会从集合以bengin为下标的元素开始,到以end为下标的元素结束的这些元素的遍历
案例:在页面使用JSTL标签显示商品列表数据【重点·掌握】
SELECT * FROM product LIMIT 0, 10 : 0 表示从索引为0的数据查起,10:查询10条记录
1、JSP注释
<!-- --> HTML注释,它注释的是HTML标签代码
//, /* */, /** */ :Java代码注释,在jsp中依然可用,在<% %>里面使用
<%-- --%> :JSP特有的注释,它注释java代码
总结:html注释在整个过程是可见的,而其他两种注释在生成页面是不可见。
2、JSP指令
page:设置jsp页面的属性
contentType="text/html;charset=UTF-8" :浏览器打开网页时的字符集
pageEncoding="UTF-8" :存储文件的字符集
import="java.util.*" :导包,可以出现多个
include:静态包含,引入其他页面的源代码,统一在一个jsp中进行编译
file :相对路径
taglib:引入其他标签库
uri:标签库的uri路径
prefix:标签库的别名
3、JSP内置对象
response :HttpServletResponse
request :HttpServletRequest
session :HttpSession
application :ServletContext
page :Oject
out :JspWriter :先输出到response.getWriter()的缓冲区,然后一起输出到浏览器
config :ServletConfig
exception :Thorwable
pageContext :PageContext
1、获取其他的8个内置对象:抽取公共代码(通用性代码、框架性代码)
2、操作四个作用域
PageScope :页面范围内, pageContext
RequestScope :一次请求范围内(转发), request
SessionScope :一次会话(多次请求), session
ApplicationScope:整个应用 application
4、JSP作用域
1、操作四个作用域
PageScope :页面范围内, pageContext
RequestScope :一次请求范围内(转发), request
SessionScope :一次会话(多次请求), session
ApplicationScope:整个应用 application
2、方法:
getAttribute(String name);
getAttribute(String name, int scope);
setAttribue(String name, Object value);
setAttribue(String name, Object value, int scope);
findAttribute(String name); :从pageContext -》request-》session-application依次查找,如果找到,就停下来,如果说找不到就依次向上查找。
5、JSP的动作标签
<jsp:forward />
index.jsp 和 logo.jsp:
静态包含和动态包含的区别(面试)
静态包含:使用的是<%@ include file="" %>, 它会将要包含的页面(logo.jsp)的源代码进行复制,复制到要包含的页面(index.jsp),统一进行一次翻译,翻译成一个index_jsp.java的Servlet,会将该java文件编译成一个index_jsp.class字节码文件,进行执行
动态包含:使用的是<jsp:include />, 被包含的页面(logo.jsp)和要包含文件的页面(index.jsp)分别会生成相对应的java文件,并被编译为class文件,然后在index执行结果中引入logo的执行的结果
二:EL表达式
概述:格式${表达式} 目的是为简化jsp页面中<%= %>符号的书写
功能: 用来获取数据
1、获取JSP作用域中的数据【重点】
${name}和${requestScope.name}一样吗? 不一样
${requestScope.name} :指定了需要在request域中寻找一个key为name的键对应的值
${name} :和pageContext.findAttribute()方法一样,从page域-request域-session域-application域依次查找
1、指定作用域:使用pageScope、requestScope、sessionScope、applicationScope指定域的范围
2、获取数组的数据: ${name[0]} :获取域中name数组的第一个元素
3、获取集合的数据: ${list[0]} :获取集合中第一个元素
4、获取map的数据: ${map.key} :获取map中key所对应的数据
5、获取一个对象中的属性:${user.username} :获取user对象中的username属性,前提这个username属性必须对应一个标准的get方法
[]和.的区别:
[]:取数组、list集合元素的值,可以取属性中包含特殊符号的属性的值
. :获取对象中属性对应的值,属性就是一个不包含特殊字符的属性。
2、执行运算
数学运算
逻辑运算【重点】
> < >= <= == !=
关系运算【重点】
&& || !
非空或者空判断【重点】
${empty user} ${user == null}
3、操作web常用的开发对象
EL中可以使用11个web对象(常见的对象):
域对象:pageScope、requestScope、sessionScope、applicationScope
pageContext对象,通过该对象可以获取其他8个JSP的内置对象
cookie对象,获取指定的cookie
header对象,获取请求头信息
其余四个:param,paramValues,initParam,headerValues不是很常用
经常使用的表达式:
获取项目名:${pageContext.request.contextPath}(EL的域对象pageContext获取JSP的内置对象request,request调用contextPath方法)
获取cookie:${cookie.history.value}
获取浏览器类型:${header["User-Agent"]}
使用EL表达式进行逻辑运算、关系运算、非空判断比较多
特殊字符:. - 空格 单引号 双引号
4、调用java方法(几乎不用)
注意:EL表达式一般经常会与JSTL标签一起使用
三、JSTL标签
概述:经常和EL表达式一起使用,简化jsp页面的java代码书写
版本: 1.0 不支持el表达式;
1.1、1.2:支持el表达式
标签库:
core :核心标签库
<c:forEach>
<c:if>
fn :函数库
${ fn:contains("Hello World","Hello") }
${ fn:length("HelloWorld") }
${ fn:toLowerCase("ABCDE") }
fmt :国际化标签库
使用标签:
1、添加jar : jstl.jar, standard.jar
2、需要在jsp页面使用taglib指令引入这个标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用:c:set --> 向作用域中设置一个值
<c:set var="n1" value="30" scope="page"></c:set>
var:这个值定义的变量
value:值
scope:作用域 page request session application
c:if --> 判断的标签,没有else
<c:if test="${逻辑运算的表达式}" >
当test的条件为真,就会输出
</c:if>
c:forEach --> 在jsp页面遍历集合数据 ; 得到连续的数列
例子:
<c:forEach items="${list }" var="str" varStatus="status" begin="2" end="3">
序号: ${status.count } - 数值: ${str}<br/>
</c:forEach>
如果说在遍历集合的时候,添加了bengin和end属性,那么遍历就会从集合以bengin为下标的元素开始,到以end为下标的元素结束的这些元素的遍历
案例:在页面使用JSTL标签显示商品列表数据【重点·掌握】
SELECT * FROM product LIMIT 0, 10 : 0 表示从索引为0的数据查起,10:查询10条记录