A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© GY_qiyue 初级黑马   /  2018-8-14 15:46  /  504 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. JSP

1.1. JSP的概述

    1. jsp:Java Server Pages --- Java服务器端的页面
    2. SUN公司推出的Servlet自身有缺陷,没有办法与ASP,PHP进行竞争.推出了动态网页开发技术JSP.
    3. JSP = HTML + Java代码 + JSP自身的东西
    4. JSP的执行过程:
              JSP翻译成Servlet,编译这个Servlet的类,生成class文件.得到执行

1.2  JSP的脚本 --了解

    <%!   %>                :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议.
    <%    %>                :翻译成Servlet中service方法内部的内容. 定义类,变量
    <%=   %>                :翻译成Servlet中service方法中out.print();

1.3 jsp的注释  -- 了解

    HTML的注释                :<!-- 注释 -->
    Java代码的注释        :// 单行注释 /*多行注释*/ /** 文档注释 */
    JSP的注释                :<%-- JSP的注释 --%>

1.4 JSP的指令

    指令的语法:
    <%@ 指令名称 属性名称="属性值" 属性名称="属性值" ...%>
    JSP中有三个指令:page指令, include指令, taglib指令.

    1. JSP中page指令:<%@ page %> -- 设置JSP的.  
            * language                :JSP脚本中使用的语言.现在只能写java.
            * contentType        :设置浏览器打开这个JSP的时候采用的默认的字符集的编码.
            * pageEncoding        :设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码.
            * import            :在JSP中引入类对象.但是import可以出现多次.
        <%@page import="java.util.ArrayList"%>
        <%@page import="java.util.List"%>
            * extends                :设置JSP翻译成Servlet后继承的类,默认值:org.apache.jasper.runtime.HttpJspBase,        这个值要想修改,这个类必须是HttpServlet的子类
            * autoFlush                :设置JSP的缓存自动刷出.true:自动刷出.
            * buffer                :设置JSP的缓冲区的大小,默认8kb.
            * session                :设置在JSP中是否可以直接使用session对象.默认值是true.
            * isELIgnored        :设置在JSP中是否忽略EL表达式.默认值是false不忽略.
            * errorPage                :设置错误友好页面的提示.
            * isErrorPage        :通过这个设置显示JSP的错误信息.
        * 设置全局的错误友好页面:
            * 在web.xml中设置:
                      <error-page>
                              <error-code>404</error-code>
                              <location>/error/404.jsp</location>
                      </error-page>
                      <error-page>
                              <error-code>500</error-code>
                              <location>/error/500.jsp</location>
                      </error-page>

    2. JSP中的include指令:指示JSP包含其他的页面. -- 静态包含
            <%@ include file="logo.jsp" %>
            <%@ include file="menu.jsp" %>
            <h1>BODY部分</h1>
            <%@ include file="footer.jsp" %>

    3. JSP中的taglib指令:指示JSP引入标签库.
            <%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>       

1.5  JSP 的内置对象 -- ☆☆☆☆



    1. JSP的内置对象:在JSP中可以直接使用的对象
    2. JSP中有9大内置对象
    对象名                                真实对象                                常用方法       
    request                HttpServletRequest                getParameter(),setAttribute(String naem,Object value);
     ----------------------------------------------------------------------------------
    response     HttpServletResponse         setHeader(string,string),getOutputStream(),getWriter();
     ----------------------------------------------------------------------------------
    session     HttpSession                           setAttreibute(),getAttribute();
     ----------------------------------------------------------------------------------
    applicate        ServletContext                        setAttreibute(),getAttribute();                 所有用户的共享信息
     ----------------------------------------------------------------------------------
    page                Object                                        toString();wait();    指当前页面转换后的Servlet类的实例
     ----------------------------------------------------------------------------------
    pageContext         PageContext                        setAttribute();getAttribute();    JSP的页面容器,当前页面
     ----------------------------------------------------------------------------------
    config                 ServletConfig                        getServletName();getServletContext(); 服务器配置       
     ----------------------------------------------------------------------------------
    out                        JSPWriter                                write(),print();                                用于页面输出
     ----------------------------------------------------------------------------------
    exception         Throwable                        getMessage(),getCause();                         设置isErrorPage="true"
     ----------------------------------------------------------------------------------
    3.  page内置对象:  真实对象是Object,就是JSP翻译成Servlet后的类的引用.
            out内置对象:  out和response.getWriter是不是同一个对象?区别是什么?
                    不是,out真实对象JspWriter ,response获得Writer是的真实对象是PrintWriter.
            pageContext内置对象        :
                    获得其他的8个内置对象        :编写通用性代码或者框架的时候.
    4. JSP的四个域中存取数据
            PageScope :                        当前页面中有效                        pageContext                  PageContext
            RequestScope:                一次请求范围                          request                   HttpServletRequest
            SessionScope:                一次会话范围                          session                   HttpSession
            ApplicationScope:        应用(整个项目)范围                application                  ServletContext       

