JSP的使用以及EL和JSTL的使用

1.1.1. 为什么有JSP规范

Servlet技术产生以后,在使用过程中存在一个很大的问题,即为了表现页面的效果而需要输出大量的HTML标签,这些标签在Servlet中表现为一个个的字符串常量。这种输出页面的方式不仅仅增加了开发时对页面的控制难度,也不利于后期的维护。为了能够将Servlet中用于表现的功能分离出来,提高视图的开发效率,推出了JSP这种技术,主要用于将Servlet中负责显示的语句抽取出来。

1.1.2. 什么是JSP

JSP(Java Server Page)是Sun公司制定的一种服务器端动态页面技术的组件规范,以“.jsp”为后缀的文件中既包含HTML静态标记用于表现页面,也包含特殊的代码,用于生成动态内容。

JSP作为简化Servlet开发的一种技术,实质上最终依然要转变为Servlet才可能运行,只不过这个转变过程由Servlet容器来完成。所以遵循JSP的编写规范才能使得JSP转变为需要的Servlet。

 九大内置对象:            作用域

  pageContext(页面上下文对象)     page(页面执行期)

  request(请求对象)          一次请求

  response(响应对象)          一次响应

  session(会话对象)          会话期

   application(应用程序对象)       程序运行状态

   out(输出对象)             page

   config(配置对象)            page

   exception(异常)            page  

   page(页面对象)            page  

 四大域对象(保存数据,实现传递)

     pageContext 

     request

     session

     application

 jsp中常用的三种指令(  <%@指令名   属性=值  % >  

    page指令

    include指令

    taglib指令

  jsp中导包(  <%--导包--%>  )

EL表达式的使用

  方式一:${对象名.属性名}  例:${user.name}

    执行的过程为:从pageContext、request、session、application中依次查找绑定名为“user”的对象,找到后调用“getName”方法,将返回值输出。

    假定在session中绑定了一个对象,如下:

    User  obj = new User(1,“胡萝卜”);

    session.setAttribute(“user”,obj);

    那么${user.name}等价于下面代码:

    <%

          User u = (User)session.getAttribute(“user”);

          out.print(u.getName();

    %>

  方式二:${对象名[“属性名”]}

    假定在Servlet中有如下代码:

    User obj = new User(1,”胡萝卜”);

    session.setAttribute(“user”,obj);

    session.setAttribute(“pName”,”id”);

    在JSP中编写如下代码会输出“1”:

    ${sessionScope.user[“id“]}

    在JSP中编写如下代码也会输出“1”:

    ${sessionScope.user[sessionScope.pName]}

    如果pName在绑定时不指定id,而是name,那么这个表达式就会输出“胡萝卜“,所以这种写法可以认为是表达式中有一个变量。sessionScope.pName 等价于                           session.getAttribute(“pName”)。

    那么对于interests这个数组属性的值可以使用如下表达式访问:

    ${user.interests[0]}

   

  指定对象的查找范围  

    在书写表达式时,如果没有指定搜索范围,那么系统会依次调用pageContext、request、session、application的getAttribute()方法。这样不限定查找范围的代码不利于排错,

    所以这种取值的操作可以限定对象的查找范围。如:

    ${sessionScope.user.name}

    一旦指定了对象所在的范围,那么只会在范围内查找绑定对象,不会在找不到的时候再去其他区域中查找了。

    sessionScope的位置还可以填写pageScope、requestScope、applicationScope。

  使用EL表达式进行计算

    使用EL表达式可以单独进行运算得出结果并直接输出,如下代码所示,EL进行算术运算,逻辑运算,关系运算,及empty运算。空运算主要用于判断字符串,

    集合是否为空,是空或为null及找不到值时都会输出true。

    ${sessionScope.sampleValue + 12} <br>        // 显示22

    ${(sessionScope.sampleValue + 12)/3} <br>        // 显示7.3

    ${(sessionScope.sampleValue + 12) /3==4} <br>        // 显示 false

    ${(sessionScope.sampleValue + 12) /3>=5} <br>        // 显示 true

  使用EL表达式获取请求参数值

    ${param.username} 与 request.getParameter(“username”);

    ${paramValues.city} 与request.getParameterValues("city");

 JSTL的使用

   如何使用

      将标签库对应的jar包拷贝到WEB-INF/lib目录下,以便于系统可以加载所需要的类。使用taglib指令在页面上引入标签的命名空间和前缀,帮助系统定位对应的类。

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

   if标签的使用

      

        <%

            User user = new User();

              user.setName("胡萝卜");

                user.setGender("f");

               request.setAttribute("user",user);

          %>

            姓名:${user.name}<br/>

           性别:<c:if test="${user.gender =='m'}" var="rs" scope="request">男</c:if>

            <c:if test="${!rs}">女</c:if>

     choose标签的使用

      使用choose标签简化多个if标签的判断。代码如下所示:

        <%

           User user = new User();

            user.setName("胡萝卜");

            user.setGender("x");

            request.setAttribute("user",user);  

        %>

            性别:

      <c:choose>

           <c:when test="${user.gender == 'm'}">男</c:when>

            <c:when test="${user.gender =='f'}">女</c:when>

            <c:otherwise>未知</c:otherwise>

       </c:choose>

  foreach标签的使用

    使用forEach标签完成对集合的遍历输出。

    其中items属性为要遍历的集合,var属性为每次取出来的一个对象,varStatus指定当前迭代的状态。代码如下:

      <table>

                 <tr>

                      <td>序号</td>

                      <td>姓名</td>

                      <td>年龄</td>

                 </tr>

              <c:forEach items="${users}" var="u" varStatus="s">

                  <tr>

                        <td>${s.count}</td>

                        <td>${u.name}</td>

                       <td>${u.age}</td>

                     </tr>

               </c:forEach>

      </table>

原文地址:https://www.cnblogs.com/xiaoshazi/p/13149578.html