• 第二十章 JSP,JSTL和EL


    1.练习

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

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

     数据访问层dao:

    1. public class GoodsDaoImpl implements IGoodsDao {
    2. @Override
    3. public List selectAllGoods() {
    4. String sql = "select goodsId,goodsName,price,proDate,proAdd from goods";
    5. BaseDao.setPst(sql,null);
    6. List> rows = BaseDao.executeQuery();
    7. List allGoods = new ArrayList<>();
    8. if(rows.size()>0){
    9. for (Map map :rows) {
    10. Goods goods = new Goods(
    11. (Integer) map.get("goodsId"),
    12. (String) map.get("goodsName"),
    13. new BigDecimal(map.get("price").toString()).doubleValue(),
    14. (Date)map.get("proDate"),
    15. (String)map.get("proAdd")
    16. );
    17. allGoods.add(goods);
    18. }
    19. return allGoods;
    20. }
    21. return null;
    22. }
    23. }

    servlet:

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

    JSP:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
    3. Title
    4. "">
    5. "${goodsList}" var="goods">
    6. 编号品名价格 生产日期生产地址
      ${goods.goodsId}${goods.goodsName}${goods.price}${goods.proDate}${goods.proAdd}

    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页面


    <%@ page import="java.util.List" %>
    <%@ page import="java.util.Map" %>

    <%@ 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  可以改)

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
    3. <html>
    4. <head>
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <%
    9. int score = 12;
    10. if(score>10){
    11. out.print("优秀");
    12. }else{
    13. out.print("不优秀");
    14. }
    15. %>
    16. <hr/>
    17. <%
    18. request.setAttribute("score",12);
    19. %>
    20. <c:if test="${score>10}">
    21. 优秀
    22. c:if>
    23. <c:if test="${score<=10}">
    24. 不优秀
    25. c:if>
    26. body>
    27. html>

     2.4.2 循环

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

    2.4.3 遍历集合

    1. <c:forEach items="${stus}" var="stu">
    2. <tr>
    3. <td>${stu.id}td>
    4. <td>${stu.name}td>
    5. <td>${stu.sex}td>
    6. tr>
    7. c:forEach>

     

  • 相关阅读:
    MySQL系列:binlog日志详解(参数、操作、GTID、优化、故障演练)
    Linux入门教程:P13->磁盘管理类
    cv2.imwrite无法写入图片
    某985证书站挖掘记录
    【Java设计模式 规范与重构】 六 代码重构小结
    【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day09
    关于竞赛,CSDN还有很长的路要走
    LeetCode每日一题——1619. 删除某些元素后的数组均值
    初阶数据结构学习记录——여덟 二叉树
    英语口语常用1368词汇
  • 原文地址:https://blog.csdn.net/m0_71674778/article/details/126085465