jsp内置对象{
request HttpServletRequest 在 _jspService(HttpServletResquest request,HttpServletReponse response);中定义的
用户端请求,这里会包含来自客户端(浏览器)GET/POST等请求参数
request也是作用域的一种 request中储存的键值对也可以用EL表达式获取
request中的键值对在本次请求中才能够获取,其他的域是不能够获取
request中能够做到转发
response HttpServletResponse 也是在_jspService方法中定义的用于向客户端(浏览器)传递信息(不是键值对并不能保存信息)
response可以做到重定向
pageContext PageContext 网页上下文 保存网页相关信息 jsp的其他对象均是通过这个对象获取
session HttpSession请求有关的会话 保存本次会话的相关信息
application ServletContext 保存servlet的相关信息 在jsp中一般不用这个servletContext 用pageContext 在servlet中用ServletContext
config ServletConfig 用于获取xml配置<init-param>信息
out JspWriter用于输出jsp页面的html js等页面信息在servlet中response.getWrite()或response.getOutputStram.write()方式输出
page Object对象就是本个jsp 对象
exception Excrption 针对错误的网页,捕捉的例外
}
Servlet生命周期{
web容器加载servlet,生命周期开始然后调用init()方法进行servlet初始化,这里的的init()方法仅执行一次,后面再次访问servlet时也不会调用这个方法
然后浏览器通过URL访问服务器,访问的同时会调用service()方法 service()会根据http访问的get/post方法调用doGet()/doPost()方法
最后调用destroy()仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
}
JSP、Servlet异同{
jsp是servlet技术扩展,本质上还是servlet,更强调应用的外表表达式,更注重表现层html的显示。servlet更注重java代码,以及相关的逻辑表示。
}
jsp中scope属性{
scope决定了javabean对象存在的范围
有四个值分别是page(默认值) request session application
当page时 他的范围只存在本jsp页面
request范围 存在当前jsp页面共享一个request对象(include forward都算)
session范围 存在整个session周期内
application一旦被创建,则存在整个web周期内
}
JSTL标签{
jstl标准标签库是一个jsp标签集合,它封装了jsp应用的通用核心功能(可以看成对在jsp页面中对java代码的封装)
根据jstl标签所提供的功能,将其分为5个类别
1.核心标签
2.格式化标签
3.sql标签
4.xml标签
5.jstl函数
jstl核心标签{
引入标签库 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out>在jsp页面中输出数据 eg:<c:out value="jstl"></c:out>
<c:set>在页面中创建变量,并且这些变量是有范围的可以跨jsp访问 eg:<c:set var="salary" scope="session" value="${200*2 }"></c:set>
<c:remove>移除用<c:set>创建的变量
<c:catch>用来处理产生错误的异常状况
<c:if>条件判断
<c:choose><c:when><c:otherwise> 用于在jsp中代替switch case的
<c:import>通过页面的相对/绝对路径拼接页面
<c:forEach>用于迭代标签 可用来迭代list等多种集合{
格式:<c:forTokens
items="<string>"
delims="<string>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
}
<c:forTakens>用于迭代一个有分隔符的字符串{
<c:forTokens items="google;runoob;taobao" delims=";" var="name">
<c:out value="${name}"/><p>
</c:forTokens>
输出的结果是:google
runoob
taobao
}
<c:url>用于生成一个url 可以将这个url赋值到一个变量上 并将这个变量设置一个范围
<c:param>用于在c:url中生成参数{
<c:url var="testurl" value="http://www.baidu.com" scope="session">
<c:param name="wd" value="test"></c:param>
</c:url>
}
<c:redirect>重定向
}
jstl格式化标签{
<fmt:formatNumber>用于格式化数字 百分比 货币{
<fmt:formatNumber
value="<string>"
type="<string>"
pattern="<string>"
currencyCode="<string>"
currencySymbol="<string>"
groupingUsed="<string>"
maxIntegerDigits="<string>"
minIntegerDigits="<string>"
maxFractionDigits="<string>"
minFractionDigits="<string>"
var="<string>"
scope="<string>"/>
type表示输出的是什么类型 number(数字 默认) currency(货币) percent(百分比)
其中 currencyCode currencySymbol表示货币码 货币符号 这个是取决于你定下的区域
}
}
<fmt:parseNumber>用于解析一个数字的字符串 就是将字符串转换成数字 同样有三种转换出来的结果number currency percent
<fmt:formatDate>用于输出不同格式的格式化日期{
<fmt:formatDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
timeZone="<string>"
var="<string>"
scope="<string>"/>
value要显示的时间一般是 java.util.Date()类的对象
type要显示的风格 date time both表示显示的是什么 日期 时间 和都显示
timeStyle表示时间以什么形式现实 {
full:下午05时43分00秒 CST
long:下午05时43分00秒
medium:5:43:36
short下午5:43
}
dateStyle同上面的timeStyle
pattern 自定义什么格式输出 pattern="yyyy-MM-dd HH:mm:ss G D z" 输出 2016-08-22 17:50:43 公元 235 CST
<fmt:formateDate>标签格式模式 G时代表示 y年份 M月份 d天 h 12小时制小时 H24小时制小时 m分钟 s秒速 S毫秒 E周几 D一年中的第几天 F一个月中的第几个周几(比如一月第二个周三) w一年中的第几周
W一个月中的地基周 a a.m/p.m指示符 k小时(12小时制的小时) K24小时制小时 z时区
<fmt:pareseDate>解析一个代表时间的字符串
<fmt:bundle>绑定资源标签 可以用于绑定properties资源然后用<fmt:message>输出相对应的资源
<fmt:setLocale>指定地区
<fmt:setBundle>绑定资源 这个和上面的绑定资源有区别 只能用这种模式
<fmt:bundle basename="test">
<fmt:message key="basemsg"></fmt:message>
</fmt:bundle>
而<fmt:setBundle>则可以先绑定好了 不在里面就能用<fmt:message>输出
<fmt:timeZone>指定时区
<fmt:setTimeZone>指定时区
<fmt:rquestEndcoding>设置request的字符编码
}
jstl sql标签用于与关系型数据库进行交互的标签{
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
基本使用规则 <sql:setDataSource var="datatest" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password=""/>
<sql:query dataSource="${datatest }" var="result" sql="select * from users"></sql:query>
<c:forEach var="row" items="${result.rows }">
<c:out value="${row.uid }"/>
<c:out value="${row.username }"/>
<c:out value="${row.password }"/>
</c:forEach>
首先创建一个连接的数据 再来做相对应的查询 然后用遍历的方式取出自己想要的数据
<sql:setDataSource>指定数据源
<sql:query>运行查询sql语句{
<sql:query
var="<string>"
scope="<string>"
sql="<string>"
dataSource="<string>"
startRow="<string>"
maxRows="<string>"/>
maxRows最大的变量中的最大条数,默认是无穷大 statRow起始的行数
}
<sql:update>执行sql insert语句
<sql:param>参数 对sql语句中的占位符(?)做一个补充
<sql:dateParam> 将sql语句中日期参数设为指定的date对象值
<sql:transaction> 事物标签 将查询 插入语句封装到事物中 可以避免脏读等错误的产生
}
jstl xml标签提供创建操作xml文档的标签{
引入xml <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
使用案例{
<c:set var="xmltest">
<books>
<book>
<name>Think In Java</name>
<author>tom</author>
</book>
<book>
<name>c++ plus</name>
<author>jun</author>
</book>
</books>
</c:set>
<x:parse xml="${xmltest }" var="output"></x:parse>
<x:out select="$output/books/book[1]/name"/>
<x:forEach select="$output/books/book/name" var="item">
<x:out select="$item" />
</x:forEach>
其中select后面的表达式是xpath表达式 在其中使用xml表达式的时候应该先加上$标识
<x:out>输出xpath标识后的数据
<x:parse>解析xml数据
<x:set>设置xpath表达式
<x:if> <x:forEach> <x:chose> <x:when> <x:otherwise> <x:transform><x:param>
}
}
jstl函数{
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
fn:contains()函数{
用法:
<c:if test="${fn:contains(<原始字符串>, <要查找的子字符串>)}">
...
</c:if>
}
fn:containsIgnoreCase()函数用于确定一个字符串是否包含指定的子串,忽略大小写。用法同上
fn:endsWith()函数用于确定一个字符串是否以指定后缀结尾。 用法同上
fn:escapeXml()函数忽略用于XML标记的字符。如果不用这个当字符串中有xml 等标签的时候将不会输出 如果有这个将字符串完整输出 用法${fn:escapeXml(<要转义标记的文本>)}
fn:indexOf()函数返回一个字符串中指定子串的位置。${fn:indexOf(<原始字符串>,<子字符串>)}
fn:join()函数将一个数组中的所有元素使用指定的分隔符来连接成一个字符串。用法:${fn:join([数组], <分隔符>)}
fn:length()函数返回字符串长度或集合中元素的数量。
fn:replace()函数将字符串中所有指定的子串用另外的字符串替换。用法${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)}
fn:split()函数将一个字符串用指定的分隔符分裂为一个子串数组。${fn:split(<带分隔符的字符串>, <分隔符>)}
fn:startsWith()函数用于确定一个字符串是否以指定的前缀开始。 <c:if test="${fn:startsWith(<原始字符串>, <搜索的前缀>)}"> </c:if>
fn:substring()函数返回字符串中指定开始和结束索引的子串。${fn:substring(<string>, <beginIndex>, <endIndex>)}
fn:substringAfter()函数返回字符串中指定子串后面的部分。${fn:substringAfter(<string>, <substring>)}
fn:substringBefore()函数返回一个字符串中指定子串前面的部分。${fn:substringBefore(<string>, <substring>)}
fn:toLowerCase()函数将字符串中的所有字符转为小写。${fn.toLowerCase(<string>)}
fn:toUpperCase()函数将一个字符串中的所有字符转为大写。${fn.toUpperCase(<string>)}
fn:trim()函数将字符串两端的空白符移除。${fn.trim(<string>)}
}
}