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日

相关文章

  • Java SE之了解泛型

    Java SE之了解泛型 泛型是Java语言中一个重要的特性,通过泛型可以实现类型的参数化,使得代码具有更好的可读性、安全性和灵活性。本文将从什么是泛型、为什么使用泛型、泛型的基本语法、泛型类和泛型方法等方面进行详细介绍。 什么是泛型 泛型是Java SE 5之后引入的一个特性,用于解决Java语言中类型安全和代码重用等问题。泛型可以让我们在编译期间就能捕获…

    Java 2023年5月26日
    00
  • SpringSecurity跨域请求伪造(CSRF)的防护实现

    为了防止SpringSecurity跨域请求伪造(CSRF)攻击,需要采取一些措施来进行防护实现。下面是实现CSRF防护的步骤: 1.同源检查 这是最常见的CSRF防护方法,包括验证请求的源(Origin),或者Referrer)与app地址是否相同,建议把这个配置在Spring Security中,只需在SpringSecurity的配置类中添加如下代码:…

    Java 2023年5月20日
    00
  • JDK1.7 Paths,Files类实现文件夹的复制与删除的实例

    首先,我们需要了解一下JDK1.7引入的Paths和Files类,它们提供了更加方便的文件和路径操作方法。 1. 复制文件夹 示例1 让我们看一下如何使用Paths和Files类来实现复制整个文件夹的功能。 import java.io.IOException; import java.nio.file.Files; import java.nio.file…

    Java 2023年5月19日
    00
  • SpringBoot SpringSecurity JWT实现系统安全策略详解

    SpringBoot SpringSecurity JWT实现系统安全策略详解 系统安全策略概述 在今天的互联网时代,安全性已经成为一个至关重要的问题,尤其是对于Web应用程序而言。SpringSecurity是Spring框架下的一个强大的安全框架,可以实现基于Web的安全保护。JWT是一种轻量级的身份认证和授权方案,可以帮助我们实现在分布式应用程序中的安…

    Java 2023年5月20日
    00
  • Java的引用类型常用的四种方法

    Java的引用类型常用的四种方法包含:按值传递、按引用传递、按可变长数组传递、按包装类传递。接下来我会结合示例详细介绍这四种方法。 按值传递 按值传递是将方法外部的值复制到方法内部,在方法中操作该值,但不会对原始值造成影响。示例代码如下: public class Main { public static void main(String[] args) {…

    Java 2023年5月26日
    00
  • Java中的collection集合类型总结

    Java中的Collection集合类型总结 Collection是Java中常用的一种数据结构,它可以简化我们对数据的操作,提高数据处理的效率。在Java中,集合类型主要分为三大类:List、Set和Map。本文将对这三大类集合类型进行详细总结和说明。 1. List集合类型 List集合类型是有序的、可重复的集合类型。它的实现类主要有ArrayList、…

    Java 2023年5月26日
    00
  • window.top[_CACHE]实现多个jsp页面共享一个js对象

    实现多个JSP页面共享一个JS对象,可以通过在不同的JSP页面中引入同一个JS文件来实现,但是如果需要在这些JSP页面通过JS互相访问/修改同一个对象,就需要使用window.top[_CACHE]机制。 下面是具体的实现步骤: 步骤1:定义一个全局的JS对象 在你的JS文件中,定义一个全局对象,例如: var mySharedObject = { coun…

    Java 2023年6月15日
    00
  • jsp 自动编译机制详细介绍

    JSP自动编译机制详细介绍 JavaServer Pages(JSP)是JavaEE中最受欢迎的技术之一。但是,在JSP中使用Java语言时,容易出现编译错误。为了解决这个问题,JSP引入了自动编译机制以确保在JSP文件中使用的Java代码能够正确地编译。 JSP自动编译机制的原理 JSP自动编译机制是通过在运行时动态编译JSP页面来实现的。当请求一个包含J…

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