EL表达式JSTL标签库MVC模式

EL表达式JSTL标签库MVC模式

EL表达式介绍

EL表达式语言,直接出现JSP页面中

EL表达式可以减少<% %>书写

EL作用: 从域对象取出数据

语法${}

EL取出域对象数据

  • application.setAttribute(String key,Object value)
    • EL取出 ${applicationScope.key}
  • session.setAttribute(String key,Object value)
    • EL取出 ${sessionScope.key}
  • request.setAttribute(String key,Object value)
    • EL取出 ${requestScope.key}
  • pageContext.setAttribute(String key,Object value)
    • EL取出 ${pageScope.key}
  • 简化写法 ${key} : EL自动从最小域开始找,一旦找到就不找

EL取出域对象数据(String对象)

<body>
  <%--
     EL表达式取出域对象中的数据
     向域对象存储数据
     EL取出

     EL取出不出来,不显示null,显示""
  --%>
<%
    //ServletContext域对象存储数据
    application.setAttribute("heima","javaApplication");
    //session域对象存储数据
    session.setAttribute("heima","javaSession");
    //request域对象存储数据
    request.setAttribute("heima","javaRequest");
    //pageContext域对象存储数据
    pageContext.setAttribute("heima","javaPageContext");
%>
<%-- 取出 ServletContext--%>
<%=application.getAttribute("heima")%>
${applicationScope.heima}  <br>

  <%-- 取出 session--%>
${sessionScope.heima} <br>

  <%-- 取出 request--%>
${requestScope.heima}<br>

  <%-- 取出 pageContext--%>
${pageScope.heima} <br>

${heima}
</body>

EL取出域对象数据(自定义对象)

<body>
  <%--
     向域对象存储自定义对象
     EL表达式取出来
  --%>
<%
    Address addr = new Address();
    addr.setCity("北京");
    addr.setArea("昌平");

    User user = new User();
    user.setName("张三");
    user.setAge(20);
    user.setAddr(addr);
    //存储域对象,                    Object参数
    pageContext.setAttribute("user",user);
%>

<%-- 取出北京--%>
<%=( (User)pageContext.getAttribute("user")).getAddr().getCity()  %> <br>

<%--
   取出EL
   EL使用无需强制转换
   EL获取成员变量,不需要调用getXXX()方法
   自己会调用,直接写成员变量名即可
--%>
${user.addr.city}
</body>

EL取出域对象数据(自定义对象存储List)

<body>
<%--
   向域对象存储自定义对象
   EL表达式取出来
--%>
<%
    Address addr = new Address();
    addr.setCity("北京");
    addr.setArea("昌平");

    User user = new User();
    user.setName("张三");
    user.setAge(20);
    user.setAddr(addr);

    Address addr2 = new Address();
    addr2.setCity("天津");
    addr2.setArea("武清");

    User user2 = new User();
    user2.setName("李四");
    user2.setAge(22);
    user2.setAddr(addr2);

    List<User> list = new ArrayList<User>();
    list.add(user);
    list.add(user2);

    pageContext.setAttribute("list",list);
%>
<%= ((List<User>) pageContext.getAttribute("list")).get(1).getAddr().getCity()%> <br>

<%-- 集合索引[索引]  --%>
${list[1].addr.city}
</body>

EL取出域对象数据(自定义对象存储Map)

<body>
<%--
   向域对象存储自定义对象,自定义对象存储Map
   EL表达式取出来
--%>
<%
    Address addr = new Address();
    addr.setCity("北京");
    addr.setArea("昌平");

    User user = new User();
    user.setName("张三");
    user.setAge(20);
    user.setAddr(addr);

    Address addr2 = new Address();
    addr2.setCity("天津");
    addr2.setArea("武清");

    User user2 = new User();
    user2.setName("李四");
    user2.setAge(22);
    user2.setAddr(addr2);

    Map<String,User> map = new HashMap<String, User>();
    map.put("u1",user);
    map.put("u2",user2);
    pageContext.setAttribute("map",map);
%>
<%--
    map.u2 Map集合中的键
   < %= pageContext.getAttribute("map").get("u2") %>
   防君子不防小人
--%>
${map.u2.addr.city}

特殊写法
<%--${map['u.2'].addr.city}--%>
</body>

EL内置对象

内置对象,这个对象内置在EL中,直接使用

JSP中内置对象,直接写对象名即可

  • pageContext内置对象
<body>
  <%--
     内置对象
     pageContext 属于JSP的内置对象,最小域对象

     pageContext 属于EL内置对象
     可以获取到其他的JSP内置对象

     pageContext.request 获取到了JSP中的内置对象request

     <form action=" ${pageContext.request.contextPath} "></form>
     
     cookie内置对象,获取浏览器中的Cookie数据
     cookie.cookie的键名.value
  --%>
${pageContext.request.contextPath}


</body>

EL运算符

<body>
  <%--
     El运算符
  --%>
  <%
      pageContext.setAttribute("num",4);
  %>

${num>4?"大于4":"不大于4"}  <br>

<%--
   EL判空运算
   empty 判断空
   如果是空,就是true

   数组长度>0,就不是空
   长度.length==0

   集合size()>,就不是空
 --%>
<%
    String[] str = new String[1];
    request.setAttribute("str",str);
%>

${ empty str} <br>

<%
    List<String> list = new ArrayList<String>();
    list.add(null);
    request.setAttribute("list",list);
%>
${empty list}

</body>

记录上一次的用户名

