第二十章 JSP,JSTL和EL

1.练习

①创建商品表:商品编号,名字,价格,日期,产地;

②使用servlet+dao查询数据显示到页面。

 数据访问层dao:

public class GoodsDaoImpl implements IGoodsDao {
    @Override
    public List<Goods> selectAllGoods() {
        String sql = "select goodsId,goodsName,price,proDate,proAdd from goods";
        BaseDao.setPst(sql,null);
        List<Map<String,Object>> rows = BaseDao.executeQuery();
        List<Goods> allGoods = new ArrayList<>();
        if(rows.size()>0){
            for (Map map :rows) {
                Goods goods = new Goods(
                        (Integer) map.get("goodsId"),
                        (String) map.get("goodsName"),
                        new BigDecimal(map.get("price").toString()).doubleValue(),
                        (Date)map.get("proDate"),
                        (String)map.get("proAdd")
                );
                allGoods.add(goods);
            }
            return allGoods;
        }
        return null;
    }
}

servlet:

@WebServlet(urlPatterns = "/GoodsServlet")
public class GoodsServlet extends HttpServlet {
    IGoodsService goodsService = new GoodsServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("goodsList",goodsService.Goodses());
        req.getRequestDispatcher("/main.jsp").forward(req,resp);
    }

JSP:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="">
    <thead>
    <tr>
        <td>编号</td>
        <td>品名</td>
        <td>价格 </td>
        <td>生产日期</td>
        <td>生产地址</td>
    </tr>
    </thead>
    <tbody>
    <c:forEach items="${goodsList}" var="goods">
        <tr>
            <td>${goods.goodsId}</td>
            <td>${goods.goodsName}</td>
            <td>${goods.price}</td>
            <td>${goods.proDate}</td>
            <td>${goods.proAdd}</td>
        </tr>
    </c:forEach>
    </tbody>
</table>

</body>
</html>

2.JSP(简单了解使用)

        在HTML中嵌入Java脚本语言,jsp相当于是一个特殊的servlet,但是普通的servlet虽然可以显示页面数据,完成css,js 的功能,但是编写代码过于麻烦。

2.1 JSP的执行过程

        当客户端请求JSP页面时,JSP文件先转换成Servlet文件,再编译成class文件,最后执行返回给客户端(响应)。

        当webapp放置在Tomcat容器下的时候,jsp生成的Java文件与编译好的class文件会被放置在Tomcat的work目录下,方便查看;idea的web项目不是直接将webapp放在Tomcat容器中,而是将生成的webapp与tomcat按照idea的"技术"形成连接,这样可以减少配置tomcat的时间。

2.2 JSP的组成

2.2.1 指令

        作用:用于配置jsp页面,导入资源文件;

        格式:<%@ 指令名称 属性名=属性值%>

①page 配置jsp页面

<!--导入jar包-->
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<!--设置页面的字符集编码 和mime 类型-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

 ②taglib 导入jsp标签库

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

③include 页面包含,导入资源文件 

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

 2.2.2 注释

①html注释:

<!----> 只能注释html代码,java代码依旧会执行

②jsp注释:

 <%-- --%> 所有都可以注释,无论java代码还是html内容

2.3 jsp九大内置对象

 

内置对象Servlet类型作用
pageContextPageContext页面上下文,页面的环境
page当前页面作用域对象,当前jsp页面
requestHttpServletRequest作用域对象,一次请求(a.jsp-->servlet-- >forward-->b.jsp)
sessionHttpSession作用域对象,一次会话
applicationServletContext作用域对象:整个程序运行期间,数据可以共享;一般用来存储全局的系统配置
responseHttpServletResponse响应数据
configServletConfig获取配置信息
outJspWriter;PrintWirter在页面上输出内容
exception异常信息

2.4 四大域对象

        可以存储数据,每个域对象存储数据的范围不一样。

①pageContext(数据的作用域在当前页面)

②request(数据的作用域,在一次请求转发范围内有效。可以跨页面传递数据)

③session(数据的作用域在一次会话内,可以被多次请求共享)

④application(对应于整个网站应用程序,存储数据作用域是整个网站范围,可以被多个会话共享)

 3. JSTL和EL

3.1 EL表达式 ${}

        Expression Language:表达式语言,用于替换 <%=变量名%>

①EL表达式可以直接从四大域对象中取数据,不能获取不在域对象中的数据;

②jsp默认支持EL表达式,可以使用转义“\”忽略;

③从四大域对象相中获取对象类型的属性值实际上是调用相应的get方法,如${student.stuName} 实际上是调用student对象中的 getStuName()方法。

 3.2 支持的运算符

        算术运算

        关系运算

        逻辑运算

3.3 值的获取

值的获取只能从域对象中获取(四大域 pageContext ,request,session,application);

当不确定域对象的时候,如${键名},会按照域对象的范围从小到大去找。

 四大域的范围是:pageContext < request < session < application

 3.4 标准标签库 -JSTL

        JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能,JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, SQL标签, 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别:

①核心标签

②格式化标签

③SQL 标签

④XML 标签

⑤JSTL 函数

3.4.1 使用步骤

①引入jar包

jstl-1.2.jar , standard.jar,c-1_0-rt.tld

②jsp页面上引入指令

servlet 3.0 tomcat9之前:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
servlet 4.0 tomcat9:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>

3.4.2 if判断

没有else,如果想要else就再写一个< c:if>

(c 就是 引入中的 prefix  可以改)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <!--使用jstl测试分支-->
    <%
    int score = 12;
    if(score>10){
        out.print("优秀");
    }else{
        out.print("不优秀");
    }
    %>
    <hr/>
    <%
    request.setAttribute("score",12);
    %>
    <c:if test="${score>10}">
        优秀
    </c:if>
    <c:if test="${score<=10}">
        不优秀
    </c:if>
</body>
</html>

 2.4.2 循环

 <c:forEach var="i" begin="1" end="10" step="3" varStatus="s">
        数字:${i}  数字次序:${s.count} <br/>
    </c:forEach>

2.4.3 遍历集合

        <c:forEach items="${stus}" var="stu">
            <tr>
                <td>${stu.id}</td>
                <td>${stu.name}</td>
                <td>${stu.sex}</td>
            </tr>
        </c:forEach>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值