1.6 JSP的动作标签

    标签的作用:简化代码.
    <jsp:forward />                        :用于页面的转发.
    * <jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp"></jsp:forward>
    <jsp:include />                        :用于页面的包含.(动态包含)
    *****静态包含和动态包含的区别?(<%@ include%>和<jsp:include>)
        --- 建议使用 静态包含
    <jsp:param />                        :用于带有路径的标签下,传递参数.

    <jsp:useBean />                        :用于在JSP中使用JavaBean.
    <jsp:setProperty />                :用于在JSP中向JavaBean设置属性的.
    <jsp:getProperty />                :用于在JSP中获得JavaBean的属性.

2.  EL表达式

2.1 EL的解析

    1. EL -- Expression Language
    2. 可以用来JSP的代码,减少<% %>的使用
    3. 表达式:${ EL表达式 }
    4. EL的功能
            *获取数据--JSP的四个域
            *执行运算
            *操作web开发的常用的对象
            *调用Java的方法

2.2 EL 获取数据

    <h3>存取是普通的单值数据</h3>
    <%
            //pageContext.setAttribute("name", "pValue");
            //request.setAttribute("name", "rValue");
            //session.setAttribute("name", "sValue");
            application.setAttribute("name", "aValue");
    %>
    <hr/>
    ${ pageScope.name } <!-- 返回的是"" -->
    ${ requestScope.name }
    ${ sessionScope.name }
    ${ applicationScope.name }
    <hr/>
    ${ name } <!-- 类似findAttribute("name") 先从page域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中找 -->
    <h3>获取数组的数据</h3>
    <%
            String[] arrs = {"李旭华","李冠希","杨凤","杨如花"};
            pageContext.setAttribute("arrs", arrs);
    %>
    ${ arrs[0] }
    ${ arrs[1] }
    ${ arrs[2] }
    ${ arrs[3] }
    <h3>获取List集合的数据</h3>
    <%
            List<String> list = new ArrayList<String>();
            list.add("李芙蓉");
            list.add("杨芙蓉");
            list.add("王凤");
            pageContext.setAttribute("list", list);
    %>
    ${ list[0] }
    ${ list[1] }
    ${ list[2] }
    <h3>获取Map集合的数据</h3>
    <%
            Map<String,String> map = new HashMap<String,String>();
            map.put("aaa","李旭华");
            map.put("bbb","杨久君");
            map.put("ccc","李芮");
            map.put("ddd","李凤");
            pageContext.setAttribute("map", map);
    %>
    ${ map.aaa }
    ${ map.bbb }
    ${ map.ccc }
    ${ map.ddd }
    <h3>获取对象的数据</h3>
    <%
            User user = new User(1,"aaa","123");
            pageContext.setAttribute("user", user);
    %>
    ${ user.id }
    ${ user.username }
    ${ user.password }
    <h3>获取对象的集合的数据</h3>
    <%
            User user1 = new User(1,"aaa","123");
            User user2 = new User(2,"bbb","123");
            User user3 = new User(3,"ccc","123");
           
            List<User> userList = new ArrayList<User>();
            userList.add(user1);
            userList.add(user2);
            userList.add(user3);
           
            pageContext.setAttribute("userList", userList);
    %>

    ${ userList[0].id } - ${ userList[0].username } - ${ userList[0].password }<br/>
    ${ userList[1].id } - ${ userList[1].username } - ${ userList[1].password }<br/>
    ${ userList[2].id } - ${ userList[2].username } - ${ userList[2].password }<br/>
    ***** .和[]的区别.  
        * []用于有下标的数据(数组,list集合) .用于有属性的数据(map,对象)
        * 如果属性名中包含有特殊的字符.必须使用[],用""引起来

