JAVAEE和项目开发——JSP详解

jSP详解

主要内容

JSP介绍
JSP运行原理
JSP的使用

学习目标
在这里插入图片描述

一、JSP简介

1 JSP介绍

JSP(全称 Java Server Pages)Java服务端页面技术,是JavaEE平台下的技术规范。

它允许使用特定德标签在HTML网页中插入Java代码,实现动态页面处理,所以JSP就是HTML与Java代码的复合体。

JSP技术可以快速的实现一个页面的开发,相比在Servlet中实现页面开发将变得更加容易。

2 常见的视图层技术

HTML、JSP、Thymeleaf等

3 前后端分离开发方式

在前后端分离的项目中真正可以做到“术业有专攻”(开发人员分离)。前后端分离开发方式中前端页面专业团队完成页面的开发,并通过请求调用后端的API接口进行数据交互,在开发前端页面的团队中更多关注的技术如:html、CSS、jQuery、Vue、Nodejs等前端技术,前端追求的是:页面表现、速度流畅、兼容性、用户体验等等。而后端团队则更多的是业务的具体实现。

在后端开发的团队中更多关注的技术如:设计模式、分布式结构、微服务架构、数据库的操作、Java的性能优化以及数据库优化等技术。

前后端分离已成为互联网项目开发的业界标准使用方式,特别是为大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器、车载终端、安卓、iOS等等)打下坚实的基础。

二、JSP运行原理

1JSP技术特点

JSP和Servlet是本质相同的技术。当一个JSP文件第一次被请求时,JSP引擎会将该JSP编译成一个Servlet,并执行这个Servlet。如果JSP文件被修改了,那么JSP引擎会重新编译这个JSP。

JSP 引擎对 JSP 编译时会生成两个文件分别是.java 的源文件以及编译后的.class 文件,并放到 Tomcat 的 work 目录的 Catalina 对应的虚拟主机目录中的 org\apache\jsp 目录中。

两个 文件的名称会使用 JSP 的名称加”_jsp”表示。如:index_jsp.java、index_jsp.class
在这里插入图片描述

JSP与Servlet区别

  • JSP 以源文件形式部署到容器中。而 Servlet 需要编译成 class 文件后部署到容器中。
  • JSP 部署到 web 项目的根目录下或根目录下的其他子目录和静态同资源位于相同位置。 而 Servlet 需要部署到 WEB-INF/classes 目录中。
  • JSP 中的 HTML 代码会被 JSP 引擎放入到 Servlet 的 out.write()方法中。而在 Servlet 中我们需要自己通过对字符流输出流的操作生成响应的页面。
  • JSP 更擅长表现于页面显示,Servlet 更擅长于逻辑控制。

三、 JSP 的使用

1 JSP 的三种原始标签

JSP 的原始标签在 JSP 的任何版本中都可以使用。

1.1<%! %> 声明标签

声明标签用于在 JSP 中定义成员变量与方法的定义。标签中的内容会出现在 JSP 被编译 后的 Servlet 的 class 的{}中。

新建项目 jspdome
打开项目结构,导入servlet-api.jar包在这里插入图片描述
在这里插入图片描述

启动Tomcat
在这里插入图片描述
在这里插入图片描述

1.2<% %>脚本标签

脚本标签用于在 JSP 中编写业务逻辑。标签中的内容会出现在 JSP 被编译后的 Servlet 的_jspService 方法体中。

1.3<%= %>赋值标签

赋值标签用于在 JSP 中做内容输出。标签中的内容会出现在_jspService 方法的 out.print() 方法的参数中。注意我们在使用赋值标签时不需要在代码中添加 ”;”。
在这里插入图片描述
在这里插入图片描述

1.4JSP 原始标签的使用

需求:以 20%概率显示你中奖了。
在这里插入图片描述
fristdemo.jsp

<%@ page import="java.util.Random" %><%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 16:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        int flag = new Random().nextInt(100);
        if (flag <= 20){
        //错误的不能嵌套
        //<%="中奖了"%>
    %>
            中奖了<%=flag %>
    <% } else {%>
            在试试吧<%=flag %>

        <%  }%>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

2 JSP的指令标签

JSP指令标签的作用是声明JSP页面的一些属性和动作。
<%@指令名称 属性="值" 属性="值"%>

  • page:主要声明JSP页面的一些属性
  • include:静态包含
  • taglib:导入标签库
2.1.1page指令标签

