JSP

  1. 为弥补 Servlet 的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。
  2. JSP是简化Servlet编写的一种技术,它将Java代码和HTML语句混合在同一个文件中编写(文件扩展名必须为.jsp),只对网页中要动态产生的内容采用Java代码编写,而对固定不变的静态内容采用静态HTML页面的方式编写。
  3. JSP看上去是HTML,但是其本质是Servlet
  4. 在JSP页面中编写的Java代码需要嵌套在<%%>中,称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素
  5. JSP可以放在Web应用的任何位置,WEB-INF以及其子目录除外. 其中WEB-INF目录下的页面不能被客户端浏览器直接访问.

 

JSP的运行原理

  1. WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它会把该访问请求交给JSP引擎去处理。
  2. 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
  3. 在WEB应用程序正式发布之前,其中的所有JSP页面预先编译成Servlet程序。
  4. *.jsp  --- > tomcat -- > 翻译成  -- > *.java ----- > *.class 最后运行的是*.class。

 

JSP 脚本片段和声明

  1. JSP脚本片断(scriptlet)是指嵌套在<%%>之中的一条或多条Java程序代码。
  2. 在JSP脚本片断中,可以定义变量、执行基本的程序运算、调用其他Java类、访问数据库、访问文件系统等普通Java程序所能实现的功能。
  3. 在JSP脚本片断可以直接使用JSP提供的隐式对象来完成WEB应用程序特有的功能。
  4. JSP脚本片断中的Java代码必须严格遵循Java语法。因为脚本片断中的Java代码将被原封不动地搬移进由JSP页面所翻译成的Servlet的_jspService方法中。
  5. 一个JSP页面可以有多个scriptlet,这些scriptlet中的代码可以相互访问。
  6. 单个scriptlet中的Java语句可以不完整,但多个scriptlet组合后的语句必须是完整的。通常用于判断语句或循环语句中。

 

  1. JSP声明 将Java代码封装在<%! %>之中,它里面的代码将被插入进Servlet的_jspService方法的外面。所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。
  2. 多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。
  3. JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。

 

JSP注释和JSP表达式

JSP注释格式:<%--   --%>

JSP表达式将java变量或表达式结果输出到客户端的一种简化方式。将输出内容封装在<%=%> 中,注意表达式后不能有分号。

 

JSP指令

         JSP指令为JSP引擎设计,不产生可见输出,只是通知引擎如何处理JSP页面的其他部分。

         格式:<%@ 指令 属性名=”value” %>

<@ page contentType=”text/html;charset=utf-8”%>

         指令目前定义三种,分别是page,include,taglib。

page指令定义JSP页面的各种属性:

 

include指令用于通知JSP引擎翻译当前JSP页面时,将其他文件的内容合并到这个JSP页面并转换成Servlet源文件。(这种在源文件级别引入的方式称为静态引入)。

            <%@ include file=”relativeURL” %>

 

    taglib指令用来导入JSTL标签库,下文再提。

 

JSP九大内置对象&四大作用域

九大对象

         Object page

         HttpServletRequest request

         HttpServletResponse response

         HttpSession session

         ServletContext application

         PageContext pageContext

         JspWriter out

         ServletConfig config

         Throwable exception

pageContext对象:

  1. pageContext对象封装当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。
  2. PageContext类中定义了一个setAttribute方法来将对象存储进pageContext对象内部的一个HashMap对象中,同时也定义了一个getAttribute方法来检索存储在该HashMap对象中的对象。
  3. PageContext类除了可以存储和检索自身中的属性对象外,还定义了可以存储和检索其他域范围内的属性对象的方法。 
  1. getPage方法返回page隐式对象
  2. getRequest方法返回request隐式对象
  3. getResponse方法返回response隐式对象
  4. getSession方法返回session隐式对象
  5. getServletContext方法返回application隐式对象
  6. getServletConfig方法返回config隐式对象
  7. getOut方法返回out隐式对象 
  8. getException方法返回exception隐式对象

 

 

EL表达式:

         用于输出结果;语法——${属性名}。

输出简化过程:

         <% out.print(request.getAttribute("name")); %>

<!-- 被以下方式替换了 -->

<%=request.getAttribute("name")%>

<!--又被以下El表达式替换了 -->

${name}

注:当name不设值时,${name} 的取值为“”空字符串,而<%=request.getAttribute(“name”)%>为null

 

