zoukankan      html  css  js  c++  java
  • JSP和JSTL

    JSP&EL&JSTL

    今日任务

    • 商品信息的显示

    教学导航

    教学目标

    掌握JSP的基本的使用

    掌握EL的表达式的用法

    掌握JSTL的常用标签的使用

    教学方法

    案例驱动法

    1.1 案例一:商品信息的显示的案例:

    1.1.1 需求:

    将数据库中的商品的信息,显示到页面中.尽量少使用<%%>形式.

    1.1.2 分析:

    1.1.2.1 技术分析

    JSP技术】

    • JSP的概述:

    JSPJava Server Pages.

    为什么要有JSP:Servlet显示页面元素的时候有自身缺陷.

    使用JSP:

        * JSP的脚本:

        * JSP的注释:

        * JSP的内置对象:

        * JSP的指令:

        * JSP的标签:

    • JSP的脚本:

    一种:<%! %> :翻译成Servlet内部的内容

    二种:<%  %> :翻译成Servletservice方法内部东西.

    三种:<%= %> :翻译成out.print();

    • JSP的执行原理:

    JSP也会被翻译成Servlet.被编译成class.

    • JSP的注释:

    JSP支持三种注释:HTML的注释  Java代码注释  JSP的注释:

    <h3>HTML的注释</h3>

    <!-- HTML的注释:可以存在JSP源码中,翻译成的Servlet中的注释也存在,HTML的代码中也会存在. -->

    <h3>Java代码的注释</h3>

    <%

    // 单行注释  可以存在于JSP源码中 在翻译成Servlet的时候,Java代码的注释也是会存在的.但是生成HTML的页面之后,注释就会消失了.

     

    /*

     多行注释

    */

     

    /**

    * 文档注释

    */

    %>

    <h3>JSP的注释</h3>

    <%-- JSP的注释:只会存在于JSP的源代码中,当代表翻译成ServletJSP的注释就消失了. --%>

    • JSP的指令:

    JSP的指令:JSP中的三大指令。

    语法:<%@ 指令的名称 属性名=属性值” 属性名=”属性值”%>

    * page指令:

         * language :JSP的语言的属性.现在只能是java.

         * contentType :设置浏览器默认的打开的时候的编码.

         * pageEncoding :设置JSP文件保存到硬盘,以及翻译成Servlet保存到硬盘的编码格式.

         * import :设置JSP中引入其他的类.import属性可以出现多次的.

         * extends :设置JSP被翻译成Servlet后继承的类:默认值:org.apache.jasper.runtime.HttpJspBase. 修改这个值得话一定要使这个类是一个Servlet才可以.

         * autoFlush :设置自动刷出缓存

         * buffer :JSP的缓冲区的大小。默认8kb

         * session :默认值是true.设置JSP的页面中是否可以直接使用session对象.

         * isELIgnored :设置JSP是否忽略EL表达式.默认值false 不忽略.可以在JSP中写EL表达式.

         * isErrorPage :设置JSP页面中出现错误信息应该如何处理的.

         * errorPage :设置JSP页面中出现错误信息应该如何处理的.

    * 设置全局错误页面:

      <error-page>

       <error-code>404</error-code>

       <location>/404.jsp</location>

      </error-page>

      <error-page>

       <error-code>500</error-code>

       <location>/500.jsp</location>

      </error-page>

     

    * include指令:用于引入其他的页面

        * file属性:属性中不能使用变量,不能传递参数

          <%@ include file="logo.jsp" %>

          <%@ include file="menu.jsp" %>

     

          <h1>Body</h1>

     

          <%@ include file="footer.jsp" %>

     

    * taglib指令:用于在JSP中引入标签库

      <%@ taglib uri="" prefix="" %>

    • JSP的内置对象:(*****)

    内置对象:JSP中可以直接使用的对象.

    JSP的内置对象有哪些?常用的方法?真实对象是谁?

    JSP中有9个内置对象:

    * request HttpServletRequest getParameter(),setAttribute(),getAttribute();

    * response HttpServletResponse setStatus(),sendRedirect(),getOutputStream();

    * session HttpSession setAttribute(),getAttribute(),removeAttribute();

    * application ServletContext setAttribute(),getAttribute(),removeAttribute();

    * page Object toString(),wait(),

        * JSP翻译成Servlet的引用.

    * pageContext PageContext setAttribute(),getAttribute(),removeAttribute();

    * out JspWriter write(),print(),

    * config ServletConfig getInitParamter(),getInitParameterNames(),

    * exception Throwable getMessage(),getCause()

     

    * out对象:先将自身缓存区中的内容输出到response的缓冲区中,由response向页面作出响应.

         * out :JspWriter

         * response.getWriter() :PrintWriter

    * pageContext

         * 一类:用pageContext对象获得其他的8个内置对象. 用来编写一个通用性高的或者框架的时候.

         * 二类:用来存取数据.向四个域中存取数据.

    • JSP的四个域对象:

    * pageContext pageScope 页面范围

    * request requestScope 请求范围

    * session sessionScope 会话范围

    * application applicationScope 应用范围

    • JSP的动作标签:

    语法:<jsp:动作标签 属性=””/>

    为什么使用标签:简化代码的编写,尽量要少在JSP中使用<%%>

    <jsp:forward />

        * 转发:<jsp:forward page="/demo1/demo5.jsp"></jsp:forward>

    <jsp:include />

        * 包含:<jsp:include page="/demo1/include2/logo.jsp"></jsp:include>

        ***** 静态包含 和 动态包含的区别?

        * 静态包含相对于代码的copy,最终被翻译成一个Servlet解释执行的.动态包含,包含其他页面的运行的结果.最终翻译成多个Servlet解释执行的.

    <jsp:param />

        * 传递参数.

    <jsp:useBean />

    <jsp:setProperty />

    <jsp:getProperty />

    EL表达式】

    • EL:

    EL:Expression Language.表达式语言.

    语法:${ EL表达式 }

     

    JSP中尽量少使用<%%>代码块.使用ELJSTL替换页面中<%%>

    • 使用EL表达式:

    用途:

    1.获取数据.

    2.EL执行运算

    3.获得常用WEB开发的对象.

    4.调用Java中的函数.

    • EL用来获取数据:(获取是四个域范围中的值)

    * 获得普通的值:

    * 获得数组的数据:

    * 获得List集合的数据:

    * 获得Map集合的数据:

     

    []. 有什么区别?

    []获得带有下标的(数组,List.获得一个对象的属性,如果属性名中包含了特殊字符.必须使用[]不能使用.

    <h1>EL获取数据</h1>

    <%

    pageContext.setAttribute("pname", "王守义");

    request.setAttribute("rname", "王凤儿");

    session.setAttribute("sname", "王如花");

    application.setAttribute("aname", "王芙蓉");

    %>

    <h3>传统方式</h3>

    <%= pageContext.getAttribute("pname")%>

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

    <%= session.getAttribute("sname")%>

    <%= application.getAttribute("aname")%>

    <h3>EL的方式</h3>

    ${ pageScope.pname }   

    ${ requestScope.rname }

    ${ sessionScope.sname }

    ${ applicationScope.aname }

    <hr/>

    <%

    //pageContext.setAttribute("name", "王守义");

    //request.setAttribute("name", "王凤儿");

    session.setAttribute("name", "王如花");

    application.setAttribute("name", "王芙蓉");

    %>

    ${ name }

    <h3>EL获得数组的数据</h3>

    <%

    String[] arrs = {"王守义","王如花","王凤儿"};

    pageContext.setAttribute("arrs", arrs);

    %>

    ${ arrs[1] }

    <h3>EL获得List集合的数据</h3>

    <%

    List<String> list = new ArrayList<String>();

    list.add("aaa");

    list.add("bbb");

    list.add("ccc");

    pageContext.setAttribute("list", list);

    %>

    ${ list[1] }

    <h3>获得Map集合的数据</h3>

    <%

    Map<String,String> map = new HashMap<String,String>();

    map.put("aaa", "111");

    map.put("bbb", "222");

    map.put("ccc.ddd", "333");

    pageContext.setAttribute("map", map);

    %>

    ${ map["ccc.ddd"] }

    <h3>EL获得JavaBean中的数据</h3>

    <%

    Person person = new Person();

    person.setId(1);

    person.setName("王美丽");

    pageContext.setAttribute("person", person);

    %>

    ${ person.name }

    • EL执行运算:

    执行算数运算:

    + - * / %

    执行逻辑运算:

    > < >= <= != ==

    执行关系运算:

    && || !

     

    <h1>EL执行运算</h1>

    <h3>EL执行算数运算</h3>

    <%

    pageContext.setAttribute("n1", "10");

    pageContext.setAttribute("n2", "20");

    pageContext.setAttribute("n3", "40");

    pageContext.setAttribute("n4", "60");

    %>

     

    ${ n1+n2+n3 }

    <h3>EL执行逻辑运算</h3>

    ${ n1 < n2 }

    ${ n1 > n2 }

     

    <h3>EL执行关系运算</h3>

    ${ n1<n2 && n3<n4 }

    ${ n1<n2 || n3<n4 }

    <%

    Person person = new Person();

    pageContext.setAttribute("person", person);

    %>

    ${ empty person }

    ${ not empty person }

    • EL获得WEB开发的常用的对象:(EL的内置对象)

    EL常用的对象:11.

    ${pageScope}

    ${requestScope}

    ${sessionScope}

    ${applicationScope}

    ${ param } :相当于request.getParameter();

    ${ paramValues } :相当于request.getParameterValues();

    ${ header } :获得请求头 一个key对应一个value

    ${ headerValues } :获得请求头 一个key对应多个value

    ${ initParam } :获得初始化参数

    ${ cookie } :获得Cookie的信息

    ${pageContext} :相当于pageContext对象.

    JSTL标签库】

    • JSTL的标签库概述:

    JSTLJSP Standard Tag LibraryJSP标准标签库)(网址为:http://baike.baidu.com/item/%E6%A0%87%E7%AD%BE%E5%BA%93)是一个不断完善的开放源代码的JSP标签库,是由apachejakarta小组来维护的。JSTL只能运行在支持JSP1.2Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。

     

    作用:结合EL替换页面中的<% %>

    • 使用JSTL的标签库:

    JSTL的五大标签库:corefmtxmlsqlfn

    JSTL的版本:JSTL1.0  JSTL1.1  JSTL1.2

    * JSTL1.0EL还没有被纳入规范的时候使用标签.

    * JSTL1.11.2的版本中 EL已经被纳入到规范中.JSTL可以支持EL表达式了.

    步骤一:引入标签库.

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

     

    常用的标签:

    c:set

    c:if

    c:forEach

    c:choose

        * c:when

        * c:otherwise

    • JSTL的函数库(EL的函数库)

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

     

    ${ fn:length("HelloWorld") }

     

    ${ fn:toLowerCase("ABCDEFG") }

    ${ fn:toUpperCase("abcdefg") }

     

    ${ fn:contains("www.baidu.com","baidu") }

    1.1.2.2 步骤分析:

    步骤一:准备工作:

    创建一个商品表:

    创建一个动态的web工程

    引入相关的jar包和工具类:

    * mysql,c3p0,dbutils,jstl

    创建包结构:

    * com.itheima

        * servlet

        * service

        * dao

        * domain

        * utils

    步骤二:访问一个Servlet--->Service--->DAO

    Servlet调用业务层,业务层调用DAO进行查询.

    步骤三:查询到以后显示到JSP的页面中.

    使用JSTLEL表达式将数据显示到页面.

    1.1.3 代码实现:

    创建数据库和表:

    create database day12;

    use day12;

    create table product(

    id int primary key auto_increment,

    pname varchar(20),

    price double,

    pdesc varchar(20)

    );

     

    insert into product values (null,'电视机',3200,'液晶曲面大电视');

    insert into product values (null,'韭菜盒子',3,'味重请小心食用');

    insert into product values (null,'益达',10,'韭菜伴侣');

    insert into product values (null,'十三香',12,'守义牌');

     

    实体bean

    private int id;

    private String pname;

    private double price;

    private String pdesc;

  • 相关阅读:
    07 selenium模块基本使用
    06 高性能异步爬虫
    05 request高级操作
    04 验证码识别
    03 数据解析
    02 requests模块
    01 爬虫简介
    Get和Post的正解
    pytoch之 encoder,decoder
    pytorch之 RNN 参数解释
  • 原文地址:https://www.cnblogs.com/Jixiangwei/p/6840648.html
Copyright © 2011-2022 走看看