1、JSP基础
1.1 jsp概念
Servlet是j2ee提供的动态资源开发技术,是以Java的形式进行开发,在Java中书写HTML标签是一件比较麻烦的事情,所以sun开发出了jsp,
看起来像是HTML一样,但可以通过服务器的编译生成Servlet。
1.2 jsp的组成部分
1.2.1 模板元素
直接写在jsp中的HTML内容,看起来像是HTML一样,但最终会在被被翻译成Servlet的过程中 out.write()输出
1.2.2 脚本表达式
<%= 表达式内容%>接收的是一段Java表达式,在jsp翻译到Servlet的过程中,将计算表达式的值,并out.write()输出
1.2.3 脚本片段
<% Java代码 %>直接可以在脚本片段中写Java源代码,写的源代码会直接拷贝到翻译过来的Servlet中相应位置上
1.2.4 jsp声明
<%! jsp声明%>在其中可以写java代码,其中源代码会被拷贝到Servlet的service方法之外,可以利用它来为Servlet增加成员方法、成员变量、静态代码块
1.2.5 jsp注释
<%-- 注释内容 --%>注释内容将不会被服务器翻译到Servlet中,注意区分jsp注释和HTML注释
1.3 jsp指令
1.3.1 page指令
用来通知翻译引擎,如何翻译当前的jsp
[language=“Java”] 当前jsp使用的开发语言,一般不会更改
[extends="package.Class"] 当前jsp翻译成Servlet继承的类,必须是Servlet的子类,一般不需要更改
[session="true"]用来指定当前jsp是否使用Session隐式对象,如果为true,则翻译过来的Servlet有Session对象的引用,一旦访问
jsp就会调用request.getSession()方法,可能导致空间浪费。为false则Session不可用
[buffer="nine |8kb|size kb"] out隐式对象所使用的缓冲区大小
[autoFlush="true"] out隐式对象是否自动刷新缓冲区,默认为true
[isThreadSafe="true"] 翻译的Servlet是否实现SingleThreadModel
[errorPage="relative_url"] 如果页面出错,将要跳转到的页面,与web.xml相比默认先跳转此属性设置的页面
[isErrorPage="true"] 如为true,则Servlet含有exception隐式对象,封装上一个页面抛出的异常
[contentType="mimeType"]乱码相关,指定浏览器打开页面的编码方式
[pageEncoding="characterSet"]服务器翻译jsp时使用的编码
[isELIgnore=“true”]当前页面是否使用el表达式
1.3.2 include指令
<%@ include file="" %>静态引入其他页面的内容
静态引入:在源文件合并,多个jsp生成一个Servlet,由最终生成的Servlet响应
动态引入:在运行时多个输出合并,生成多个Servlet并响应,组成响应流响应,效率较低
1.3.3 taglib指令
<%@ taglib uri="" prefix="" %>引入标签库
2、jsp的九大隐式对象
config、application、request、response、Session、out、page、pageContext、exception
2.1 out对象
可以理解成response.getWriter()获得的printWriter
自带一个缓冲区,其大小由page指令中的buffer设定,当缓冲区存满或被关闭或当前jsp结束,则缓冲区的内容被刷新到response.getWriter()缓冲区中
2.2 pageContext对象
2.2.1 获取其它八大隐式对象,可以认为是一个入口对象
2.2.2 提供方法获取所有域中的数据
getAttribute();
setAttribute();
removeAttribute();
pageContext中代表域的常量
PageContext.APPLICATION_SCOPE
PageContext.SESSION_SCOPE
PageContext.REQUEST_SCOPE
PageContext.PAGE_SCOPE
findAttribute方法,在四大作用域中寻找属性,顺序是page域、Request域、Session域、application域,从小到大
2.2.3 作为域对象使用
作用范围:整个jsp页面,是四大作用域中最小的一个
生命周期:对jsp的访问时开始生成,响应结束时销毁
2.2.4 挑战到其他资源
提供forward和include方法,简化了重定向和转发的操作
3、标签
3.1 JSP标签:
<jsp:include>替代request.getRequestDispatcher().include()
<jsp:forward>替代request.getRequestDispatcher().forward()
<jsp:param>配合前两个标签,可以在包含或者转发时,传一些参数
<jsp:useBean id="beanName" class="package.class" scope="">
<jsp:setProperty name="beanName"
{
property="propertyName" value="<%= expression %>"
}/>用于为bean的属性赋值,name来指定bean的名字,property指定要设定的属性的名字,value设置值
<jsp:getProperty name="beanInstanceName" property="propertyName" />用于获取属性的值输出到输出流中
3.2 el表达式,替代<%= %>脚本表达式
3.2.1 获取域中的属性
${propName}在四个域中搜寻propName属性,输出值到输出流中
${pageScope.propName}获取指定域中的属性
${attr[0]}获取域中的集合的指定元素
${list[0]}获取list中的指定位置元素
${map.keyName}获取map中指定键的值
${bean.propName}获取javaBean的属性,相当于调用了JavaBean的get方法
${pageContext.request.contextPath}获取web应用名称
3.2.2 进行简单计算
3.2.3 获取web开发常用的对象
PageContext:代表PageContext对象
PageScope:代表page域,可以用来获取page域中的属性
RequestScope:Request域,可以用来获得Request域中的属性
SessionScope:Session域,可以获得 Session域中的属性
applicationScope:application域,可以获得application域中的属性
param: 代表请求参数组成的map集合 ${param.userName}
paramValues: 代表请求参数组成的map集合,集合的value是String[],获取一名多值的param
header: 获取请求头组成的map
headerValues: 请求头组成的map集合,一名多值
Cookie:获取Cookie组成的map对象,map的值为Cookie对象 ${cookie.cookieName.cookieValue}
initParam:一map封装的web.xml中配置的整个web应用的初始化参数
3.3 调用Java方法
4、JSTL标签库
4.1 引入 <%@ taglib %>
4.2 介绍 JavaServer Pages Standard Tag Library
4.3 标签库内容
核心标签库(core)--------c标签
国际化标签 fmt
数据库标签 sql
xml标签 xml
JSTL函数 el
4.4 核心标签库
<c:out>用于输出一段文本到pagecontext对象的out对象中
<c:set>用于把某一对象存在指定的域内,或者设置web域中的map属性对象或javabean属性对象的属性
<c:remove>删除各种web域中的属性
<c:catch>捕获嵌套在标签体中抛出的异常
<c:if test="">构造简单的“if-then”结构的条件表达式
<c:choose>指定多个条件选择的组合边界,必须与<c:when>和<c:otherwise>一起使用构造“if-else”的语句
<c:forEach>对一个集合对象中的元素进行循环迭代操作
<c:forTokens>浏览一字符串中的所有成员,由定义符号来分割
<c:param>可以嵌套在请求转发,重定向,url标签内附加参数
<c:import>实现include操作
<c:url> 实现URL重写,将会话标识符以参数的形式附在URL后面
<c:redirect>实现请求重定向