看完上一个章节,相信你已经掌握了servlet相关技术的基础知识和用法,你也学习过java的一些基础知识了,今天我们就一起来掌握动态web页面的制作姿势.
JSP(全称JavaServer Pages),是一门动态网页技术,可以在页面中嵌入输出java代码,动态输出数据,此时的页面,你可以想想它就是一个模板,把动态内容直接输出到你想要的位置就好了。像这样的技术也叫做模板技术,在以后的职业生涯中,你还会遇到很多很多,比如Velocity,FreeMaker……
JSP是运行在应用服务器中的,从本质上讲,它其实也是一个servlet,JSP页面在第一次在运行时,会被应用服务器翻译成一个servlet文件,然后应用服务器会将这个servlet进行编译,最后执行输出HTML文档。
JSP页面主要由常用指令,代码片段,内置对象构成我们看看JSP页面常用的指令都有哪些东西吧:
1.page指令, <%@ 指令名称 属性名1=属性值1 属性名2= ... %>,比如上图中的page指令,contentType用于声明页面的响应体字符编码等工作。import用于导入页面中需要使用的java类,errorPage指定页面运行发生异常时,跳转的错误页面…
2.include指令,<%@include file="top.jsp"%> 用于在页面中引入另一个页面
3. taglib指令,<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>用于指定使用哪个标签库,给出了例子是使用了c标签库
JSP还提供了几个内置对象用于直接在页面使用。具体情况如下表
变量名 | 真实servlet对象 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象 this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
EL(Expression Language) 表达式的出现是为了使JSP页面写起来更加简单。在JSP页面中访问模型对象可以通过EL表达式来实现。所有EL表达式的格式都是以“${}”表示。例如,${ userinfo}代表获取变量userinfo的值。当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${ pageScope. userinfo}表示访问page范围中的userinfo变量。接下来我们看看一些例子:
为了弥补html的不足(其实是为了解决自己搞出来的页面输出太多的代码片段问题),JAVAEE定义了JSTL标签,用于消灭页面的代码片段,从而提高代码的可读性和维护性。JSTL的核心标签主要有以下几类:核心标签库、I18N格式化标签库、SQL标签库、XML标签库、函数标签库。
今天我们就讲讲结果常用的核心标签库:
<c:if test="true"> <h1>条件为真所以输出,if标签没有else噢...</h1> </c:if>
注意,if标签是没有else的,只有if条件。属性为test,接受条件为boolean类型的值,如果满足条件,就输出标签中的内容。
<% request.setAttribute("number",8); %> <c:choose> <c:when test="${number == 1}">星期一</c:when> <c:when test="${number == 2}">星期二</c:when> <c:when test="${number == 3}">星期三</c:when> <c:when test="${number == 4}">星期四</c:when> <c:when test="${number == 5}">星期五</c:when> <c:when test="${number == 6}">星期六</c:when> <c:when test="${number == 7}">星期天</c:when> <c:otherwise>世界上真的有星期8噢</c:otherwise> </c:choose>
choose标签相当于switch语句,内嵌标签when标签,相当于case语句,otherwise标签,相当于delault语句。
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s"> ${i} <h3>${s.index}<h3> <h4> ${s.count} </h4><br> </c:forEach>
forEach标签可以用于循环实现数学计算以及计数的功能,属性:begin:开始值 end:结束值 var:临时变量step:步长(步长的意思是增量,为2即每次加2的意思) 。varStatus:循环状态对象 它有两个属性:index:容器中元素的索引,从0开始count:循环次数,从1开始
<c:forEach items="${servletUserList}" var="user" > 姓名:${user.name} 年龄:${user.age} 生日${user.birthdayStr}<br> </c:forEach>
forEach标签最常用于循环输出对象,这个对象一般来说是从servlet中传递过来的,当然你也可以在页面进行定义,只是为了编码规范,一般不会这样写,如果有幸遇到老系统,也不要奇怪噢。
下一章节,猿人工厂君要带大家学习数据库啦,请大家安装好MYSQL和图形工具SQLyog.很快,你就可以开发网站了噢。