【Java学习笔记10 Java Web 应用——JSP

JSP(Java Script Pages)技术是一种网站开发技术,可以让Web开发人员快速、高效的开发出易于维护的动态网页。使用JSP技术开发的Web应用程序具有跨平台性,不需要修改程序,发布后即可在Windows、Linux等不同的操作系统中运行。

10.1 JSP技术概述

JSP是一种基于Java语言开发的动态网页技术,它可以将网页的静态和动态部分分离。静态部分的书写可以采用HTML语言以往的方式,而动态部分用特殊标记嵌入,标记以 <% 开始,以 %> 结束

<html>
	<head>
			<title>JSP演示程序</title>
	</head>
	<body>
			
	</body>

</html>

JSP文件的扩展名为“.jsp”,可以放置在任何一个放置 WEB页面的目录下。JSP文件看起来与HTML文件很相似,但与Servlet文件差别很大

10.2 JSP运行环境搭建

JSP需要JSP引擎的支持才能运行。JSP引擎是指能够运行JSP的Web服务软件。安装了JSP引擎的计算机就是JSP的Web服务器。Tomcat是一个常见的Web服务器。

10.2.1 安装

10.2.2 测试

bin目录下的tomcat8.exe运行在这里插入图片描述
测试成功
在这里插入图片描述

10.2.3 第一个JSP程序

【实例1】创建一个JSP文件,并通过浏览器访问。
1.在Tomcat安装目录 webapps下创建一个新的文件夹myapp
在这里插入图片描述

2.在文件夹myapp下再创建一个WEB-INF文件夹

在这里插入图片描述

3.在WEB-INF文件夹下再创建一个文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <display-name>My web Application</display-name>
    <description>
        A Application for test
    </description>
</web-app>

4.在ROOT目录下,创建一个文件index.jsp
在这里插入图片描述

<html>
    <body>
        <center>
            System now time is : <%=new java.util.Date()%>
        </center>
    </body>

</html>

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

说明
web.xml是一个样式配置文件。index.jsp是一个JSP文件。使用java.util.Date()获取当前系统时间,并在网页中心展示。

10.3 基本语法

JSP页面包含静态和动态内容。静态JSP基本上是HTML脚本。动态内容包括JSP指令、JSP表达式、Scriptlet(脚本集)、声明、动作、注释等、

10.3.1 HTML注释

HTML注释是在客户端的源代码中显示的注释。
<!-- -->
注释正常情况下在页面上是看不到的。除非访问源代码。
理论上注释里可以存放任意合法的表达式

10.3.2 隐藏注释

隐藏注释也可以说是真正的JSP注释。因为只显示在JSP代码中,不会发送给客户端,也不可以通过“访问源代码”的形式进行查看。
<%-- --%>
在这里面的语句不会进行编译,也不会再客户端浏览器和客户端的HTML源代码中进行展示。

10.3.3 声明

类似于Java语言中的变量定义,在使用变量和方法之前必须先声明,否则会报错。
JSP文件必须声明将来在程序中使用的变量和方法。
语法格式:
<%! declaration; {declaration; } ... % >
下面给出了一个声明的简单例子:

<%! char sex = 'm' ; %>
<%! double d,e,f ;%>
<%! Object o = new Object();%>

一次可以声明多个变量,他们之间需要以",“分隔,并以” ; "结尾。

  • 声明必须以" ; "结尾。
  • 可以直接使用由 <% @page %>包含的变量,无需重新生命
    -声明的有效范围是这个页面的内部。如果多个页面需要同样的声明,则可以将这些声明写成一个文件。然后使用<% @include % >< jsp:include >来包含这个文件

10.3.4 表达式

程序中的表达式类似数学中的公式。可以通过计算来获得所需要的值。
表达式用来在JSP页面上输出结果。分别使用<%= 和 %>作为开始和结束的标志
语法格式:
<%= expression % >
下面给出了一个声明的简单例子:

