Servlet及JSP学习(四)
JSP
注:图片来自书本Head First Servlets & JSP
1. JSP代码在容器中的处理流程
2. JSP元素
(1) Scriptlet
<% out.println(foo.Counter.getCount()); %> 直接在<%%>中写Java代码
(2) 表达式代码
<%= Counter.getCount() %> 注意和Scriptlet的区别:等号及其位置,以及没有分号,等号后面的内容相当于Scriptlet中println内部中的内容
(3) 指令
常用的指令有三个:page,include,taglib
<%@ page import=“foo.*” %>page后面可以跟的属性有13个,包括buffer,session,errorPage,isErrorPage等
<%@ include file=“URL”%>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>
(4) 声明
<%! int count=0;%>类似于Java中定义全局变量,多个Scriptlet可用。注意百分号后有叹号,语句后有分号
3. 为JSP配置Servlet初始化参数
4. JSP标准动作
(1) < jsp:include >
与include指令的区别如下:
1) include指令的原理:
2) < jsp:include >标准动作的原理
总结:include指令是将两个页面合并生成一个Servlet进行请求处理,而< include:jsp >是进行转发机制,分别生成两个Servlet进行请求处理。如果是静态页面,使用include指令,如果被包含的页面包含动态的内容,只能使用< jsp:include >。
(2) < jsp:param >
< jsp:param >和< jsp:include >结合使用,用于定制被包含的内容
(3) < jsp:forward >
注意:发生转发时,请求转发到的目标资源首先会清空响应缓冲区,即转发前写到响应的所有内容都会清掉。
5. 无脚本的JSP
(1) 使用bean来实现
前端提交的请求可以不通过servlet,直接到JSP,此时JSP中如何获取变量名?
使用bean的具体演变过程如下
(2) 使用EL表达式
1) 基本用法
或者:
方括号左边可以为数组列表等且可以嵌套表达式,点号左边不允许
2) EL函数定义
分三步走
6. JSTL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
(1) 部分常用的JSTL介绍:
< c:foreach >:类似于Java语言中list等的foreach,用于集合、数组等的循环遍历。可设置遍历的起始点、遍历的步长、计数器等
< c:if >:判断是否满足某一条件时执行的语句
注意:单引号的使用,而不是双引号。
< c:choose >:类似于Java语言中的if else的用法,结合< c:when >与< c:otherwise >一起使用
< c:set >:与< jsp:setProperty >作用类似,但是后者只能设置bean的性质,而前者既可以设置bean性质,同时还可以设置map的值,同时可以设置属性的值。设置属性的值时使用var,设置bean性质或者map的值时使用target
注意:target用来值定具体的对象,而不是对象名。
< c:remove >:删除属性,scope可选
< c:import >:作用类似与include指令与< jsp:include >标准动作,不同于后面两种,< c:import >包含的页面可以来自web容器之外
< c:param >:和< jsp:param >功能相同,可完成页面内容的定制
< c:url >:可以满足所有超链接需求,包括在JSP中进行url重写
< c:catch >:在JSP页面中捕获异常,其下面的代码会执行