• 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>

  • 相关阅读:
    c语言数组的赋值问题
    英语------------单词被动形式的读音规律
    英语------------单词复数形式的规律
    一天半时间大致的学习了HTML和CSS.
    没有权威,只有努力
    java 对象赋值问题
    Java-Math
    StringBuffer
    java--String方法
    某个日期的下一天
  • 原文地址:https://www.cnblogs.com/xiaoshazi/p/13149578.html
Copyright © 2020-2023  润新知