JavaWeb 第四章

本文介绍了JavaWeb中的EL表达式语言,讲解了EL的使用,并详细探讨了JSTL标准标签库,包括配置、使用及循环遍历的方法。此外,还涉及到了JDBC数据库连接,以及数据库的增删改查操作,特别是多表操作中的映射关系建立。

前言

el表达式:${表达式}和JSTL标准标签库


一、EL(Expression Language)是什么?

  • 表达式语言
  • 代替JSP页面表达式脚本进行数据的输出(只能获取数据,不能设置数据)
  • EL表达式写在jsp页面中,表达式一般是域对象的key
  • 在这里插入图片描述

2.EL的使用

通过变量名取值
${变量}
获取对象的属性值
${对象名.属性名}
获取集合元素
${对象.size()}
${对象名[索引]}
${map集合对象名[key]}
//算术运算
${+-*/}
/:div
%:mod
//逻辑运算符
&&:and   ||:or    !:not
//关系运算符
>=:ge
<=:le
==:eq
!=:ne
//empty运算符:代表判断元素是否为null

二、JSTL(标准标签库)

1.JSLT配置及使用

  • 导入依赖
 <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
 </dependency>
  • 核心标签库:核心标签库是整个JSTL中最常用的部分,主要有:基本输入输出、流程控制、迭代操作和URL(import…)操作
  • 使用
    • 在使用该库的页面中添加指令
    • 使用标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<c:set var="num" value="7" scope="request|session|application"/>
<!--target:代表要修改的对象,property:要修改对象的属性,value:要修改的属性值-->
<c:set target="${userInfo}" property="username" value="张三"/> 
<!--out:输出内容-->
<c:out value="${num}"/>
<!--删除属性-->
<c:remove var="num"/>
<c:forEach var="map" items="数组|集合" begin="起始值" end="结束值" step="迭代步长" varStatus="循环变量(status)">
<!--循环体-->
</c:forEach>
<!--数字与日期格式化-->
<fmt:formatNumber value="12.354" pattern="#0.00"/>
<!--12.35四舍五入-->
<fmt:formatDate value="${Date}" type="yyyy-MM-dd HH:mm:ss" />
<!--2012-01-21 13:30:00-->

2.循环遍历的方式

代码如下(示例):

<c:forEach var="newsType" items="list">
	${newsType}
</c:forEach>

<c:forEach var="i" begin-"0" end="10" step="1">
<!--循环体-->
</c:forEach>
<c:if test="条件(true/false)">
</c:if>
<c:if test="${not(!) empty userInfo}">
</c:if>
<c:choose>
	<c:when test="表达式">
	<!--满足表达式就执行的代码段-->
	</c:when>
	---
	<c:otherwise>
		<!--以上表达式都没满足就执行的代码段-->	
	</c:otherwise>
</c:choose>

数据库的连接JDBC

Properties properties = null;
{
//创建Properties对象
properties = new Properties();
properties.load(JDBCUtils.class.getClassLoder().getResourseAs)
}
public Connection getConnection(){
//加载驱动
Class.forName(getValue("classname"))
//创建连接
Connection connection = DriverManager.getConnection(getValue("url"),getValue("username"),getValue("password"));
return connection
}

数据库的增删改查(CRUD)

增加Create

public int addNews(News news){
	final String SQL="INSERT INTO news(newsName,title,content,resourse,editor,news_date) value(?,?,?,?,?,?)";
	 Connection c = getConnection();
	 PreparedStatement ps = c.perpareStatement(SQL);
	 ps.setString(1,news.getNewsName())
	 ps.setString(2,news.getTitle());
	 ps.setString(3,news.getContent());
     ps.setString(4,news.getResourse());
     ps.setString(5,news.getEditor());
     ps.setDate(6,new java.sql.Date(news.getNews_date().getTime()));
	 int num = ps.executeUpate();
	 release(ps,c);
	 return num;
}

检索(查Retrieve)

int num Update(News newsold, String content){
  String sql="update news set content=? where id=?";
  Connection connection = getConnection();
  PreparedStatement ps = connection.prepareStatement(sql);
  ps.setString(1,content);
  ps.setInt(2,newsold.getId());
  int num = ps.executeUpdate();
  release(ps,connection);
  return num;
}

改U(Update)

public int addNews(News news){
	final String SQL="INSERT INTO news(newsName,title,content,resourse,editor,news_date) value(?,?,?,?,?,?)";
	 Connection c = getConnection();
	 PreparedStatement ps = c.perpareStatement(SQL);
	 ps.setString(1,news.getNewsName())
	 ps.setString(2,news.getTitle());
	 ps.setString(3,news.getContent());
     ps.setString(4,news.getResourse());
     ps.setString(5,news.getEditor());
     ps.setDate(6,new java.sql.Date(news.getNews_date().getTime()));
	 int num = ps.executeUpate();
	 release(ps,c);
	 return num;
}

多表操作

映射关系的建立

  • 一对多
    • 在一的一方,建立多的一方的集合,由于考虑到集合中的对象必须是唯一的,所以通常会采用Set集合实现,由于一对多的查询方式较为复杂而且不利于维护,所以通常采用多对一的查询方式
    public class Grade{
    	private Set<Student> set;
    }
    
  • 多对一
    • 在多的一方,建立对一的一方的引用
    public class Student{
    	private Grade grade;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值