JSP教程详解

本文详细介绍了JSP技术,从JSP的基本概念、运行原理到实际使用,包括JSP的原始标签、指令标签、内置对象、请求转发、JSTL标签库和EL表达式。此外,还讲解了JSTL核心标签如<c:if>、<c:forEach>的使用以及JSTL格式化标签在日期和数字格式化中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 JSP简介

1. 1 JSP介绍

在这里插入图片描述

1.2 常见的视图层技术

在这里插入图片描述

1.3 前后端分离式开发式

在这里插入图片描述

2、JSP运行原理

2.1 JSP技术特点

在这里插入图片描述

2.2 JSP与Servlet区别

在这里插入图片描述

3、JSP的使用

3.1 JSP的三种原始标签

在这里插入图片描述

3.1.1 <%! %> 声明标签

在这里插入图片描述

3.1.2 <% %>脚本标签

在这里插入图片描述

3.1.3 <%= %>赋值标签

在这里插入图片描述

3.1.4 JSP 原始标签的使用

在这里插入图片描述

<%@ page import="java.util.Random" %>
<%@ 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>

3.2 JSP 的指令标签

在这里插入图片描述

3.2.1 JSP 指令标签分类:

在这里插入图片描述

3.2.1.1 Page 指令标签
  • contentType
    设置响应类型和编码。
  • pageEncoding
    设置页面的编码。
  • import
    导入所需要的包。
  • language
    当前 JSP 页面里面可以嵌套的语言。
  • session
    设置 JSP 页面是否获取 session 内置对象。
  • buffer
    设置 JSP 页面的流的缓冲区的大小。
  • autoFlush
    是否自动刷新。
  • extends
    声明当前 JSP 的页面继承于那个类.必须继承的是 httpservlet 及其子类。
  • isELIgnored
    是否忽略 el 表达式。
  • errorPage
    当前 JSP 页面出现异常的时候要跳转到的 JSP 页面。
  • isErrorPage
    当前 JSP 页面是否是一个错误页面。若值为 true,可以使用 JSP 页面的一个内置对象exception。
3.2.1.2 Include 指令标签

在这里插入图片描述

3.2.1.3 Taglib 指令标签

在这里插入图片描述

3.3 JSP 的内置对象

在这里插入图片描述

  • request 对象
    request 对象是 HttpServletRequest 类型的对象。
  • response 对象
    response 对象是 HttpServletResponse 类型的对象。
  • session 对象
    session 对象是 HttpSession 类型的对象。只有在包含 session=“true” 的页面中才可以被使用。
  • application 对象
    application 对象是 ServletContext 类型的对象
  • out 对象
    out 对象是 JspWriter 类型的对象。
  • config 对象
    config 对象是 ServletConfig 类型的对象。
  • pageContext 对象
    pageContext 对象是 PageContext 类型的对象。作用是取得任何范围的参数,通过它可以获取 JSP 页面的 out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在 JSP 页面中可以直接使用 pageContext 对象。
  • page 对象
    page 对象代表 JSP 本身。
  • exception 对象
    exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用。

3.4 请求转发

### 3.4.1

3.4.1 请求转发与重定向的区别

在这里插入图片描述

3.4.2 请求转发案例

在这里插入图片描述

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;

@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("index.jsp").forward(req, resp);
    }
}
<%@ 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>

3.5 JSP 中的四大作用域对象

在这里插入图片描述

4、JSTL 标签库

在这里插入图片描述

4.1 JSTL 标签分类

在这里插入图片描述

4.1.1 核心标签

在这里插入图片描述

4.1.2 格式化标签

在这里插入图片描述

4.1.3 SQL 标签

在这里插入图片描述

4.1.4 XML 标签

在这里插入图片描述

4.1.5 JSTL 函数

在这里插入图片描述

5、EL 表达式

在这里插入图片描述

5.1 语法结构

在这里插入图片描述

5.2 EL 表达式中的操作符

在这里插入图片描述

5.3 EL 表达式的隐含对象

在这里插入图片描述

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

在这里插入图片描述

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

6.1 JSTL 标签库的使用步骤

在这里插入图片描述

6.2 JSTL 核心标签的使用

在这里插入图片描述

6.2.1 <c:if>

在这里插入图片描述

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

在这里插入图片描述

6.2.3 <c:forEach>

在这里插入图片描述

<%@ 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>--%>

<%--        EL表达式--%>
<%--        <c:if test="${1==1}">--%>
<%--            执行了--%>
<%--        </c:if>--%>
        <c:choose>
            <c:when test="${1==2}">
                when执行了001。。。
            </c:when>
            <c:when test="${1==1}">
                when执行了002。。。
            </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}<br>
        </c:forEach>
    </body>
</html>
6.2.3.1 使用 ForEach 迭代 List

在这里插入图片描述

package com.test.pojo;

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

    public Users(Integer userid, String username) {
        this.userid = userid;
        this.username = 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;
    }
}
package com.test.servlet;

import com.test.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("/findUsers.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,"AAA1");
        Users users2 = new Users(2,"AAA2");
        list.add(users1);
        list.add(users2);
        req.setAttribute("list", list);
        req.getRequestDispatcher("showUsers.jsp").forward(req, resp);
    }
}

  • showUsers.jsp
<%@ 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>用户ID</th>
                <th>用户名</th>
            </tr>
            <c:forEach items="${requestScope.list}" var="user">
                <tr>
                    <td>${user.userid}</td>
                    <td>${user.username}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

6.2.3.2 使用 ForEach 迭代 Map

在这里插入图片描述

package com.test.pojo;

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

    public Users(Integer userid, String username) {
        this.userid = userid;
        this.username = 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;
    }
}

package com.test.servlet;

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

@WebServlet("/findUsers.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 {
        Map<String, Users> map = new HashMap<>();
        Users users1 = new Users(1, "AAA1");
        Users users2 = new Users(2,"BBB1");
        map.put("users1", users1);
        map.put("users2", users2);
        req.setAttribute("map", map);
        req.getRequestDispatcher("showUsers.jsp").forward(req, resp);
    }
}

  • showUsers.jsp
<%@ 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.userid}</td>
                    <td>${map.value.username}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

6.3 JSTL 格式化标签的使用

在这里插入图片描述

6.3.1 对日期的格式化处理

在这里插入图片描述

6.3.2 对数字的格式化处理

在这里插入图片描述

package com.test.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", 23333.33);
        req.getRequestDispatcher("format.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>
      <%--对日期的格式处理--%>
      <fmt:formatDate value="${date}" pattern="yyyy-MM-dd" />
        <%--对数字的格式处理--%>
      <fmt:formatNumber value="${balance}" type="currency" />
    </body>
</html>

7、MVC 模式

在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值