EL表达式的功能

  • 11个内置对象
  • 从某个范围内取属性值
  • 支持运算符

 

11个内置对象:

对象名

作用

使用

pageScope

表示pageContext的域对象

${pageScope}

requestScope

表示request的域对象

${requestScope}

sessionScope

表示session的域对象

${sessionScope}

applicationScope

表示application的域对象

${applicationScope}

param

获取get请求的参数(地址?后的内容)

${param.参数名}

${paramValues}

paramValues

header

获取http请求

${header}

${headerValues}

headerValues

initParam

获取配置信息

${initParam}

cookie

表示cookie

${cookie}

pageContext

最重要的对象- 工具类,可获取其他对象

例如${pageContext.request}

${pageContext}

pageContext用来构建路径:

<base href="${pageContext.request.contextPath }/">

 

从某个范围内取属性值:

         未指定范围时,El表达式从四个域中通过属性名去找数据,按照从小到大的顺序查找,分别是page,request,session,application。如果找不到,会显示空字符串。如果多个域中有相同属性名,则当找到第一个时就会终止查找。

         也可指定范围, ${pageScope.name}; ${requestScope.name}; ${sessionScope.name};

${applicationScope.name}.

       当取数组或者列表时,需要指定下标,不能遍历。例如,${arr[0]}; ${list[1]}. 如果要遍历整个集合,我们需要使用jstl的foreach标签,之后再说。

       获取map,bean类型数据,直接使用:${map.key}; ${user.name}.

 

支持运算符:

       语法:${运算表达式}

常见运算符:==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge), &&(and), ||(or) , !(not)

       判断是否为空: ${empty name}, 是空返回true,否则返回false。

 

JSTL标签语言

         Java Standard Tag Library,是apache对EL表达式的扩展,非内置,使用需导包。

JSTL标签库包括五个,分别是

1、core:核心标签库                  核心标签,执行一些输出,设置值,可遍历

2fmt:格式化标签库                格式化标签,可格式化日期、数字等

3、sql:数据库标签库                 用于在页面执行sql

4、xml:xml标签库                     操作XML的标签

5、JSTL函数                               字符串处理函数

         JSP页面中使用taglib指令导入对应的标签库:

<%@ taglib prefix="c" uri=”http://java.sun.com/jsp/jstl/core “ %>

prefix="c":指定标签库的前缀

uri="http://java.sun.com/jstl/core":指定标签库的uri

 

         core标签

c:out  输出信息到页面,相当于${}, 当输出内容为null或空串时,输出default中的值

<c:out value="${name}" default="没有值"></c:out>

c:set 设置属性,scope取值四大域对象page、request、session、application,默认page

         <c:set var="cset" value="hello c:set" scope="request"></c:set>

c:remove 移除属性

         <c:remove var="cset" scope="request"/>

         <a href="${curl}">GO</a>     <!—获取值 -->

c:url 输出路径

<c:url var="curl" value="/index.jsp"></c:url>

c:if 判断

         <c:if test=”${empty name}”>name为空</c:if>

c:choose  判断 相当于if elseif else

         <c:choose>

                  <c:when test=”${param.score<60}”>相对于if(score<60)</c:when>

<c:when test=”${param.score<90}”>相当于else if(score<90)</c:when>

<c:otherwise>相当于else</c:otherwise>

         </c:choose>

c:forEach  遍历

Items

要被循环的信息

begin

开始的元素(0=第一个元素,1=第二个元素)

end

最后一个元素(0=第一个元素,1=第二个元素)

step

每一次迭代的步长

var

声明当前条目的变量名称

varStatus

代表循环状态的变量名称

.count:循环元素的个数

.index:循环元素的下标

.first:是否为第一个元素

.last:是否为最后一个元素

.current:当前元素

<c:forEach items="${userList }" var="user" varStatus="num">

<tr class="row${num.index % 2 +1}">

<td>

         <input type="checkbox" name="item" >${user.id }

</td>

      <td>${user.username }</td>

      <td>${user.pwd }</td>

      <td><c:if test="${user.sex == '1'}">男</c:if>

          <c:if test="${user.sex == '0'}">女</c:if>

</td>

      <td>

      <a href="#">查看详情</a>

          <a href="${pageContext.request.contextPath }/user/ /${user.id}">修改</a>

      </td>

   </tr>

</c:forEach>   

 

 

posted on 2018-09-25 09:09  七宝嘤嘤怪  阅读(191)  评论(0编辑  收藏  举报