在这里插入图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /**
     *  获取提交的用户名密码
     *  判断和tom,123匹配
     *  如果匹配
     *    重定向到首页
     *  不匹配
     *    转发回登录页面
     */
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    //获取复选框  value="rem"
    String rem = request.getParameter("rem");
    if("rem".equals(rem)){
        Cookie cookie = new Cookie("username",username);
        cookie.setMaxAge(60*10);
        cookie.setPath(request.getContextPath());
        response.addCookie(cookie);
    }

    if("tom".equals(username) && "123".equals(password)){
        response.sendRedirect(request.getContextPath());
    }else{
        request.getRequestDispatcher("/login.jsp").forward(request,response);
    }
}

login.jsp

${cookie.username.value}

引出JSTL

<body>
  <%--
    2个div
    1个文本颜色红色
    1个文本颜色蓝色

    定义变量
       数据>5 显示红色
       数据<=5 显示蓝色
  --%>
  <%
     int num =6;
     if(num>5){
  %>
<div style="color: red">文本是红色</div>
  <%
     }else{
  %>

<div style="color: blue">文本是蓝色</div>
<%
     }
%>
</body>

JSTL标签库介绍

JSTL,全名 JSP的标准标签库.

本质上是标签,HTML也是标签

JSTL标签出现目的,减少<%%>

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

if标签

<body>
  <%--
     c:if标签,判断使用
       属性: test="true"
       执行标签体内容

   --%>
  <%
      pageContext.setAttribute("num",4);
  %>
 <c:if test="${num>=5}">
     <div style="color: red">我是红色</div>
 </c:if>

<c:if test="${num<5}">
    <div style="color: blue">我是蓝色</div>
</c:if>
</body>

foreach标签

<body>
    <%--
      foreach标签
      页面输出5个hello

      属性:
        begin="1"开始值   int i=1;
        end="5"结束值     i<=5
        var="i"定义变量,保存是循环中的值
          自动的存储到pageContext域
        step="2" 步长  i+=2
     --%>
 <c:forEach begin="1" end="5" var="i" step="2">
     hello ${i}<br>
 </c:forEach>
</body>
<body>
    <%--
      foreach标签
      页面输出5个hello

      属性:
        begin="1"开始值   int i=1;
        end="5"结束值     i<=5
        var="i"定义变量,保存是循环中的值
          自动的存储到pageContext域
        step="2" 步长  i+=2
     --%>
 <c:forEach begin="1" end="5" var="i" step="2">
     hello ${i}<br>
 </c:forEach>


    <hr>

 <%
     String[] str = {"e","d","c","b","a"};
     pageContext.setAttribute("str",str);
 %>
<%--
  foreach标签
  属性:
    items="遍历容器"
    var="变量名"  变量表示数组中的元素
       会自动保存pageContext域
       for(String s : str){

       }
    varStatus="变量"循环状态对象
--%>
 <c:forEach items="${str}" var="s" varStatus="vs">
     ${s}  ${vs.count} <br>
 </c:forEach>


<%
    Address addr = new Address();
    addr.setCity("北京");
    addr.setArea("昌平");

    Address addr2 = new Address();
    addr2.setCity("天津");
    addr2.setArea("武清");

    List<Address> list = new ArrayList<Address>();
    list.add(addr);
    list.add(addr2);

    pageContext.setAttribute("list",list);
%>

<c:forEach items="${list}" var="addr">
    ${addr.city} <br>
</c:forEach>
</body>

MVC设计模式

在这里插入图片描述

JavaEE经典三层结构

在这里插入图片描述

商品展示案例

在这里插入图片描述

实现步骤

  • 创建Module
  • 创建数据库数据表
  • 创建包,到jar包,配置文件
  • 编写程序
/*
 * 方法查询所有数据
 * 数据表product
 * 返回集合List<Product>
 */
public List<Product> findAll() throws SQLException {
    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
    String sql= "SELECT * FROM product";
    return qr.query(sql,new BeanListHandler<Product>(Product.class));
}
/**
 *  调用dao层方法
 *  获取结果集List<Product>
 *  返回Web层
 */
public List<Product> findAll(){
    ProductDao dao = new ProductDao();
    List<Product> list = null;
    try {
        list = dao.findAll();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return  list;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /**
     *  调用业务层方法
     *  获取集合
     *  集合存储request域对象
     *  转发回页面,product_list.jsp
     */
    ProductService service = new ProductService();
    List<Product> list = service.findAll();
    request.setAttribute("list",list);
    request.getRequestDispatcher("/product_list.jsp").forward(request,response);
}
 <!--
          域中取出集合List
          遍历集合
          遍历每个集合元素,存储product对象
          Product对象自动存储在pageContext域
      -->
<c:forEach items="${list}" var="product">
<div class="col-md-2" style="height: 240px">
   <a href="product_info.htm"> <img src="${product.pimage}"
      width="170" height="170" style="display: inline-block;">
   </a>
   <p>
      <a href="product_info.html" style='color: green'>${product.pname}</a>
   </p>
   <p>
      <font color="#FF0000">商城价:&yen;${product.shop_price}</font>
   </p>
</div>
</c:forEach>

MySQL分页查询

SELECT * FROM product

/* 
   limit关键字限制  (MySQL)
   1000 查询多少条
   0 是数据表索引
   limit m,n 
   m索引
   n显示条数
*/
-- 第一页
SELECT * FROM product LIMIT 0,5
-- 第二页
SELECT * FROM product LIMIT 5,5
-- 第三页
SELECT * FROM product LIMIT 10,5

SELECT COUNT(*) FROM product

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值