2.1.1.1 contentType

设置响应类型和编码。

2.1.1.2 pageEncoding

设置页面的编码。

2.1.1.3 import

	 导入所需要的包。

在这里插入图片描述

2.1.1.4 language

   当前 JSP 页面里面可以嵌套的语言。

2.1.1.5 session

    设置 JSP 页面是否获取 session 内置对象。

2.1.1.6 buffer

     设置JSP页面的流的缓冲区的大小

2.1.1.7 autoFlush

是否自动刷新

2.1.1.8 extends

声明当前 JSP 的页面继承于那个类.必须继承的是 httpservlet 及其子类。 

2.1.1.9 isELIgnored

是否忽略 el 表达式。 

2.1.1.10 errorPage

当前 JSP 页面出现异常的时候要跳转到的 JSP 页面。

2.1.1.11 isErrorPage

当前 JSP 页面是否是一个错误页面。若值为 true,可以使用 JSP 页面的一个内置对象 exception。

2.1.2 Include 指令标签

  静态包含,可以将其他页面内容包含进来,一起进行编译运行.生成一个 java 文件. 
  <%@include file="被包含 JSP 的相对路径" %> 

2.1.3 Taglib 指令标签

导入标签库。 <%@taglib prefix="前缀名" uri="名称空间" %>

3 JSP 的内置对象

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、 out、pagecontext、config、page、exception。

3.1request 对象

request 对象是 HttpServletRequest 类型的对象。

3.2response 对象

response 对象是 HttpServletResponse 类型的对象。 

3.3session 对象

session 对象是 HttpSession 类型的对象。只有在包含 session=“true” 的页面中才 可以被使用。

3.4application 对象

application 对象是 ServletContext 类型的对象

3.5out 对象

out 对象是 JspWriter 类型的对象。

3.6config 对象

config 对象是 ServletConfig 类型的对象。

3.7pageContext 对象

pageContext 对象是 PageContext 类型的对象。作用是取得任何范围的参数,通过 它可以获取 JSP 页面的 out、
request、reponse、session、application 等对象。pageContext 对象的创建和初始化都是由容器来完成的,在 
JSP 页面中可以直接使用 pageContext 对象。

3.8page 对象

page 对象代表 JSP 本身。

3.9exception 对象

 exception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中 才可以被使用。

4 请求转发

4.1什么是请求转发

请求转发是服务端的一种请求方式,相当于在服务端中直接请求某个资源。

 RequestDispatcher dispatcher = request.getRequestDispatcher("/test.jsp"); dispatcher.forward(request,response); 
 
 简写方式: request.getRequestDispatcher("/test.jsp").forword(request,response);

在这里插入图片描述
4.2请求转发与重定向的区别

  • 请求转发对于客户端浏览器而言是在一次请求与相应中完成,而重定向是在两次请求两次响应中完成。
  • 请求转发并不会改变苦户端浏览器的地址栏中的内容。而重定向会改变客户端浏览器地址栏中的内容。
  • 请求转发可以使用request对象传递数据,而重定向不能使用request对象传递数据。
  • 如果是处理的DML操作,建议使用重定向方式为客户端浏览器产生响应,可以解决表单重复提交现象。

4.3请求转发案例

需求:在 Servlet 中获取客户端浏览器所支持的语言,并通过 JSP 页面将客户端浏览器 所支持的语言响应给客户端浏览器。
在这里插入图片描述
LanguageServlet.class

package com.bjsxt.servlet;

import javax.jws.WebService;
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;

/**
 * 需求:在 Servlet 中获取客户端浏览器所支持的语言,
 * 并通过 JSP 页面将客户端浏览器 所支持的语言响应给
 * 客户端浏览器。
 */
@WebServlet("/language.do")
public class LanguageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String header = req.getHeader("Accept-Language");
       req.setAttribute("key",header);
       req.getRequestDispatcher("showMsg.jsp").forward(req,resp);
    }
}

showMsg.jsp

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 16:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        String value = (String)request.getAttribute("key");

    %>
    当前支持的语言为:<%= value%>>
</body>
</html>

启动Tomcat
在这里插入图片描述

5 JSP 中的四大作用域对象

作用域:“数据共享的范围”,也就是说数据能够在多大的范围内有效。
在这里插入图片描述

6 JSTL 标签库

6.1什么是 JSTL 标签库

