EL和JSTL表达式

EL和JSTL表达式,第1张

EL和JSTL表达式

1.EL表达式
1.1 EL表达式定义

expression Language(表达式语言)

1.2 EL功能

替代JSP页面中数据访问时的复杂编码

1.3为什么使用EL

A.<%= ( (User) request.getAttribute(“user”) ) .getName() %>
jsp要导包tomcat jsp.api和servlet.api

B.${user.name}
EL不用导包

A等价于B,所以B更方便。

1.4 EL表达式语法

${ EL expression }

2.JSTL表达式
2.1 JSTL表达式定义

JSP标准标签库(JSP Standard Tag Library)

2.2为什么使用JSTL

使用EL表达式可以简化JSP页面编码,
但是如果需要进行逻辑判断和循环控制怎么办?

EL表达式封装了数据访问的功能,
而JSTL标签库则封装了逻辑控制、循环控制以及数据格式化等功能,
二者结合使用才能完整实现动态页面的开发需求。

2.3JSTL表达式语法

(1)导JSTL的jar包
jstl.jar
standard.jar

(2)JSTL指令

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

(3)企业常用标签

A.条件标签

if

choose

B.迭代标签

forEach

3.企业实战

3.1需求1:利用Servlet,JSP实现如下效果

3.2需求1-实现步骤:

(1)创建工程(web)

(2)在WEB-INF下创建lib导入jstl.jar,standard.jar
然后 Add As Library

最好也导入tomcat的jsp-api / servlet-api.jar

(3)创建cn.kgc.entity/User.java
[entity存放的实体类]
User类里:
private Integer id;
private String name;
private String pwd;
和get()、set()方法,无参构造和有参构造。

(4) cn.kgc.servlet;/UserServlet

import cn.kgc.entity.User;
import javax.servlet.*;
import java.io.IOException;
import java.util.ArrayList;

public class UserServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.准备数据
        ArrayList list = new ArrayList<>();
        User user1 = new User(1,"zs","123");
        User user2 = new User(2, "lisi", "456");
        User user3 = new User(3, "wangwu", "789");
        list.add(user1);
        list.add(user2);
        list.add(user3);

        //2.绑定值,将list数据塞入到request对象中的key为list的value中
        request.setAttribute("list",list);
        //3.转发到index.jsp页面
        request.getRequestDispatcher("index.jsp").forward(request,response);
    }
}

(5)web.xml


        UserServlet
        cn.kgc.servlet.UserServlet
    
    
        UserServlet
        /UserServlet

(6)index.jsp(导入jstl指令)

,

这些标签封装了Java中的for,while,do-while循环。
相比而言,标签是更加通用的标签,
因为它迭代一个集合中的对象。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
    
      
        用户id
        用户名称
        用户密码
      
      
<%-- var 是 临时变量 items 绑定的是key值 获得绑定域中的value--%>
        
          ${user.id}
          ${user.name}
          ${user.pwd}
        
      
    
  

(7)测试访问

http://localhost:8080/UserServlet
结果:

不访问jsp,那是静态的。

3.3需求2:
基于以上工程,利用jstl表达式中实现如下效果

标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

用户量少的用这个,多的用

注意点:
以后我们数据库是碰不到的, 如果是英文用jsp代码来封装实现中文。

3.4需求2-实现步骤:

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
    
  
  
    
      
        用户id
        用户名称
        用户密码
      
      
        
          ${user.id}
          张三
          李四
          王武
		<%-- eq 等价于 --%>
          ${user.pwd}
        
      
    
  

3.3需求3:
基于以上工程,利用jstl表达式中实现如下效果
标签与Java switch语句的功能一样,
用于在众多选项中做出选择。

switch语句中有case,而标签中对应有
switch语句中有default,而标签中有
意思 : 除了。。。否则。。。

多样性就用不了这个choose。


3.4需求3-实现步骤:
index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
    
  
  
    
      
        用户id
        用户名称
        用户密码
      
      
        
          ${user.id}
          
            好人
            大好人
          
          ${user.pwd}
        
      
    
  

题外话:

1. 从数据库中导入数据:

记得要导包 – 》mysql-connector-java-8.0.16.jar
web.xml和User都不变。

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
    
  
  
    
      
        用户id
        用户名称
        用户密码
      
      
        
          ${user.id}
          ${user.name}
          ${user.pwd}
        
      
    
  

UserServlet类:

import cn.kgc.entity.User;
import javax.servlet.*;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;

public class UserServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ArrayList list = new ArrayList<>();
        
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true",
                    "root", "zjj");
            //发送sql语句
            ps = conn.prepareStatement("select * from t_user");
            //执行sql语句
            rs = ps.executeQuery();
            User user = null;
            //循环遍历rs结果集对象塞入User对象,并塞入list集合中
            while (rs.next()){
                user = new 
User(rs.getInt("id"),rs.getString("name"),rs.getString("pwd"));
                list.add(user);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                if(rs!=null)rs.close();
                if(ps!=null)ps.close();
                if(conn!=null)conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        //绑定值,将list数据塞入到request对象中的key为list的value中
        request.setAttribute("list", list);
        //转发到index.jsp页面
        request.getRequestDispatcher("index.jsp").forward(request, response);

    }
}

http://localhost:8080/UserServlet
结果展示的是数据库的这个表的数据。

2. 实现添加功能:
AddUserServlet类:

import javax.servlet.*;
import java.io.IOException;
import java.sql.* ;
public class AddUserServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test ?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true",
                                             "root", "zjj");
            ps = conn.prepareStatement("insert into t_user(`name`,pwd) values(?,?)" );
            ps.setObject(1,name);
            ps.setObject(2,pwd);
            ps.executeUpdate();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                if(ps!=null)ps.close();
                if(conn!=null)conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

web.xml


    AddUserServlet
    cn.kgc.servlet.AddUserServlet


    AddUserServlet
    /AddUserServlet

add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    


结果是

  1. 先在http://localhost:8080/add.jsp里面
    写东西。
  2. 点击提交
  3. http://localhost:8080/UserServlet里面看是否有增加
    或者在数据库中有没有添加。

3.把两个Servlet合并成一个

如果不管用,可以选择清空浏览器缓存。

User类已省略

IndexServlet类:

public class IndexServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String action = request.getParameter("action");//action可以随便写
        if(action.equals("list")){
           1 == > 导入数据库的数据: UserServlet类:
        }else if(action.equals("add")){
           2 == > 实现添加功能:AddUserServlet类:
request.getRequestDispatcher("/IndexServlet?action=list").forward(request,response);
        }
    }
}

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    $Title$



    
<%--    window.location.href;//当前页面打开URL页面--%>
    
        用户id
        用户名称
        用户密码
    
    
        
            ${user.id}
            ${user.name}
            ${user.pwd}
        
    



add.jsp

 

web.xml


    IndexServlet
    cn.kgc.servlet.IndexServlet


    IndexServlet
    /IndexServlet

结果为:
http://localhost:8080/IndexServlet?action=list
页面为一个添加功能按钮和数据库数据的展示
点击按钮
http://localhost:8080/add.jsp

输完内容以后,点击添加,跳转到
http://localhost:8080/IndexServlet?action=add
页面为一个添加功能按钮和数据库数据的展示和增加的数据

----2021.10.20&10.21

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4671937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存