2.3 EL 执行运算

    <h1>EL的功能二:执行运算</h1>
    <h3>EL执行算数运算</h3>
    <%
            pageContext.setAttribute("n1", "10");
            pageContext.setAttribute("n2", "20");
            pageContext.setAttribute("n3", "30");
            pageContext.setAttribute("n4", "40");
    %>
    ${ n1 + n2 + n3 }
    <h3>EL执行关系运算</h3>
    ${ n1 < n2 } - ${ n1 lt n2 } <!-- less than --><br/>
    ${ n1 > n2 } - ${ n1 gt n2 } <!-- great than --><br/>
    ${ n1 <= n2 } - ${ n1 le n2 } <!-- less equal --><br/>
    ${ n1 >= n2 } - ${ n1 ge n2 } <!-- great equal --><br/>
    ${ n1 == n2 } - ${ n1 eq n2 } <!-- equal --><br/>

    <h3>EL执行逻辑运算</h3>
    ${ n1<n2 && n3 < n4 } - ${ n1<n2 and n3 < n4 }<br/>
    ${ n1<n2 || n3 < n4 } - ${ n1<n2 or n3 < n4 }<br/>
    ${ !(n1 < n2) } - ${ not(n1<n2) }

    <h3>EL执行三元运算</h3>
    ${ n1 < n2 ? "正确":"错误" }

    <h3>empty运算</h3>
    ${ user == null } - ${ empty user }
    ${ user != null } - ${ not empty user }

    empty 函数:
            1. 判断域中对象是否为null    ★★★
            2. 判断字符串是否为""
            3. 判断数组大小是否为0

2.4 EL 操作WEB开发的常用对象 -- 11个

    <h1>EL功能三:操作WEB开发常用的对象</h1>
    <!--
            pageScope,requestScope,sessionScope,applicationScope - 获取JSP中域中的数据
            param,paramValues         - 接收参数.
            header,headerValues - 获取请求头信息
            initParam                        - 获取全局初始化参数
            cookie                                - WEB开发中cookie
            pageContext                        - WEB开发中的pageContext.
     -->
    <h3>接收请求的参数</h3>
    <%= request.getParameter("id") %>
    <%= request.getParameter("name") %>
    <%= Arrays.toString(request.getParameterValues("hobby")) %>
    <hr/>
    ${ param.id }
    ${ param.name }
    ${ paramValues.hobby[0] }
    ${ paramValues.hobby[1] }
    <h3>获取请求头</h3>
    <%= request.getHeader("User-Agent") %>
    <hr/>
    ${ header["User-Agent"] }
    <h3>获取全局初始化参数</h3>
    ${ initParam.username }
    <h3>获取Cookie中的值</h3>
    ${cookie}  获取所有的cookie
    ${cookie.history}  获取名称为history的cookie对象
    ${ cookie.history.value }
    <h3>获取PageContext中的对象</h3> ☆☆☆☆
    IP地址:${ pageContext.request.remoteAddr }
    工程路径:${ pageContext.request.contextPath }

3. JSTL