JSTL(Java server pages standarded tag library,即 JSP 标准标签库)JSTL 标签是基于 JSP 页面的。这些标签可以插入在 JSP 代码中,本质上 JSTL 也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL 的目标是 使 JSP 页面的可读性更强、简化 JSP 页面的设计、实现了代码复用、提高效率。

在 JSP2.0 版本后开始支持 JSTL 标签库。在使用 JSTL 标签库时需要在 JSP 中添加对应的 taglib 指令标签。

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

6.2JSTL 标签分类

根据 JSTL 标签所提供的功能,可以将其分为 5 个类别

6.2.1 核心标签

最常用、最重要,也是最基本的标签

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>在这里插入图片描述
6.2.2 格式化标签

JSTL 格式化标签用来格式化并输出文本、日期、时间、数字。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

在这里插入图片描述
6.2.3 SQL 标签

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
JSTL SQL 标签库提供了与关系型数据库(Oracle,MySQL,SQL Server 等等)进行交互的 标签。
在这里插入图片描述
6.2.4 XML 标签

JSTL XML 标签库提供了创建和操作 XML 文档的标签。
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
在这里插入图片描述
6.2.5 JSTL 函数

JSTL 包含一系列标准函数,大部分是通用的字符串处理函数。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
在这里插入图片描述

7 EL表达式

7.1什么是EL表达式

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

7.2语法结构

${表达式}
${对象.属性名}

7.3EL 表达式中的操作符
在这里插入图片描述
7.4EL 表达式的隐含对象
在这里插入图片描述
7.5使用 EL 表达式取出作用域中的值

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

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

8.1JSTL 标签库的使用步骤

 添加 jstl.jar 与 standard.jar
  在 Idea 中添加 JSTL 标签的约束文件(DTD)。 
  在 JSP 页面中添加 taglib 指令标签。 

第一步: 添加 jstl.jar 与 standard.jar在这里插入图片描述
在这里插入图片描述
第二步:在 Idea 中添加 JSTL 标签的约束文件(DTD)。
在这里插入图片描述
在这里插入图片描述
第三步: 在 JSP 页面中添加 taglib 指令标签。

新建jstldemo.jsp

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ 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>
    <c:if test="true">
        执行了
    </c:if>
</body>
</html>

在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ 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>
    <c:if test="${1==1}">
        执行了
    </c:if>

</body>
</html>

在这里插入图片描述

8.2JSTL 核心标签的使用

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

8.2.1 <c:if>

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

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

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

switch 语句中有 case,而<c:choose>标签中对应有<c:when>,switch 语句中有 default,
而<c:choose>标签中有<c:otherwise>。
<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ 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>
    <c:if test="${1==1}">
        执行了
    </c:if>

    <c:choose>
        <c:when test="${1==1}">
            when执行了...
        </c:when>

        <c:otherwise>
            otherwise执行了...
        </c:otherwise>
    </c:choose>

</body>
</html>

启动Tomcat
在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ 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>
    <c:if test="${1==1}">
        执行了
    </c:if>

    <c:choose>
        <c:when test="${1==1}">
            when1执行了...
        </c:when>

        <c:when test="${1==1}">
            when2执行了...
        </c:when>

        <c:otherwise>
            otherwise执行了...
        </c:otherwise>
    </c:choose>

</body>
</html>

在这里插入图片描述
其实<c:when>, <c:otherwise> 相当于if,else的功能

8.2.3 <c:forEach>

迭代器,用于迭代集合。【相当于for循环的功能】

在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:if test="${1==1}">
        执行了
    </c:if>

    <c:choose>
        <c:when test="${1==1}">
            when1执行了...
        </c:when>

        <c:when test="${1==1}">
            when2执行了...
        </c:when>

        <c:otherwise>
            otherwise执行了...
        </c:otherwise>
    </c:choose>
    <hr/>
    <c:forEach begin="0" end="9">
        ForEach....<br/>
    </c:forEach>
</body>
</html>

启动Tomcat
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:if test="${1==1}">
        执行了
    </c:if>

    <c:choose>
        <c:when test="${1==1}">
            when1执行了...
        </c:when>

        <c:when test="${1==1}">
            when2执行了...
        </c:when>

        <c:otherwise>
            otherwise执行了...
        </c:otherwise>
    </c:choose>
    <hr/>
    <c:forEach begin="0" end="9" step="2" varStatus="var">
        ForEach....${var.count},${var.first},${var.last},${var.current}<br/>
    </c:forEach>
</body>
</html>

