JavaWeb开发 JSP技术详解(二)

简介: JavaWeb开发 JSP技术详解(二)

八、EL表达式

什么是EL表达式

EL(Expression Language)是一种表达式语言。是为了使JSP写起来更加简单,减少java代码,可以使得获取存储在Java对象中的数据变得非常简单。在JSP2.0版本后开始支持EL表达式。

语法结构

${表达式}

${对象.属性名}

EL表达式中的操作符

操作符 描述
( ) 优先级
+
- 减或负
*
/ 或div
% 或 mod 取模
== 或 eq 测试是否相等
!= 或 ne 测试是否不等
< 或 lt 测试是否小于
> 或gt 测试是否大于
<= or le 测试是否小于等于
>= 或 ge 测试是否大于等于
&& 或 and 测试逻辑与
|| 或 or 测试逻辑或
! 或not 测试取反
empty 测试是否空值

EL表达式的隐含对象

隐含对象 描述
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
param Request 对象的参数,字符串
paramValues Request对象的参数,字符串集合
header HTTP 信息头,字符串
headerValues HTTP 信息头,字符串集合
initParam 上下文初始化参数
cookie Cookie值
pageContext 当前页面的pageContext

使用EL表达式取出作用域中的值

${pageScope.name}

${requestScope.name}

${sessionScope.name}

${applicationScope.name}

获取作用域属性中的数据时,也可以只写属性名,EL表达式会按照pageScope、requestScope、sessionScope、applicationScope的顺序查找该属性的值。

${name}

十、JSTL标签库与EL表达式的使用

10.1 JSTL标签库的使用步骤

添加jstl.jar

在JSP页面中添加taglib指令标签。

10.2 JSTL核心标签的使用

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

10.3 c标签中的if标签的使用

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--test中只能存放true(显示标签中的内容)或者false(不显示标签中的内容),可以书写EL表达式--%>
<c:if test="${1 == 1}">
    hello JSTL
</c:if>
</body>
</html>

10.4 c标签中的choose标签的使用

< c:choose >, < c:when >, < c:otherwise >

< c:choose >标签与Java switch语句的功能一样,用于在众多选项中做出选择。

switch语句中有case,而< c:choose >标签中对应有< c:when >,switch语句中有default,而< c:choose >标签中有< c:otherwise >。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--如果多个条件都满足的话,只返回第一个;条件都不满足的话返回otherwise中的结果--%>
<c:choose>
    <c:when test="${1 == 1}">
        Hello when1
    </c:when>
    <c:when test="${1 == 1}">
        Hello when2
    </c:when>
    <c:otherwise>
        hello otherwise
    </c:otherwise>
</c:choose>
</body>
</html>

10.5 c标签中的foreach标签的使用

迭代器,用于迭代集合。

属性 描述
items 被迭代的集合
begin 迭代器的起始因子
end 迭代器的结束因子
step 迭代因子的增长数
var 代表当前迭代元素的变量名称
varStatus 代表循环状态的变量名称

varStatus 属性

current: 当前这次迭代的(集合中的)项

index: 当前这次迭代从 0 开始的迭代索引

count: 当前这次迭代从 1 开始的迭代计数

first: 用来表明当前这轮迭代是否为第一次迭代的标志

last: 用来表明当前这轮迭代是否为最后一次迭代的标志

begin: 属性值

end: 属性值

step: 属性值

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--表示0~9循环10次,step表示每次循环结束后迭代因子加2,varStatus为迭代器取的名称,可以获取迭代器的属性--%>
<c:forEach begin="0" end="9" step="2" varStatus="suibian">
    forEach  ${suibian.count},${suibian.first},${suibian.last},${suibian.index} <br>
</c:forEach>
</body>
</html>

10.5.1 使用foreach标签迭代List

需求:

创建Users对象,含有userid,username属性。

创建一个Servlet,在Servlet中创建多个Users对象并放到List集合中,在showUsers.jsp的页面中显示所有的Users对象的信息。

package cn.it.pojo;
public class User {
    private int userId;
    private String username;
    public User() {
    }
    public User(int userId, String username) {
        this.userId = userId;
        this.username = username;
    }
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
}
package cn.it.Servlet;
import cn.it.pojo.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;
import java.util.List;
@WebServlet("/find.do")
public class FindUsersServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建测试数据
        User user1 = new User(1,"张三");
        User user2 = new User(2,"李四");
        User user3 = new User(3,"王五");
        User user4 = new User(4,"赵六");
        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        userList.add(user4);
        req.setAttribute("userList",userList);
        req.getRequestDispatcher("showUsers.jsp").forward(req,resp);
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1" align="center">
    <tr>
        <th>userId</th>
        <th>userName</th>
    </tr>
    <c:forEach var="user" items="${requestScope.userList}">
    <tr>
        <td>${user.userId}</td>
        <td>${user.username}</td>
    </tr>
    </c:forEach>
</table>
</body>
</html>

10.5.2 使用foreach标签迭代Map

需求:

创建Users对象,含有userid,username属性。

创建一个Servlet,在Servlet中创建多个Users对象并放到Map集合中,在showUsers2.jsp的页面中显示所有的Users对象的信息。