<%= person.getName()%>
<b><%= new Date() %></b>

表达式实现将获得的用户名自动转换为字符串类型,然后插入表达式所在的JSP文件的位置。

10.3.5 脚本集(Scriptlet)

脚本集(Scriptlet)是指在JSP中包含的一段有效的Java代码。类似于在开发游戏的时候为某游戏场景写的一段运行脚本。
语法格式
<% code fragment %>
下面给出了一个脚本集的的简单例子:

<%@ page language = "java" >
<html>
    <head><title>Scriptlet example</title></head>

    <body>
        <%
        request.setAttribute("name","aaa");             //设置request的参数name
        session.setAttribute("name","java自学手册");    //设置session的参数name
        application.setAttribute("name","Java语言");    //设置application的参数name
        %>
    
        <%
        if(request.getParameter("name") != null )
            out.println(request.getParameter("name"));
        if(session.getParameter("name")!=null)
            out.println(request.getParameter("name"));
        if(application.getParameter("name")!=null)
            out.println(request.getParameter("name"));
        %>
    </body>
</html>

在JSP页面中,可以将Java代码放在<% %>之间。
一个Scriptlet代码块可以包含多个JSP语句,表达式和方法等

10.4 JSP指令元素

JSP指令向JSP引擎提供编译信息。
通常JSP指令在当前页面内有效,并不向客户端产生任何输出。
常见的JSP指令包括:include 、 page 、 taglib 等
通用语法格式为:<%@ 指令标记 ["属性1" = "值1" "属性1" ="值2"] %>
【实例1】使用include指令加载hello.txt文件,并在浏览器中展示文件的内容。

10.4.1 include 指令

include指令是文件加载指令。用于在当前文件中包含指定位置的资源文件内容。被添加的内容可以被解析并进行显示。include指令的语法格式:
<%@ include file = "relativeURL" %>
参数relativeURL是要包含的文件。

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

10.4.2 page 指令

page指令即页面指令。用来描述JSP文件的全局属性,页面指令的属性将影响到该JSP页面。同一个JSP页面可以包含多个页面指令。除import属性外,其他的页面属性只能出现一次。page指令可以出现在JSP文件的任何地方,通常放在JSP文件的头部。page指令的语法格式
<%@ page attribute = "value" ......%>
其中,attribute 包含 language 、import、session、buffer、autoFlush、isThreadSafe、info、errorPage、contentType、isErrorPage等不同页面指令、具体每个指令的使用格式如下:

<%@ page 
[language = "java"]
[import = "{package.class / package.*}, ... "]
[session = "true /false"]
[buffer = "none /8kb/sizekb"]
[autoFlush = "true/false"]
[isThreadSafe = "true/false"]
[info = "text"]
[errorPage = "relativeURL"]
[contentType = "mimeType[;charcterSet]"/"text/html;charset = "ISO-8859-1"]
[isErrorPage = "true/false"]
%>

session属性:该属性默认为ture,表示当前页面支持session。false的目的是节约服务器资源。
buffer属性:设置JSP的out对象的缓冲区大小。默认值由服务器确定。
autoFlush属性:指定缓冲区的工作策略,在缓冲区溢出的情况下,取值为true则正常输出。取值为false则会导致一个溢出错误发生。
isThreadSafe属性:用于指定是否可以处理来自多个用户的请求。
errorPage属性:制定一个异常处理页面。指定的错误页面可以通过预定义的exception变量访问异常
isErrorPage:指定当前页面是否可以真以为其他页面的错误处理页面
contentType属性:用于指定MINE类型

errorPage用来配置本JSP页面的错误处理页面。而web.xml可以指定整个Web应用的错误处理页面。

上面的属性可以单独使用也可以一起使用

<%@ page language="java"  import = "java.util.*"
session = "true" buffer = "12kb" autoFlush = "true"
errorPage = "error.jsp"
contentType="text/html; charset=UTF-8"%>  

<html>

 <head>
    <title>page指令</title>
 </head>

 <body>
    <h2>page指令</h2>
    <center>
      现在时间是 <%= new java.util.Date()%>
    </center>
 </body>
</html>
<!-- 
D:\apache-tomcat-8.5.100-windows-x64\apache-tomcat-8.5.100\webapps\ROOT\includeText.jsp -->

在这里插入图片描述

10.4.3 taglib属性

jsp页面想要支持JSP标签。就要使用taglib属性。用户可以自定义标签库,为标签编写配置文件,然后就可以在页面中使用已经定义好的标签了。
taglib指令的语法格式如下:

<%@ tagliburi="标签库URI" prefix="自定义标签前缀" %>

10.5 JSP动作元素

与jsp指令元素不同,jsp动作元素在请求处理时起作用。JSP动作元素是用XML语法写成的。利用JSP动作可以动态的插入文件、重用JavaBean组件,把用户重定向到另外的界面,为Java插件生成HTML代码。

JSP引擎在处理JSP文件时,每遇到一个JSP动作元素,就会根据他的标签做相应的处理。常用的JSP动作元素包括:<jsp:forward> <jsp:include> <jsp:plugin> <jsp:setProperty> <jsp:useBean>

10.5.1 <jsp:forward>

它将请求转发到另一个JSP、Servlet或者静态资源文件中。
请求转发的资源必须位于与该JSP文件相同的上下文环境中
当遇到这样的标签时,就通知当前网页的操作,转入新的页面操作。
<jsp:forward>的语法格式如下:

<jsp:forward page="relativeURL" | "<%=expression %>" />
<jsp:forward page="relativeURL" | "<%=expression %>" />
<jsp:param name="pName1" value="pValue1 | <%=expression1 %>" />
<jsp:param name="pName2" value="pValue2 | <%=expression2 %>" />

<jsp:forward>可以通过<jsp:param>设置属性,name指定参数名,value指定参数值,参数可以有一个或者多个。并且必须发给一个动态文件。
<jsp:forward>在Jsp开发中应用最多的是登录功能的实现。当用户登录某系统时,通过用户名和密码认证,使用<jsp:forward>跳转到主界面。

10.5.2 <jsp:userBean>

<jsp:userBean>用于在JSP中创建一个Bean实例。指定该实例的作用范围,并且在它的标签指定范围内可用。

```jsp:userBean``的语法格式如下:

<jsp:useBean id="id" class="className" scope = "scope" BeanName = "beanName"/>
id :唯一确定在指定范围内的Bean的变量
class:用于指定Bean的路径名或类名
BeanName:用于通过串行化方法从类中创建一个Bean
type:type可以是类本身、父类或者接口

  1. scope用来指定Bean变量存在的有效范围。scope的取值可以是page request session
    application等,默认值为page
  2. <jsp:userBean>``的主体部分可能包括jsp:userBean 操作。只有在```jsp:userBean``创建实例后才执行主体部分。如果Bean已经存在,则不再执行主体部分。

10.5.3 <jsp:setProperty>

<jsp:setProperty> 实际利用了Bean中的setXXX()方法来设置Bean的属性值

<jsp:setProperty> 的语法如下:

<jsp:setProperty name = "beanName" property = "attributeName" value = "attributeValue"/>

其中,name 指定需要修改属性的 Bean 的名称;property 指定 Bean 的属性,即 Bean 类中的属性;value 是要设定的属性值。

10.5.4 <jsp:getProperty>

<jsp:getProperty> 通常与<jsp:getProperty> 操作噢诶和使用以获得Bean的属性值,并显示在页面中。他访问的属性会自动转换成String类型,然后发送给输出流。

<jsp:getProperty> 的语法如下:

<jsp:getProperty name = "beanName" property = "attributeName">

其中,name 指定需要获取属性的 Bean 的名称;property 指定 Bean 的属性,即 Bean 类中的属性。

10.5.4 <jsp:include>

<jsp:include> 用于在请求过程中在JSP页面里包含静态或动态文本。
jsp:include 的语法如下:

<jsp:include page="relativeURL | <%=expression%>" flush="true" />  

page 指定引入页面的路径,flush 表示在引入文件前是否刷新缓冲区,默认为 false。

注意:“jsp”和“:”以及“include”三者之间没有空格。

head.jsp 代码如下:

<p>header内容​</p>

index.jsp 代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
    <jsp:include page="head.jsp"></jsp:include>
    <p>编程帮(http://www.biancheng.net)</p>
</body>
</html>

运行结果如下:

在这里插入图片描述

10.5.5 <jsp:plugin>

```<jsp:plugin> ```用来产生特别的标识,可以装入Applet或者JavaBean。当JSP文件被编译之后发送给浏览器,浏览器可以根据不同的版本替换这些标识。

<jsp:plugin> 的语法如下:

  <jsp:plugin type="bean|applet" code="classFileName" codebase="classFileDirectoryName"
[ name="instanceName" ]
[ archive="URIToArchive, ..." ]
[ align="bottom|top|middle|left|right" ]
[ height="displayPixels" ]
[ width="displayPixels" ]
[ hspace="leftRightPixels" ]
[ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ]
[ nspluginurl="URLToPlugin" ]
[ iepluginurl="URLToPlugin" ] >
[ <jsp:params>
[ <jsp:param name="parameterName"
value="{parameterValue | <%= expression %>}" /> ]+
</jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ]
</jsp:plugin>
示例:
<jsp:plugin type=applet code="Molecule.class" codebase="/html">
<jsp:params>
<jsp:param name="molecule" value="molecules/benzene.mol" />
</jsp:params>
<jsp:fallback>
<p>Unable to load applet</p>
</jsp:fallback>
</jsp:plugin>

10.6 内置对象

为了简化页面的开发过程,JSP 提供了一些内置对象。

JSP 内置对象又称为隐式对象,它们由容器实现和管理。在 JSP 页面中,这些内置对象不需要预先声明,也不需要进行实例化,我们可以直接在脚本和表达式中使用。

JSP内置对象有以下几个:

  1. out

out对象用来向客户端浏览器输出数据
【实例】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
<html>
<head>
<meta charset="ISO-8859-1">
<title>out对象实例</title>
</head>
	<%@ page buffer = "1kb" %> <!-- 设置缓冲区大小 -->

<body>
<%
	for(int i = 0;i<100;i++)
		out.println(i + "{" + out.getRemaining() + "}"); // 输出缓冲区剩余大小
		
%>
<br>

缓冲区大小:<%= out.getBufferSize() %><br>
剩余缓冲区大小:<%=out.getRemaining() %><br>
自动刷新:<%=out.isAutoFlush() %><br>

</body>

</html>

在这里插入图片描述

  1. request

request对象又被称为请求对象,可以获得客户端提交的数据和客户端的相关信息,即客户端的请求信息被封装到request对象中,服务器通过request对象才能得知客户端的请求,然后做出相应的处理
【实例】

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
       <%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta charset="ISO-8859-1">
<title>request对象实例</title>
</head>

<body>
<form action="" method = "post">
用户名:<input type="text" name="username"> <br/>
密码:<input type="password" name="userpass" > <br/>
<input type="submit" value="进入">
</form>

<%
String str = "";
if(request.getParameter("username")!=null && request.getParameter("userpass")!=null){
	//获取request参数
	Enumeration enumt = request.getParameterNames(); //获得参数的名称
	while(enumt.hasMoreElements()){	//变量参数名称
		str = enumt.nextElement().toString();//参数名称转换为字符串
		out.println(str+":"+request.getParameter(str)+"<br>");//输出参数名称
	}
}
%>

请求方式:<%=request.getMethod() %><br>

请求的资源:<%=request.getRequestURI() %><br>

请求用的协议:<%=request.getProtocol() %><br>

请求的文件名:<%=request.getServletPath() %><br>

请求的服务器IP:<%=request.getServerName() %><br>

请求服务器的端口:<%=request.getServerPort() %><br>

客户端IP地址:<%=request.getRemoteAddr() %><br>

客户端主机名:<%=request.getRemoteHost() %><br>




</body>

</html>

登录前
登录后

  1. response
    response对象时用来做出相应的。当客户端向服务器端提交请求时,就会产生request对象,该对象会对客户端的请求做出反应,并向客户端输出相关的信息
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
       <%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta charset="ISO-8859-1">
<title>response.sendRedirecttitle</title>
</head>

<body>
<%
	String address = request.getParameter("web");
	if(address!=null){
		if(address.equals("baidu"))
			response.sendRedirect("https://www.baidu.com/");
		else if(address.equals("bing"))
			response.sendRedirect("https://cn.bing.com/?mkt=zh-CN");
		else if(address.equals("weibo"))
			response.sendRedirect("https://weibo.com/");	 //respnse的重定向方法	
	}
%>
<b>选择跳转</b>
<form action = "response.jsp" method = "GET">
<select name = "web">
	
	<option value = "baidu" selected>https://www.baidu.com
	<option value = "bing">https://cn.bing.com
	<option value = "weibo">https://weibo.com
</select>

<input type = "submit" value = "提交">


</form>
</body>
</html>

在这里插入图片描述
4. session
session(会话)对象,是用来保存每个用户的信息,达到对每个用户的状态进行跟踪的目的。
从用户打开浏览器与服务器建立连接,到关闭浏览器断开与服务器的连接,称为一次会话。
用户第一次访问JSP页面时,JSP引擎会自动产生一个session对象,并分配一个String类型的ID,同时将ID发送到客户端,存放在Cookie中。
当客户端再次访问这个网页时,就不会再分配新的session对象,直到关闭浏览器。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>  <!-- 支持库 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta charset="ISO-8859-1">
<title>session对象实例 </title>
</head>

<body>
session.getCreateionTime():<%=session.getCreationTime() %><br>

session.getId()<%=session.getId() %><br>

session.getLastAccessedTime()<%=session.getLastAccessedTime() %><br>

 new java.sql.Time(session.getLastAccessedTime())<%= new java.sql.Time(session.getLastAccessedTime()) %><br>

session.getMaxInactiveInterval()<%=session.getMaxInactiveInterval() %><br>
session.isNew()?<%=session.isNew()?"是":"否" %><br>
<%

	session.putValue("name", "小明");
	session.putValue("password", "123456");
	session.putValue("age", "25");

%>
<%
	for(int i =0;i<session.getValueNames().length;i++){ //遍历session的属性,并输出属性和属性值
		out.println(session.getValueNames()[i]+"="+session.getValue(session.getValueNames()[i])+"<br>");
		
	}
%>

</body>

</html>

在这里插入图片描述
5. application
application对象用来保存全局的数据信息,对于同一个JSP引擎来说,所有的用户都共享application对象,该对象在服务器启动时创建,一直保持到服务器关闭

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
       <%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta charset="ISO-8859-1">
<title>application对象演示</title>
</head>
<body><br>
Tomcat引擎以及版本号<%=application.getServerInfo() %>
返回application.jsp虚拟路径的真实路径<%=application.getRealPath("/application.jsp") %><br><br>
服务器支持的Servlet API的大版本号<%=application.getMajorVersion() %><br><br>
服务器支持的Servlet API的小版本号<%=application.getMinorVersion() %><br><br>

指定资源(文件及目录)的URL路径:<%=application.getResource("/application.jsp") %><br><br>
<%
application.setAttribute("name", "Java从入门到放弃"); //设置application对象的属性值
out.println(application.getAttribute("name"));	//输出application对象的属性
application.removeAttribute("name"); //删除application对象的属性和值
out.println(application.getAttribute("name"));	//输出application对象的属性
%>

<%
	if(application.getAttribute("count")==null)
		application.setAttribute("count","1");
	else
		application.setAttribute("count",Integer.toString(Integer.valueOf(application.getAttribute("count").toString()).intValue()+1));

%>
是第<%=application.getAttribute("count") %>位访问者

</body>
</html>

在这里插入图片描述

6. pageContext

PageContext对象可以完成对JSP页面内可见的,特殊的预定义对象的范文,因此可以访问到该JSP页面所有的session对象,也可以取得application对象的属性值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>编程帮(www.biancheng.net)</title>
</head>
<body>
    <%
        request.setAttribute("info", "request范围的值");
        session.setAttribute("info", "session范围的值");
        application.setAttribute("info", "application范围的值");
    %>
    利用 pageContext 取出以下范围内各值(方法一):
    <br> request 设定的值:<%=pageContext.getRequest().getAttribute("info")%>
    <br> session 设定的值:<%=pageContext.getSession().getAttribute("info")%>
    <br> application 设的值:<%=pageContext.getServletContext().getAttribute("info")%>
    <hr>
    利用pageContext取出以下范围内各值(方法二):
    <br> 范围1(page)内的值:<%=pageContext.getAttribute("info", 1)%>
    <br> 范围2(request)内的值:<%=pageContext.getAttribute("info", 2)%>
    <br> 范围3(session)内的值:<%=pageContext.getAttribute("info", 3)%>
    <br> 范围4(application)内的值:<%=pageContext.getAttribute("info", 4)%>
    <hr>
    利用 pageContext 修改或删除某个范围内的值:
    <%
        pageContext.setAttribute("info", "修改request范围的值", 2);
    %>
    <br> 修改 request 设定的值:
    <br>
    <%=pageContext.getRequest().getAttribute("info")%>
    <br>
    <%
        pageContext.removeAttribute("info");
    %>
    删除 session 设定的值:<%=session.getAttribute("info")%>
</body>
</html>

在这里插入图片描述

7.exception对象

如果在Jsp页面中出现没有捕获的异常,就会生成exception对象,并把它传送到在page指令中设定的错误页面中,然后在错误处理页面中处理相应的exception对象。exception对象只有在错误处理页面(在页面指令里isErrorPage=true)才可以使用。

8.config对象
config对象保存了Servlet的配置信息,当JSP引擎启动时,自动将JSP引擎的配置信息保存于config对象里。

10.8.1 静态include指令和动态include指令的比较

  • 静态include主要是对静态页面引入,不会检查所包含文件的变化<%@file = “include.html”%>。
    动态include主要是对动态页面的引入,它总会检查所引入的页面的变化,如果包含的资源在请求间变化,则在下一次请求包含jsp:include动作的JSP时,将包含资源的新内容。
  • 在转换时,如果所包含资源发生变化,则使用include指令的JSP将不能反映出新的内容,除非重新编译这个JSP

jsp:include动作包含的属性有两个

  • page:指定所包含资源的相对URL路径,该资源必须是同一Web应用程序的组成部分
  • flush:指定在执行include动作后是否应刷新缓冲区。

10.8.2 指令和动作的区别

1.include指令
include指令可以在JSP页面转换成Servlet之前将JSP代码插入其中。但难以维护,只要被包含的页面发生改变,就要更改主页面,因为主页面不会自动查看被包含的页面是否发生更改。

语法格式:
<%@ include file = "sample.jsp" %>

2.include动作

  • jsp:include 动作是在主页面被请求时,将次级页面的输出包含进来。服务器按照正常的方式对指想被包含资源的URL进行解释。因而这个URL可以是Servlet或JSP页面。

  • 在被包含的页面发生更改时,无需对主页面做出修改。

  • 缺点是所包含的是次级页面的输出,而非次级页面的实际代码,所以在被包含的页面中不能使用任何有可能在整体上影响主页面的JSP构造。

语法格式:
<jsp:include page="{relativeURL|<%=expression%>>}" flush="true">
       <jsp:param name="parametername" value="parametervalue"/>
</jsp:include>

参考资料

JSP out对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629432.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

申请免费通配符证书

通配符证书是一种 SSL/TLS 证书&#xff0c;可用于保护多个域&#xff08;主机&#xff09;&#xff0c;由域名字段中的通配符 (*) 指示。这种证书主要用于具有许多子域的组织。通配符证书对主域及其所有次级子域有效。 通配符证书和多域名证书的区别&#xff1a; 要注意的是…

webpack优化构建速度示例-合理配置loader的include exclude:

实际上&#xff0c;babel-loader 在 Webpack 配置中默认并不包含 exclude 和 include 选项的默认值&#xff0c;通常&#xff0c;为了优化构建性能&#xff0c;开发者会显式地设置 exclude 和 include 选项&#xff0c;以便 babel-loader 只处理必要的文件。 src/index.js impo…

Zookeeper and RPC dubbo

javaguide zookeeper面试题 Zookeeper 啥是Zookeeper干啥的 ZooKeeper 可以被用作注册中心、分布式锁&#xff1b; ZooKeeper 是 Hadoop 生态系统的一员&#xff1b; 构建 ZooKeeper 集群的时候&#xff0c;使用的服务器最好是奇数台。 启动ZK 下载安装解压 不过多赘述 我的…

Spring:了解@Import注解的三种用法

一、前言 在 Spring 框架中&#xff0c;Import 注解用于导入配置类&#xff0c;使得你可以在一个配置类中引入另一个或多个配置类&#xff0c;从而实现配置的模块化。这对于组织大型应用程序的配置非常有用&#xff0c;因为它允许你将配置分散到多个类中&#xff0c;然后再将它…

RAW转换和图像编辑工具:Capture One 23 Pro (win/mac)中文专业版

Capture One 23是一款功能强大的桌面版照片编辑软件&#xff0c;由丹麦PHASE ONE飞思数码公司开发。 以下是该软件的一些主要特点&#xff1a; 强大的RAW处理功能&#xff1a;Capture One 23支持多种品牌的相机和镜头&#xff0c;提供了丰富的RAW处理工具&#xff0c;包括曝光、…

RALL-E: Robust Codec Language Modeling with Chain-of-Thought Prompting for TTS

demo pageDetai Xin&#xff0c; tanxu微软 & 东大 & 浙大 abstract 使用CoT的思路&#xff0c;和Valle的框架&#xff0c;先实现LLM预测音素级别pitch/duration&#xff0c;然后预测speech token。 methods Prosody tokens as chain-of-thought prompts 和Valle一…

【JavaEE】Servlet

文章目录 一、Servlet 是什么二、如何创建Servlet程序1、创建项目2、引入依赖3、创建目录4、编写代码5、打包程序6、部署程序7、验证程序 一、Servlet 是什么 二、如何创建Servlet程序 1、创建项目 2、引入依赖 Maven 项目创建完后&#xff0c;会自动生成一个 pom.xml 的文…

独家|暴雨推出基于国产X86芯片的四路服务器

伴随着智慧计算时代的到来和企业数字化转型的深入&#xff0c;人工智能、大数据、虚拟化等创新技术在应用普及的过程中&#xff0c;也在不断地细分和深化&#xff0c;使得企业的业务系统日趋复杂&#xff0c;数据量、数据类型更加庞大&#xff0c;对计算平台的性能要求“水涨船…

Google I/O 2024:探索未来AI技术的无限可能

近日&#xff0c;Google I/O 2024大会圆满落幕&#xff0c;带给我们一场关于人工智能的盛宴。在这场大会上&#xff0c;Google推出了一系列令人激动的AI新功能和工具&#xff0c;让我们得以一窥未来的科技发展。今天&#xff0c;就让我来为大家总结一下这些亮点吧&#xff01; …

一键修复所有dll缺失,教大家解决丢失的dll文件

修复所有DLL&#xff08;动态链接库&#xff09;文件缺失的问题通常不可能通过单一的"一键修复"按钮来实现&#xff0c;因为DLL文件缺失可能由各种不同的原因导致&#xff0c;比如应用程序安装不正确、病毒感染、或系统文件损坏等。 使用内置的系统文件检查器&#x…

鸿蒙应用布局ArkUI【基础运用案例】

布局基础运用案例 平级导航的复合网格视图 平级导航的复合网格视图常出现在同时展示多种不同内容的界面。 例如&#xff0c;市场类应用作为典型的平级导航&#xff0c;其首页不同板块采用了不同布局能力。 标题栏与搜索栏&#xff1a;因元素单一、位置固定在顶部&#xff0c…

C++ 中重写重载和隐藏的区别

重写&#xff08;override&#xff09;、重载&#xff08;overload&#xff09;和隐藏&#xff08;overwrite&#xff09;在C中是3个完全不同的概念。我们这里对其进行详细的说明 1、重写&#xff08;override&#xff09;是指派生类覆盖了基类的虚函数&#xff0c;这里的覆盖必…

【JAVA SE】初识JAVA

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;JAVA 个人主页&#xff1a;Celias blog~ 目录 ​编辑 一、关于JAVA 1.1 JAVA语言简介 1.2 语言优势 1…

Patch-Wise Graph Contrastive Learning for Image Translation

Patch-Wise Graph Contrastive Learning for Image Translation 图像翻译中的逐块图对比学习 Chanyong Jung1, Gihyun Kwon1, Jong Chul Ye1, 2 Chanyong Jung&#xff0c;Gihyun Kwon&#xff0c;Jong Chul Ye 1, 2 Abstract 摘要 Patch-Wise Graph Cont…

Windows快捷命令

Windows 操作系统提供了大量的快捷命令&#xff0c;用于快速访问系统设置和管理工具。这些命令在各个版本的 Windows 中基本都适用&#xff0c;可以帮助用户快速进入各类管理工具&#xff0c;方便系统的配置和管理。如果你需要使用这些工具&#xff0c;只需按 Win R 键&#x…

win11快速安装mysql数据库系统

win11快速安装mysql数据库系统 1、下载 1.1 打开官网 1.2 向下滚动页面 1.3 进入下载选项 1.4 下载8.0.4 LTS 1.5 开始下载 1.6 下载中 2、解压 大家注意&#xff0c;此时解压后目录是没有data目录的。 3、数据库初始化 3.1 管理员身份打开CMD 开始菜单上&#xff0c;输入…

【漏洞复现】Secnet-智能路由系统弱口令

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统 0x02 漏洞描述 攻击者可直接利用弱口令登录系统 0x03 搜索语法 fofa: title"安网-智能路由系统" || title"智能路由系统" || title"安网科…

代码随想录算法训练营第三十一天|455.分发饼干,376. 摆动序列,53. 最大子序和

455.分发饼干 优先把小饼干分给胃口值小的&#xff0c;或者是把大饼干分给胃口大的。 376. 摆动序列 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int curDiff 0; // 当前一对差值int preDiff …

PostgreSQL扩展之PGroonga:多语言全文搜索

简介 PGroonga 是一个 PostgreSQL 扩展&#xff0c;它增加了基于 Groonga 的全文搜索索引方法。虽然原生的 PostgreSQL 支持全文索引&#xff0c;但它仅限于基于字母和数字的语言。PGroonga 提供了更广泛的字符支持&#xff0c;使其成为 PostgreSQL 支持的语言的超集&#xff…