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;

原文地址:https://www.cnblogs.com/Jixiangwei/p/6840648.html