package cn.it.Servlet;
import cn.it.pojo.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;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@WebServlet("/find.do")
public class FindUsersServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //创建测试数据
        User user1 = new User(1,"张三");
        User user2 = new User(2,"李四");
        User user3 = new User(3,"王五");
        User user4 = new User(4,"赵六");
        Map<String,User> userMap = new HashMap<String,User>();
        userMap.put("user1",user1);
        userMap.put("user2",user2);
        userMap.put("user3",user3);
        userMap.put("user4",user4);
        req.setAttribute("userMap",userMap);
        req.getRequestDispatcher("showUsers2.jsp").forward(req,resp);
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1" align="center">
    <tr>
        <th>map的key</th>
        <th>userId</th>
        <th>userName</th>
    </tr>
    <c:forEach var="userMap" items="${requestScope.userMap}">
    <tr>
        <td>${userMap.key}</td>
        <td>${userMap.value.userId}</td>
        <td>${userMap.value.username}</td>
    </tr>
    </c:forEach>
</table>
</body>
</html>

10.6 fmt标签的使用

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

对日期的格式化处理

<fmt:formatDate value="${data}" pattern="yyyy-MM-dd"/>

对数字格的式化处理

<fmt:formatNumber value="${balance}" type="currency"/>
package cn.it.Servlet;
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.Date;
@WebServlet("/format.do")
public class FormatServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //时间
        req.setAttribute("date",new Date());
        //数字
        req.setAttribute("balance",36546.445);
        req.getRequestDispatcher("/date.jsp").forward(req, resp);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   ${requestScope.date}
  <br />
  <fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd"/>
<br />
<%--   四舍五入保留两位小数,货币符号取决于浏览器的语言--%>
  <fmt:formatNumber value="${requestScope.balance}" type="currency"/>
</body>
</html>

十一、MVC模式

11.1 什么是MVC模式

MVC模式:Model、View、Controller即模型、视图、控制器。是软件的一种架构模式(Architecture pattern)。MVC要实现的目标是将软件的用户界面和业务逻辑分离,可提高代码可扩展性、可复用性、可维护性、以及灵活性。

View(视图):用户的操作界面。如:html、jsp。

Model(模型):具体的业务模型与数据模型。如:service、dao、pojo。

Controller(控制):处理从视图层发送的请求,并选取模型层的业务模型完成响应的业务实现,并产生响应。如:Servlet。

11.2 MVC模式与应用程序分层的区别

MVC模式是一种软件的架构方式,而应用程序分层这是一种代码的组织方式。MVC模式与应用程序分层的目标都是一致的:为了解耦和、提高代码复用性。

相关文章
|
3月前
|
前端开发 Oracle 关系型数据库
关于使用SSM+JSP开发时setter、getter隐式调用问题的小结
关于使用SSM+JSP开发时setter、getter隐式调用问题的小结
38 3
|
7天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
2月前
|
存储 安全 前端开发
ssm226基于jsp的快递管理系统的开发
ssm226基于jsp的快递管理系统的开发
|
4月前
|
存储 前端开发 Java
JavaWeb:servlet+jsp+mybatis商品管理增删改查
商品管理通常包括增加(添加)、删除、修改和查询商品信息
57 1
JavaWeb:servlet+jsp+mybatis商品管理增删改查
|
4月前
|
安全 Java
javaweb实训第四天下午——员工管理系统-JSP&Servlet&JDBC综合练习-CRUD
1.课程介绍 Servlet细节; (掌握) 员工信息相关的CRUD; (掌握) 部门信息相关的CRUD; (掌握) 2.Servlet细节 2.1.多种匹配方式
41 0
|
4月前
|
SQL 前端开发 Java
JSP技术详解及其在Web开发中的应用
【1月更文挑战第2天】本文将对JSP(Java Server Pages)技术进行详细的介绍和分析。JSP是一种基于Java的服务器端编程技术,它允许开发者在HTML或XML等文档中直接嵌入Java代码片段,从而动态地生成Web页面内容。本文将首先阐述JSP的基本原理和工作机制,然后讨论其在Web开发中的各种应用场景,包括表单处理、数据库访问、会话管理等,并通过实例代码展示JSP的实际应用。最后,本文将对JSP的优缺点进行评述,并对未来的发展趋势进行展望。
150 10
|
4月前
|
测试技术 数据库 数据安全/隐私保护
JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
JavaWeb+JSP+SQL server学生学籍管理系统设计与实现(源代码+论文+开题报告+外文翻译+答辩PPT)
106 0
|
4月前
|
Java 数据库连接 数据库
通过JSP、JavaBean、JDBC、Servlet技术,实现用户登录功能
通过JSP、JavaBean、JDBC、Servlet技术,实现用户登录功能
|
4月前
|
XML 安全 Java
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
JavaWeb有机果蔬商城系统有机蔬菜水果商城系统(分前后台javaWeb+jsp+jstl+css+js+mysql)
|
4月前
|
Java 数据库 数据安全/隐私保护
基于javaWeb电子商城前后台管理系统网上商城系统(spring+mysql+jsp+jstl+css)
基于javaWeb电子商城前后台管理系统网上商城系统(spring+mysql+jsp+jstl+css)