在这里插入图片描述

varStatus 属性

  current: 当前这次迭代的(集合中的)项 
  index: 当前这次迭代从 0 开始的迭代索引 
  count: 当前这次迭代从 1 开始的迭代计数
  first: 用来表明当前这轮迭代是否为第一次迭代的标志   last: 用来表明当前这轮迭代是否为最后一次迭代的标志 
  begin: 属性值 
  end: 属性值
  step:属性值

8.2.3.1 使用 ForEach 迭代 List

需求: 
创建 Users 对象,含有 userid,username 属性。 
创建一个 Servlet,在 Servlet 中创建多个 Users 对象并放到 List 集合中,
在 showUsers.jsp 的页面中显示所有的 Users 对象的信息。

在这里插入图片描述

Users.class

package com.bjsxt.pojo;

public class Users {
    private Integer userid;
    private  String username;

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Users(Integer userid, String username) {
        this.userid = userid;
        this.username = username;
    }

    public Users() {
    }
}

FindUsersServlet.class

package com.bjsxt.servlet;

import com.bjsxt.pojo.Users;

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("/findUser.do")
public class FindUsersServlet extends HttpServlet  {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Users> list = new ArrayList<>();
        Users users1 = new Users(1,"Oldu");
        Users users2 = new Users(2,"Kevin");
        list.add(users1);
        list.add(users2);
        req.setAttribute("list",list);
        req.getRequestDispatcher("showUsers.jsp").forward(req,resp);
    }
}

showUsers.jsp

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ 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>用户ID</th>
            <th>用户名</th>
        </tr>
        <c:forEach items="${list}" var="user">
            <tr>
                <td>${user.userid}</td>
                <td>${user.username}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

在这里插入图片描述

8.2.3.2 使用 ForEach 迭代 Map

需求:
 创建 Users 对象,含有 userid,username 属性。
 创建一个 Servlet,在 Servlet 中创建多个 Users 对象并放到 Map 集合中,在 showUsers2.jsp 的页面中显示
 所有的 Users 对象的信息。

Users.class

package com.bjsxt.pojo;

public class Users {
    private Integer userid;
    private  String username;

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Users(Integer userid, String username) {
        this.userid = userid;
        this.username = username;
    }

    public Users() {
    }
}

FindUsers2Servlet.class

package com.bjsxt.servlet;

import com.bjsxt.pojo.Users;

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.HashMap;
import java.util.Map;

@WebServlet("/findUser2.do")
public class FindUsers2Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Map<String , Users> map = new HashMap<>();
        Users users1 = new Users(1,"Oldu");
        Users users2 = new Users(2,"Kevin");
        map.put("users1",users1);
        map.put("users2",users2);
        req.setAttribute("map",map);
        req.getRequestDispatcher("showUsers2.jsp").forward(req,resp);

    }
}

showUsers2.jsp

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 17:52
  To change this template use File | Settings | File Templates.
--%>
<%@ 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>用户ID</th>
        <th>用户名</th>

    </tr>
    <c:forEach items="${map}" var="map">
        <tr>
            <td>${map.key}</td>
            <td>${map.value.usersid}</td>
            <td>${map.value.usersname}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

在这里插入图片描述

8.3JSTL 格式化标签的使用

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

8.3.1 对日期的格式化处理

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

FormatServlet.class

package com.bjsxt.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("data",new Date());
        req.getRequestDispatcher("format.jsp").forward(req,resp);
    }
}

format.jsp

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 18:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${date}
</body>
</html>

在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 18:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <fmt:formatDate value="${date}" pattern="yyyy-MM-dd">
</body>
</html>

在这里插入图片描述

8.3.2 对数字格的式化处理

<fmt:formatNumber value="${balance}" type="currency"/>

package com.bjsxt.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("data",new Date());
        
        req.setAttribute("balance",233423.323);
        
        req.getRequestDispatcher("format.jsp").forward(req,resp);
    }
}

<%--
  Created by IntelliJ IDEA.
  User: 83447
  Date: 2021/2/22
  Time: 18:20
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <fmt:formatDate value="${date}" pattern="yyyy-MM-dd">
        <fmt:formatNumber value="${balance}" pattern="currency">
</body>
</html>

保留结果两位数,并且会做四舍五入处理
在这里插入图片描述

四、MVC模式

1 什么是MVC模式

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

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

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

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

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

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

下一篇:web实例【实现用户登录与退出登录功能】

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值