3.1 JSTL的概述

    1. JSTL -- JSP Standard Tag Library JSP标准标签库
    2. JSTL 和 EL结合替换页面中的<%%>
    3. JSTL 版本: JSTL1.0 -- 不支持EL表达式   JSTL1.1和1.2 -- 支持EL表达式
    4. JSTL的标签库:包含了五类标签
             core(核心标签),fmt(国际化标签),xml(XML标签),sql(SQL标签),fn(JSTL提供EL函数库)
    5. 使用JSTL:
            引入JSTL的相关jar包
            在页面中引入标签库.<%@ taglib uri="" prefix="" %>

3.2 JSTL的核心标签的用法

在JSP页面引入标签库

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

    <c:if 判断
                    * test 属性:判断的条件.       
    <c:forEach 遍历
                    * var  当前被遍历的对象
                    * items 被遍历集合
                    ------------------
                    * begin 开始的值
                    * end 结束的值
                    * step 步长(每次递增的值)
                    * varStatus 记录遍历的对象
                            * count 遍历记录次数,从1开始.

    <h1>JSTL的常用的标签一</h1>
    <c:set var="i" value="张三" scope="page"></c:set>
    ${ i }
    <c:set var="city" value="上海" scope="page"></c:set>
    <c:out value="${ city }" default="北京"></c:out>
    <c:out value="<h1>标题一</h1>" escapeXml="false"></c:out>

    <c:set var="n1" value="10" scope="page"></c:set>
    <c:set var="n2" value="20" scope="page"></c:set>
    <c:if test="${ n1 < n2 }" var="flag" scope="page">
            n1 小于 n2
    </c:if>
    <c:if test="${ n1 >= n2 }">
            n1 大于等于 n2
    </c:if>

    <c:if test="${ flag }">
            n1 小于 n2
    </c:if>

    <h1>JSTL常用标签:forEach</h1>
    <h3>遍历数组</h3>
    <%
            String[] arrs = {"李旭华","李冠希","董阳阳"};
            pageContext.setAttribute("arrs", arrs);
           
    %>
    <c:forEach var="i" items="${ arrs }">
            ${ i }
    </c:forEach>

    <h3>遍历List集合</h3>
    <%
            List list = new ArrayList();
            list.add("李旭华");
            list.add("李冠希");
            list.add("董阳阳");
            pageContext.setAttribute("list", list);
    %>
    <c:forEach var="i" items="${ list }">
            ${ i }
    </c:forEach>
    <h3>遍历Map集合</h3>
    <%
            Map<String,String> map = new HashMap<String,String>();
            map.put("aaa","李旭华");
            map.put("bbb","李冠希");
            map.put("ccc","董阳阳");
            pageContext.setAttribute("map", map);
    %>
    <c:forEach var="entry" items="${ map }">
            ${ entry.key }-${ entry.value }
    </c:forEach>

    <h3>遍历从1到10</h3>
    <c:forEach var="i" begin="1" end="10" step="2">
            ${ i }
    </c:forEach>

    <h3>遍历从100到300</h3>
    <c:forEach var="i" begin="100" end="300" step="5" varStatus="status">
            <c:if test="${ status.count % 3 == 0 }">
                    <font color="red">${ i }</font>
            </c:if>
            <c:if test="${ status.count % 3 != 0 }">
                    ${ i }
            </c:if>
    </c:forEach>



3.3 JSTL提供的EL的函数库

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

    <h1>JSTL提供的EL的函数库</h1>
    ${ fn:contains("Hello World","Hello") }
    ${ fn:length("HelloWorld") }
    ${ fn:toLowerCase("ABCDE") }
    <c:forEach var="i" items='${ fn:split("a-b-c-d","-") }'>
            ${ i }
    </c:forEach>

3.4 案例 显示所有商品

    <c:forEach var="p" items="${list }">
            <tr>
                    <td>${ p.pid }</td>
                    <td>${ p.pname }</td>
                    <td>${ p.shop_price }</td>
                    <td>
                            <c:if test="${ p.is_hot == 1 }">
                                    是
                            </c:if>
                            <c:if test="${ p.is_hot != 1 }">
                                    否
                            </c:if>
                    </td>
                    <td>${ p.pdesc }</td>
            </tr>       
            </c:forEach>



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马