zoukankan      html  css  js  c++  java
  • EL表达式与JSTL标砖标签库

    EL表达式(expression language): 语法 ${...}
            jsp中page指令有一个属性叫isELIgnored, 用来标记此页面是否忽略EL表达式, 默认为false
           举个栗子:
                 常规写法: <%=session.getAttribute("test")%>
                 EL表达式写法: ${sessionScope.test}或者${sessionScope["test"]}
                 []和. 大多数情况下可以通用, 除了两种情况中
                         1, 表达式中含有特殊字符
                                    错误: ${sessionScope.test_name} vs 正确: ${sessionScope["test_name"]}
                         2, 需要动态获取属性
                                    sessionScope["test"]
                  [] 中可以放一个变量名, 但是点的后面不行
                 在EL表达式中[]也可以用来表示数组或者集合中的索引值
         EL变量
                 当前面不指定哪个作用域下面的值的时候, 会默认按照下面的顺序去找, 如果都找不到, 就输出一个空字符串
                             pageScope --> requestScope --> sessionScope --> applicationScope
        EL自动类型转换
                 String num = request.getParameter("num");
                 int a = 20;
                 int b = Integer.parseInt(num != null ? num : "0");
                 out.print(a + b);

                       ${param.num + a}
             EL隐式对象
                      上面说到的各种Scope和param都是EL表达式中的隐式对象
                                param--->request请求中携带的参数的Map类
                                paramValues--->所有请求参数作为String类型的数组的Map类
                                cookie将名称存储请求附带的cookies的Map类
                      获取cookie:
                                ${cookie.username.name}
                                ${cookie.username.value}
                                initParam按名称存储web应用程序上下文初始化参数的Map类
            EL运算符
                      算术运算符: + - * /或者div %或者mod
                      关系运算符: ==或者eq !=或者ne <或者lt >或者gt <=或者le >=或者ge
                      逻辑运算符: &&或者and ||或者or !或者not
                      验证运算符: empty(empty 对于 null和"" 的判断都是返回true)
    JSTL(JSP Standard Tag Library)标准标签库:
             1, 核心标签(最常用, 最重要的)
             表达式控制标签
              out
                     输出常量
                            value---直接赋值
                     输出变量
                            default---默认值
                            escapeXml---控制转义字符(默认为true, 如果需要转义, 设置为false)
               set
                      三个属性: var value scope---将一个值存到*scope中(默认是pageContext)
                      赋值的时候可以将值放在value后面, 也可以放在两个标签中间
                      <c:set var="t" value="山东淄博" />
                      <c:set var="t1">安徽黄山</c:set>
                                 target 对应javaBean的name值(target要使用EL表达式的形式)
                                 property 对应定义的类里面的属性
               remove----只能用于页面内的变量移除
                        移除某个变量
                                 var: 指定需要remove的那个变量名
                                  scope: 两个scope中的变量名有重复的时候, 可以通过这个属性来确定移除的是哪个, 如果不指定, 则全部remove掉
               catch
                         相当于try...catch...
                                     可以在这个标签中放其他标签, 只有一个属性var
               流程控制标签
                if
                            <c:if test="EL表达式" var="变量名(指的是test属性的返回值:true或者false)" scope="作用域范围" ></c:if>
                                      choose---以下三个标签通常一起使用, 类似于switch
                when
                               otherwise--可以不写
                循环控制标签
                 forEach
                                var: 设定一个变量值来存储从数组或者集合中遍历出来的值
                                items: 指定需要遍历的数组或者集合
                                begin, end: 指定需要遍历的起始位置
                                step: 每次遍历跳过的个数, 默认值是1
                                varStatus: 通过index(在原集合中的索引值), count(当前第几个), first(是否是第一个), last(是否是最后一个)来描述begin和end子集中的状态
                                 注意first和last, 是判断的是否在输出结果中的第一个或者最后一个, 并不是原来的集合中
                  forTokens(回忆一下字符串的split()方法)
                                  输出的结果中同样也有index, count, first, last这四个属性
                  url操作标签
                   import
                                             将另一个页面的内容引入到这个页面上来, 与include指令的区别: 这个标签可以引入其他项目中甚至网络上的资源
                                  <c:import
                                            url="被导入的路径(可以写网络资源, 可以写本地文件)"
                                            context="相同服务器下的其他项目, 必须以'/'开头"
                                            var="以String类型存入被包含文件的内容"
                                            scope="四个作用域"
                                            charEncoding="被导入文件的编码格式"
                                            varReader="以Reader类型存储被导入的文件"></c:import>
                     url
                               一般用来动态生成超链接
                                           <c:url value="https://www.baidu.com" var="newurl"></c:url>
                                           <a href="${newurl}">新的url</a>
                     redirect
                                  页面重定向
                                            <c:redirect url="重定向的页面"><!-- 给重定向页面携带新的参数 -->
                                            <c:param name="username">admin</c:param>
                                            <c:param name="password">123456</c:param>
                                            </c:redirect>

    EL表达式

    </head>
    <body>
    <%
       session.setAttribute("test","淄博");
       request.setAttribute("text", "潍坊");
       
       User u = new User();
       u.setName("小明");
       u.setAge(20);
       session.setAttribute("user", u);
       
       ArrayList<String> arr = new ArrayList<String>();
       arr.add("山东");
       arr.add("北京");
       arr.add("上海");
       arr.add("湖南");
       arr.add("四川");
       arr.add("湖北");
       session.setAttribute("dis", arr);
    
    %>
    
    ${sessionScope.test }
    <h3>EL表达式通过.取属性</h3>
    ${user.name }
    ${user.age }
    
    <h3>EL表达式通过[]取属性</h3>
    ${user["name"] }
    ${user["age"] }
    
    <h3>EL表达式类型转换</h3>
    
    <form action="index.jsp" method="post">
       <input type="text" name="num"  />
       <input type="submit" value="提交" />
    </form>
    <%
      String num = request.getParameter("num");
      System.out.println(num);
    %>
    ${param.num+23}<br>
    ${dis[2]}<br>
    ${paramValues.num[0]}<br>
    ${cookie.username.name }--->${cookie.usernmae.value }<br>
    ${initParam.zhangsan}
    
    <h3>EL运算符</h3>
    ${3+5}<br>
    ${3/5}<br>
    ${3 == 5}<br>
    ${3 < 5}<br>
    ${empty test }<!-- 判断是否为空 -->
    =================
    <br>empty对null和空字符串的判断
    <br>
    empty对空字符串的判断:${empty ""}
    <br>
    empty对空的判断:${empty null}
    <br>
    =================
    
    </body>
    </html>

    JSTL

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ page import="java.util.ArrayList" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    
    <jsp:useBean id="user" class="com.hanqi.servlet.User"></jsp:useBean>
    <!-- 相当于 User user = new User();  -->
    
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <style type="text/css">
    .container {
        border: 1px red solid;
         80%;
        margin: 10px auto;
    }
    </style>
    </head>
    <body>
    
        <%!
            public void myexception() {
                throw new RuntimeException("这是我瞎写的一个异常 !");
            }
        %>
    
        <%    
            ArrayList<String> arr = new ArrayList<String>();
           arr.add("山东");
           arr.add("北京");
           arr.add("上海");
           arr.add("湖南");
           arr.add("四川");
           arr.add("湖北");
            session.setAttribute("dis", arr);
            session.setAttribute("teststring", "0533-53647665-758");
            
            session.setAttribute("test", "你好, 我是session一行字");
            request.setAttribute("test", "你好, 我是request一行字");
            session.setAttribute("score", 87);
        %>
        <div class="container">
            <h1>c:forTokens标签</h1>
            <hr>
            <c:forTokens items="${teststring }" delims="-" var="r">
                <c:out value="${r }"></c:out><br>
            </c:forTokens>
        </div>
        <div class="container">
            <h1>c:forEach标签</h1>
            <hr>
            <h3>全部遍历</h3>
            <c:forEach var="d" items="${dis }" step="1">
                <c:out value="${d }"></c:out><br>
            </c:forEach>
            <h3>部分遍历</h3>
            <c:forEach var="d" items="${dis }" step="2">
                <c:out value="${d }"></c:out><br>
            </c:forEach>
            <h3>部分遍历2</h3>
            <c:forEach var="d" items="${dis }" begin="2" end="4" varStatus="dissta">
                <c:out value="${d }"></c:out><br>
                varStatus--index属性: <c:out value="${dissta.index }"></c:out><br>
                varStatus--count属性: <c:out value="${dissta.count }"></c:out><br>
                varStatus--first属性: <c:out value="${dissta.first }"></c:out><br>
                varStatus--last属性: <c:out value="${dissta.last }"></c:out><br>
                <c:out value="=================="></c:out><br>
            </c:forEach>
        </div>
        <div class="container">
            <h1>c:if标签</h1>
            <hr>
    <%--         <c:if test="${score > 60 }">
                <c:out value="及格了"></c:out>
            </c:if> --%>
            <hr>
            <form action="jstl.jsp" method="post">
                <input type="text" name="num" value="${param.num }" />
                <input type="submit" value="提交" />
            </form>
            <c:choose>
                <c:when test="${param.num > 60 && param.num < 70 }">
                    <c:out value="及格了"></c:out>
                </c:when>
                <c:when test="${param.num > 70 && param.num < 90 }">
                    <c:out value="优秀"></c:out>
                </c:when>
                <c:when test="${param.num < 60 }">
                    <c:out value="不及格"></c:out>
                </c:when>
                <c:otherwise>
                    <c:out value="很棒"></c:out>
                </c:otherwise>
            </c:choose>
        </div>
        <div class="container">
            <h1>c:catch标签</h1>
            捕获一个异常
            <hr>
            <c:catch var="error">
            <%myexception(); %>
            </c:catch>
            <c:out value="${error }"></c:out>
        </div>
        <div class="container">
            <h1>c:remove标签</h1>
            移除某个变量的值
            <hr>
            <c:set var="t1" value="qqqq"></c:set>
            session: <c:out value="${sessionScope.test }"></c:out><br>
            request: <c:out value="${requestScope.test }"></c:out><br>
            <c:remove var="test"/>
            session: <c:out value="${sessionScope.test }"></c:out><br>
            request: <c:out value="${requestScope.test }"></c:out><br>
            <c:out value="${empty test }"></c:out>
        </div>
        <div class="container">
            <h1>c:set标签</h1>
            <hr>
            如果scope不写, 默认设置在pageContext
            <c:set var="tt" value="test的值"></c:set>
            <c:set target="${user }" property="name" value="王二麻子"></c:set>
            <c:out value="${tt }"></c:out><br>
            <c:out value="${user }"></c:out>
        </div>
        <div class="container">
            <h1>c:out 输出标签</h1>
            <hr>
            <c:out value="这是一个页面"></c:out>
            <br>
            <c:out value="${test}"></c:out>
            <br>
            <c:out default="默认值" value="${test1}"></c:out>
            <br>
            <c:out value="你&nbsp;好"></c:out>
            <br>
        </div>
    
    </body>
    </html>

    login.jsp

    <body>
        <%
            String username = "";
            String password = "";
        
            Cookie[] cs = request.getCookies();
            if (cs != null) {
                for(Cookie c : cs) {
                    if("username".equals(c.getName())) {
                        username = c.getValue();
                    }
                    if("password".equals(c.getName())) {
                        password = c.getValue();
                    }
                }
            }
        %>
    <hr>
    <hr>
        <form action="LoginServlet" method="post">
            <table>
                <tr>
                    <td>username:</td>
                    <td><input type="text" name="username" value="<%=username %>" /></td>
                </tr>
                <tr>
                    <td>password:</td>
                    <td><input type="text" name="password" value="<%=password %>"/></td>
                </tr>
                <tr>
                    <td colspan="2">记住密码:<input type="checkbox" name="rememberme" value="do" /></td>
                </tr>
                <tr>
                    <td colspan="2"><input type="submit" value="登录" /></td>
                </tr>
            </table>
        </form>
    </body>

    LginServlet.java

    import java.io.IOException;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class LoginServlet
     */
    @WebServlet("/LoginServlet")
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public LoginServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            String rememberme = request.getParameter("rememberme");
            
            System.out.println(username);
            System.out.println(password);
            System.out.println(rememberme);
            
    
            if (username != null && username.trim().length() > 0 && password != null && password.trim().length() > 0) {
                if (rememberme != null && rememberme.trim().length() > 0) {
                    Cookie[] cs = request.getCookies();
    
                    for (Cookie c : cs) {
                        System.out.println(c.getName());
                    }
    
                    // if (cs == null) {
                    Cookie c_username = new Cookie("username", username);
                    Cookie c_password = new Cookie("password", password);
    
                    c_username.setMaxAge(3600);
                    c_password.setMaxAge(3600);
    
                    response.addCookie(c_username);
                    response.addCookie(c_password);
                    System.out.println("cookie已经添加");
                    // }
                }
                response.sendRedirect("index.jsp");
            } else {
                response.sendRedirect("fail.jsp");
            }
    
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
  • 相关阅读:
    mysql语句
    jsp中调用javabean
    java内存分配
    BaseClasses学习(-)CAMEvent
    YUV格式入门
    gcc intrinsic vector
    GCC builtin vector (gcc内建函数)学习
    GNU 内联汇编学习(1)
    express 中间件
    《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—引用传递
  • 原文地址:https://www.cnblogs.com/jgjk/p/7445467.html
Copyright © 2011-2022 走看看