一、JSP介绍:
JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。
JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
JSP文件后缀名为 *.jsp 。
JSP开发的WEB应用可以跨平台使用,既可以运行在 Linux 上也能运行在 Windows 上。
二、JSP指令
JSP:
1. 指令
作用:用于配置JSP页面,导入资源文件
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
分类:
1. page : 配置JSP页面的
contentType:等同于response.setContentType()
1. 设置响应体的mime类型以及字符集
2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
import:导包
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
isErrorPage:标识当前也是是否是错误页面。
true:是,可以使用内置对象exception
false:否。默认值。不可以使用内置对象exception
2. include : 页面包含的。导入页面的资源文件
<%@include file="top.jsp"%>
3. taglib : 导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:前缀,自定义的
2. 注释:
1. html注释:
<!-- -->:只能注释html代码片段
2. jsp注释:推荐使用
<%-- --%>:可以注释所有
三、JSP内置对象
3. 内置对象
* 在jsp页面中不需要创建,直接使用的对象
* 一共有9个:
变量名 真实类型 作用
* pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
* request HttpServletRequest 一次请求访问的多个资源(转发)
* session HttpSession 一次会话的多个请求间
* application ServletContext 所有用户间共享数据
* response HttpServletResponse 响应对象
* page Object 当前页面(Servlet)的对象 this
* out JspWriter 输出对象,数据输出到页面上
* config ServletConfig Servlet的配置对象
* exception Throwable 异常对象
四、JSP写法:
1)html(css,js)
直接写标签及内容即可
2)java代码
a. java代码片断
<% java代码 %>
b. jsp表达式
<%= java表达式 %>
c. jsp声明 (a1.jsp)
<%! 声明一个变量或者方法 %> 声明实例变量(类的属性),开发中几乎不使用
五、 EL表达式
1. 概念:Expression Language 表达式语言
2. 作用:替换和简化jsp页面中java代码的编写
3. 语法:${表达式}
4. 注意:
* jsp默认支持el表达式的。如果要忽略el表达式
1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
2. \${表达式} :忽略当前这个el表达式
5. 使用:
1. 运算:
运算符:
1. 算数运算符: + - * /(div) %(mod)
2. 比较运算符: > < >= <= == !=
3. 逻辑运算符: &&(and) ||(or) !(not)
4. 空运算符: empty
功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
2. 获取值
1. el表达式只能从域对象中获取值
2. 语法:
1. ${域名称.键名}:从指定域中获取指定键的值
* 域名称:
1. pageScope --> pageContext
2. requestScope --> request
3. sessionScope --> session
4. applicationScope --> application(ServletContext)
* 举例:在request域中存储了name=张三
* 获取:${requestScope.name}
2. ${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
3. 获取对象、List集合、Map集合的值
1. 对象:${域名称.键名.属性名}
本质上会去调用对象的getter方法
2. List集合:${域名称.键名[索引]}
3. Map集合:
${域名称.键名.key名称}
${域名称.键名["key名称"]}
3. 隐式对象:
* el表达式中有11个隐式对象
1) param : 读取来自浏览器发送的请求参数.代替
request.getParameter("参数名")
${param.参数名}
2)initParam: ServletContext用于为当前网站中所有的Servlet提供
共享数据.如果共享数据来自于web.xml
application.getInitParamter("共享变量名");
JSP本质上也是Servlet,所以也有权利获得ServletContext
提供共享数据.
initParam 读取来自于web.xml设置共享数据
${initParam.共享变量名}
3)pageContext: 专门读取当前页作用域对象中存储的JSP中八大内置对象
* ${pageContext.request.contextPath}:动态获取虚拟目录
六、JSTL
1. 概念:JavaServer Pages Tag Library JSP标准标签库
是由Apache组织提供的开源的免费的jsp标签 <标签>
2. 作用:用于简化和替换jsp页面上的java代码
3. 使用步骤:
1. 导入jstl相关jar包(jstl-1.1.jar,1.1版本时,还需要加上standard-1.1.2.jar),当jstl-1.2.jar的时候,即版本为1.2的时候,不需要standard.jar包了,jstl-1.2.jar中已经集成包含了standard的jar包中的内容了!!
2. 引入标签库:taglib指令: <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3. 使用标签
4. 常用的JSTL标签
1.<c:set/>:
[作 用]:添加或则修改域对象的数据
[属 性]:
scope:指定操作的域对象.
scope="application"
scope="session"
scope="request"
scope="page"
var: 声明关键字
value:声明添加数据
[使 用]:
<c:set scope="session" var="name" value="mike">
等同于
<%
session.setAttribute("name","mike")
%>
2.<c:if>
[作 用]:在JSP文件实现简单if判断(if(){}),决定哪些内容可以
被推送到用户的浏览器上.
[属 性]:
test: 用于接收一个EL表达式返回的判断结果
test="true",此时就会将<c:if>标签中内容
推送到用户的浏览器上
[使 用]:
<c:if test="${}">
内容
</c:if>
3.<c:choose>:
[作 用]: 在JSP文件上实现[多分支选择](if...else if....else)
[使 用]:
<c:choose>
<c:when test="${}"> 内容1 </c:when> //相当于if判断分支
<c:when test="${}"> 内容2 </c:when> //相当于if判断分支
<c:when test="${}"> 内容3 </c:when> //相当于if判断分支
<c:otherwise>内容4</c:otherwise> //else
</c:choose>
4.<c:forEach>:
[作 用]: 在JSP文件上实现循环遍历功能.
[使 用]:
方式1: <c:forEach var="循环变量"
begin="初始化循环变量"
end="指定循环变量可以接收最大值"
step="设置循环变量自增值或则自减值"
>
输出内容
</c:forEach>
******forEach标签中通过var声明的循环变量,自动保存在
pageContext中,所以读取循环变量可以${循环变量}
step属性可以不声明.如果不声明表示循环变量每次
递增加一.
方式2: 遍历来自于域对象提供集合
<c:forEach items="遍历集合" var="循环变量">
</c:forEach>
*****items属性得到集合通过EL表达式获得.
jsp详细学习教程可参考菜鸟教程:JSP 教程