jsp只在首次加载时调用action实现代码

当我们在一个JSP页面中使用了JSP动作标签(JSP Action Tag),比如<jsp:include>或者<jsp:forward>,其实际上就是调用了指定页面中对应的Servlet进行处理。在这种情况下,Servlet只会在JSP页面首次被加载时被调用执行,后续如果没有被重新加载,就不会再次被调用了。

下面通过两个示例来详细讲解这种情况下的具体过程。

示例1

我们可以新建一个名为index.jsp的JSP页面,并在其中使用<jsp:include>标签引入一个名为MyServlet的Servlet进行处理。在Servlet中,我们可以输出一行日志来验证Servlet是否被正常调用。

以下是index.jsp页面的代码:

<html>
<head>
    <title>JSP Test</title>
</head>
<body>
    <jsp:include page="/MyServlet"/>
    <p>Hello, World!</p>
</body>
</html>

以下是MyServlet.java文件的代码:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class MyServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("MyServlet is executed at " + new Date().toString());
        response.getWriter().println("<p>MyServlet is executed at " + new Date().toString() + "</p>");
    }
}

当我们访问index.jsp页面时,可以看到浏览器中输出了Hello, World!MyServlet is executed at ...两行内容,表示页面正常访问且Servlet也被正常调用了。

但是如果我们不刷新页面,再次访问index.jsp,我们会发现MyServlet is executed at ...这一行内容并没有再次出现。这是因为在第一次访问该页面时,/MyServlet已经被调用了一次,之后再次访问时,JSP程序会直接将之前调用的结果(而不是重新执行)直接复用。

示例2

我们还可以修改一下上面的示例,使得Servlet的处理结果根据当前时间的不同而发生变化。这样便于我们验证Servlet是否被重新调用了。

以下是index.jsp页面的代码:

<html>
<head>
    <title>JSP Test</title>
</head>
<body>
    <jsp:include page="/MyServlet"/>
    <p>Hello, World!</p>
</body>
</html>

以下是修改后的MyServlet.java文件的代码:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

public class MyServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Date now = new Date();
        System.out.println("MyServlet is executed at " + now.toString());
        response.getWriter().println("<p>MyServlet is executed at " + now.toString() + "</p>");
        response.getWriter().println("<p>The time in milliseconds is " + now.getTime() + "</p>");
    }
}

如果我们在不刷新页面的情况下连续访问index.jsp页面,我们会发现每次访问/MyServlet都会打印出新的时间,即表示Servlet每次都被重新调用了。

从上面的示例可以看出,当我们在JSP页面中使用JSP动作标签,如<jsp:include>或者<jsp:forward>,调用对应的Servlet进行处理时,Servlet只会在JSP页面首次被加载时被调用执行,后续如果没有被重新加载,就不会再次被调用了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jsp只在首次加载时调用action实现代码 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring Security安全框架之记住我功能

    下面我将详细介绍“Spring Security安全框架之记住我功能”的完整攻略,包括步骤、关键代码和示例。希望能够对您有所帮助。 步骤 导入相关依赖:在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.security</groupId> <ar…

    Java 2023年5月20日
    00
  • Java 最优二叉树的哈夫曼算法的简单实现

    Java 最优二叉树的哈夫曼算法的简单实现 一、哈夫曼编码算法简介 哈夫曼编码(Huffman coding)是一种无损压缩编码,广泛用于数据的压缩和传输。哈夫曼编码利用字符出现的频率进行编码,出现频率高的字符对应的编码短,反之出现频率低的字符对应的编码长,从而达到减少数据存储空间和传输带宽的目的。 哈夫曼编码的核心思想是构造哈夫曼树,将出现频率高的字符作为…

    Java 2023年5月19日
    00
  • PHP实现字节数Byte转换为KB、MB、GB、TB的方法 原创

    PHP实现字节数Byte转换为KB、MB、GB、TB的方法 在开发PHP程序时,我们经常需要对文件大小进行处理,通常情况下我们会使用字节数来表示文件大小,但有时我们需要将字节数转换成更容易理解的单位,比如 KB、MB、GB、TB等。 下面是PHP实现字节数Byte转换为KB、MB、GB、TB的方法: 方法一:自定义函数 function formatSize…

    Java 2023年5月26日
    00
  • 详解基于Spring Data的领域事件发布

    以下是《详解基于Spring Data的领域事件发布》的完整攻略: 1. 概述 领域事件 领域事件是指在领域中发生的一些重要操作或数据变化,如订单创建、库存减少等。它们可以触发其他业务逻辑,也可以被其他业务逻辑订阅并处理。 Spring Data Spring Data 是 Spring 社区为简化数据库访问和实现数据持久化的开源框架。它提供了丰富的 API…

    Java 2023年5月20日
    00
  • 解决Spring boot 嵌入的tomcat不启动问题

    当我们在使用Spring Boot构建Web应用的时候,通常会内嵌Tomcat容器来运行我们的应用,但是有时候,我们会遇到Tomcat容器启动失败的问题。本文将给出解决Spring boot嵌入的Tomcat不启动问题的完整攻略。 问题分析 当我们在使用Spring Boot启动我们的Web应用时,会发现程序无法启动,控制台会打印很多错误信息,其中包含了如下…

    Java 2023年5月19日
    00
  • java操作mysql实现增删改查的方法

    Java操作MySQL实现增删改查的方法完整攻略 1. 环境准备 在Java项目中,我们需要使用JDBC来操作MySQL数据库,因此需要引入MySQL的JDBC驱动包。以Maven项目为例,我们可以在pom.xml文件中加入以下依赖: <dependency> <groupId>mysql</groupId> <ar…

    Java 2023年5月20日
    00
  • 详解Java事件编程的使用

    详解Java事件编程的使用 什么是Java事件编程? 在Java编程中,事件是指程序或用户可以监测到并有可能做出反应的操作或通知。Java事件编程是基于事件模型的一种编程方法,也是一种事件驱动的编程方式。 事件驱动编程的核心在于将程序设计为一个能够响应特定事件的系统。在这种模式下,程序设计者无需关注具体的事件何时发生,只需要定义如何响应事件即可。 Java事…

    Java 2023年5月23日
    00
  • JAVA操作MongoDB数据库实例教程

    JAVA操作MongoDB数据库实例教程 MongoDB是一个文档数据库,由于其高效的数据写入和查询速度以及其搭配Node.js使用的广泛应用,已经逐渐成为了必学技能之一。本文将详细讲解使用JAVA操作MongoDB数据库的方法。 1. 安装MongoDB 在操作MongoDB数据库前,需要先安装MongoDB数据库。具体安装步骤可参考MongoDB官网上的…

    Java 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部