EL和JSTL表达式
1.EL表达式
1.1EL表达式定义
Expression Language(表达式语言)
1.2EL功能
替代JSP页面中数据访问时的复杂编码
1.3为什么使用EL
<%= ( (User)request.getAttribute("user") ).getName() %>
等价于:
${user.name}
1.4表达式语法
${}
2.JSTL表达式:
2.1JSTL定义:
JSP标签标准库(JSP Standard Tag Library)
2.2为什么使用JSTL
EL表达式中可以替代JSP的复杂代码,但是无法添加逻辑判断
EL表达式封装了数据访问的功能,而JSTL标签库则封装了逻辑控制、循环控制以及数据格式化等功能,二者结合使用才能完整实现动态页面的开发需求
2.3JSTL表达式语法
首先导入jar包,再添加指令
jstl.jar
Standard.jar
创建web工程,在WEB-INF中创建一个lib文件夹,将两个jar包复制进文件夹,然后依次右键点击add as library
常用标签:
条件标签:if choose 迭代标签:forEach
3.练习
实现需求:
类似的表格,动态数据
zs |
666 |
|
2 |
lisi |
777 |
3 |
wangwu |
888 |
实现步骤:
1.创建web工程:
2.导包:
在WEB-INF中创建lib包,导入jstl.jar包和standard.jar包,右击选中add as library
3.导入tomcat包:
点击file,点击setting下面的project structure,选择左侧Libraries,点击+添加java,找到tomcat安装目录的bin目录,选择里面的jsp-api.jar和servlet-api-jar,选择ok
4.部署tomcat
点击右边的edit configurations,点击+,选择tomcat的local,Application server中选择Tomcat的安装目录,在De'ployment中点击添加添加Artfict,将下面的路径改为/,返回Server将两个热部署选择,点击ok
5.创建entity/User.java
在src中创建entity实体类包,创建素材User用来接收数据库数据,通常属性和数据库字段相同
package entity;public class User {private Integer id;private String name;private String password;public User() {}public User(Integer id, String name, String password) {this.id = id;this.name = name;this.password = password;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
6.创建UserServlet
在src中创建另一个servlet包,创建UserServlet文件, 目前没有实现数据库连接
package servlet;import entity.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;@WebServlet(name = "UserServlet")
public class UserServlet extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//准备数据ArrayList<User> list = new ArrayList<User>();User user1 = new User(1,"杨幂","111");User user2 = new User(22,"杨幂","111");User user3 = new User(333,"杨幂","111");list.add(user1);list.add(user2);list.add(user3);//绑定值request.setAttribute("list",list);//转发代码request.getRequestDispatcher("index.jsp").forward(request,response);}}
7.web.xml
实现servlet文件的添加:
<servlet><servlet-name>UserServlet</servlet-name><servlet-class>servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/UserServlet</url-pattern>
</servlet-mapping>
8.index.jsp
<head><title>$Title$</title>
</head>
<body>
<table border="1px solid red" cellpadding="0" cellspacing="0"><tr><td>用户id</td><td>用户名称</td><td>用户密码</td></tr>//c:forEach迭代标签<c:forEach var="user" items="${list}"> //items代表从UserServlet传递来的值,var为临时变量<tr>//只需要一行就行,显示数据库中的内容<td>${user.id}</td><td>${user.name}</td><td>${user.password}</td></tr></c:forEach></table>
</body>
</html>
9.c:if 实现条件判断
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>$Title$</title>
</head>
<body>
<table border="1px solid red" cellpadding="0" cellspacing="0"><tr><td>用户id</td><td>用户名称</td><td>用户密码</td></tr><c:forEach var="user" items="${list}"><tr><td>${user.id}</td><%-- <td>${user.name}</td>--%><c:if test="${user.name eq '杨幂'}"><td>yangmi</td></c:if><td>${user.password}</td></tr></c:forEach></table>
</body>
</html>
10:c:choose非此及彼
<c:choose><c:when test="${user.name eq '杨幂'}"><td>yangmi</td></c:when><c:otherwise><td>迪丽热巴</td></c:otherwise>
</c:choose>
结构如上:判断选择
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>$Title$</title>
</head>
<body>
<table border="1px solid red" cellpadding="0" cellspacing="0"><tr><td>用户id</td><td>用户名称</td><td>用户密码</td></tr><c:forEach var="user" items="${list}"><tr><td>${user.id}</td><c:choose><c:when test="${user.name eq '杨幂'}"><td>yangmi</td></c:when><c:otherwise><td>迪丽热巴</td></c:otherwise></c:choose><td>${user.password}</td></tr></c:forEach></table>
</body>
</html>
11.实现连接数据库
package servlet;import entity.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;@WebServlet(name = "UserServlet")
public class UserServlet extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// //准备数据
// ArrayList<User> list = new ArrayList<User>();
// User user1 = new User(1,"杨幂","111");
// User user2 = new User(22,"dilireba","111");
// User user3 = new User(333,"杨幂","111");
// list.add(user1);
// list.add(user2);
// list.add(user3);//访问数据库ArrayList<User> list = new ArrayList<User>();Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/work1","root","111");ps = conn.prepareStatement("select * from t_student");rs = ps.executeQuery();while (rs.next()){User user = new User(rs.getInt("id"),rs.getString("name"),rs.getString("password"));list.add(user);}} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();} finally {try {rs.close();ps.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}//绑定值request.setAttribute("list",list);//转发代码request.getRequestDispatcher("index.jsp").forward(request,response);}}
4.增,删,改
增删改主体相同,sql语句不同,查需要调用返回值,略有不同
//加,获取要添加的内容
String name = request.getParameter("name");
String password = request.getParameter("password");
//定义连接,方便关闭
Connection conn = null;
PreparedStatement ps = null;
try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//创建连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/work1", "root", "111");//填写sql语句ps = conn.prepareStatement("insert into t_student(`name`,password) value(?,?)");//设置sql语句中的值,1,2为第几个问号ps.setObject(1, name);ps.setObject(2, password);//更新数据库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();}
}
//转发请求
request.getRequestDispatcher("/UServlet?flag=list").forward(request, response);
5.查:
//创建传递的数组
ArrayList<User> list = new ArrayList<User>();
//全局变量
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//创建连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/work1","root","111");//sql语句ps = conn.prepareStatement("select * from t_student");//获取返回值rs = ps.executeQuery();//遍历塞值while (rs.next()){User user = new User(rs.getInt("id"),rs.getString("name"),rs.getString("password"));list.add(user);}
} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();
} finally {try {rs.close();ps.close();conn.close();} catch (SQLException e) {e.printStackTrace();}
}
//绑定request
request.setAttribute("list",list);
//页面转发
request.getRequestDispatcher("index.jsp").forward(request,response);
6.单个Servlet实现多个页面跳转
关键就是标识:
在访问页面的时候需要添加标识的属性,例如:http://localhost:8080/UServlet?flag=add&...
?是代表绑定数据,&是代表和,绑定多个数据用,里面可以使用id=${user.id}等来实现动态值的传入
package servlet;import entity.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;@WebServlet(name = "UServlet")
public class UServlet extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String flag = request.getParameter("flag");//获取标识//判断并进入不同的页面if (flag.equals("list")){} else if (flag.equals("add")){} else if (flag.equals("del")){} else if (flag.equals("update")){} else if (flag.equals("look")) {}}
}
不同的flag进入不同的模块
EL和JSTL表达式相关推荐
- EL与JSTL表达式代码示例
js代码示例: <%@ page language="java" isELIgnored="false"contentType="text/ht ...
- struts2值栈、struts2标签、ONGL表达式、EL表达式、JSTL表达式、jsp标签
1.struts2值栈: 参考:https://blog.csdn.net/superit401/article/details/83994149 (1) ValueStack是Struts2的一个接 ...
- 关于EL/jstl表达式的使用
2019独角兽企业重金招聘Python工程师标准>>> EL表达式或者jstl表达式在页面上是经常使用的.使用步骤: (1)jstl包: (2)页面使用 头: <%@ page ...
- JSP学习指南,JSTL表达式,EL表达式,JavaBean,常见问题收集
目录 JSTL表达式 1.通用基本标签(set,out,remove) 2.条件标签 3.循环foreach的使用: 的EL表达式 1.基本用法 2.常用表达式 3.EL表达式操作集合 4.EL表达式 ...
- SpringMVC学习手册(三)------EL和JSTL(上)
1.含义 EL: Expression Language , 表达式语言 JSTL: Java Server Pages Standard Tag Library, JSP标准标签库 ...
- java el jstl_java -EL技术JSTL技术
EL技术 EL 表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本(java代码)的编写. EL从域中取出数 ...
- 表达式 jsp_[JSTL表达式] -JSTL中的所有,都在这
JSTL 是 apache 对 EL 表达式的扩展(也就是说 JSTL 依赖 EL) JSTL 是标签语言!JSTL 标签使用以来非常方便,它与 JSP 动作标签一样,只不过它不是 JSP 内置的标签 ...
- MySQL、JDBC、HTML、CSS、JavaScript、jQuery、tomcat、Http、Servlet、JSP、EL、JSTL、Maven、Cookie、Session(框架第一部分)
第一章 MySQL 一 .数据库 1.什么是数据库? 所谓的数据库就是指存储和管理数据的仓库 2.数据库有哪些分类? 3.什么是关系型数据库? 底层以二维表的形式保存数据的库就是关系型数据库 stu- ...
- jstl依赖_[JSTL表达式]
转载链接 JSTL 是 apache 对 EL 表达式的扩展(也就是说 JSTL 依赖 EL) JSTL 是标签语言!JSTL 标签使用以来非常方便,它与 JSP 动作标签一样,只不过它不是 JSP ...
最新文章
- if you want to reserve a place at the college library
- Python 让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序
- 判断奇数偶数和闰年(Python)
- python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...
- python编写脚本,删除固定用户下的所有表
- linux 内核/proc
- 05NumPy--5.4矩阵
- VS2012下基于Glut 矩阵变换示例程序2:
- 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ...ubuntu 18.04 安装vim遇到的错误...
- VC预定义常量WIN32、_WIN32、_WIN64分析(转载)
- 【转】Android业务组件化之URL Scheme使用
- MySQL -- 行转列 -- GROUP_CONCAT -- MAX(CASE WHEN THEN)
- VC2010 MFC程序制作Flash动画欢迎界面
- 期权、期货及其他衍生产品 第三章读书笔记 利用期货的对冲策略
- 概率论与数理统计 4 Continuous Random Variables and Probability Distributions(连续随机变量与概率分布)(上篇)
- 全局函数声明和静态函数声明
- 2023年全国最新二级建造师精选真题及答案46
- 物联网场景下,基于无线宽带的空中组网研究
- java字符串转日期_在java中如何将一个字符串转换为日期?
- 项目实战——打造一款股票区间交易盯盘系统