JSP 基本语法

JSP 注释

<%-- 注释内容 --%>

与 JSP 注释形成对比的是 HTML 注释:

<!-- 注释内容 -->

上述两种注释都可用在 JSP 页面中,唯一的区别是 HTML 的注释可以通过源代码查看到,但 JSP 的注释是无法通过源代码查看到,即 JSP 注释不会被发送到客户端。

JSP 声明

JSP 声明用于声明变量和方法。声明的变量和方法会转换成对应 Servlet 的成员变量或成员方法。

JSP 声明的语法板式如下:

<%! 声明部分 %>

注意:

由于 JSP 声明语法定义的变量和方法对应于 Servlet 类的成员变量和方法,所以 JSP 声明部分定义的变量和方法可以使用 private、public 等访问控制符修饰,也可使用 static 修饰,将其变成静态变量和静态方法。但不能使用 abstract 修饰声明部分的方法,因为抽象方法将导致 JSP 对应的 Servlet 变成抽象类,从而导致无法实例化。

输出 JSP 表达式

<%=表达式%>

输出表达式语法后不能有分号

JSP 脚本

<%
    脚本内容(可以放置任何可执行语句)
%>

JSP 脚本将转换成 Servlet 里 _jspService 方法的可执行代码。这意味着在 JSP 脚本部分也可以南明变量但在 JSP 脚本部分声明的变量是局部变量,不能使用 private、public 等访问控制符修饰,也不可以使用 static 修饰。

注意:

实际上不仅 JSP 脚本部分会转换成 _jspService 方法里的可代码,JSP 页面里的所有静态内容都将由 _jspService 方法里输出语句输出。
由于 JSP 脚本将转换成 _jspService 方法里的可挨靠代码,而 Java 语法不允许在方法里定义方法,所以 JSP 脚本里不能定义方法。

JSP 的 3 个编译指令

JSP 的编译指令是通知 JSP 引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。

常用的编译指令有如下三个:

  • page:该指令是针对当前页面的指令
  • include:用于指定包含另一个页面
  • taglib:用于定义和访问自定义标签

编译指定的语法格式如下:

<%@ 编译指定名 属性名="属性值"···%>

page 指令

page 指令通常位于 JSP 页面的顶端,一个 JSP 页面可以使用多条 page 指令。page 指令的语法格式如下:

<%@ page
    [language="java"]
    [extends="package.class"]
    [import="package.class|package.*,..."]
    [session="true|false"]
    [buffer="none|8kb|size kb"]
    [autoFlush="true|false"]
    [isThreadSafe="true|false"]
    [info="text"]
    [errorPage="relativeURL"]
    [contentType="mimeType[;charSet=characterSet]"|"text/html;charSet=utf-8"]
    [pageEncoding="utf-8"]
    [isErrorPage="true|false"]
%>

page 指令相关属性说明:

language
声明当前 JSP 页面使用的脚本语言的各类,因为页面是 JSP,该属性的值通常都是 java。该属性的默认值也是 java,所以通常无须设置。
extends
指定 JSP 页面编译所产生的 Java 类所继承的父类,或所实现的接口。
import
用来导入包,必须使用全限定类名。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*。
session
设定这个 JSP 页面是否需要 HTTP Session。默认为 true。
buffer
指定输出缓冲区的大小。输出缓冲区的 JSP 内部对象:out 用于缓存 JSP 页面对客户端浏览器的输出,默认值为 8kb,可以设置为 none,也可以设置为其他值,单位为 kb。
autoFlush
当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为 true 时为正常输出;如果设置为 false,则会在 buffer 溢出时产生一个异常。
info
设置该 JSP 程序的信息,也可以看做其他说明,可以通过 Servlet.getServletInfo() 方法获取该值。如果在 JSP 页面中,可直接调用 getServletInfo() 方法获取该值。
errorPage
指定错误处理页面。如果本页面产生了异常或者错误,而该 JSP 页面没有对应的处理代码,则会自动调用该属性所指定的 JSP 页面,该页面须指定 isErrorPage 属性为 true。 因为 JSP 内建了异常机制支持,所以 JSP 可以不处理异常,即使是 checked 异常。
isErrorPage
设置本 JSP 页面是否为错误处理程序。默认为 false。如果该页面是错误处理页面,则须指定 idErrorPage 属性为 true。
contentType
用于设定生成网页的文件格式和编码字符集,即 MIME 类型和页面字符集类型,默认的 MIME 类型是 text/html;默认的字符集类型为 ISO-8859-1。
pageEncoding
指定生成网页的编码字符集。

include 指令

使用 include 指令可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句(如果有的话)。这是个静态的 include 语句,它会把目标页面的其他编译指令也包含进来,但动态 include 则不会。

include 既可以包含静态的文本,也可以包含动态的 JSP 页面。静态的 include 编译指令会将被包含的页面加入本页面,融合成一个页面,因此被包含页面甚至不需要是一个完整的页面。

include 编译指令的方法如下:

<%@ include file="relativeURLSpec"%>

如果被嵌入的文件经常需要改变,建议使用 <jsp:include> 操作指令,因为它是动态的 include 语句。

注意:

静态包含还会将被包含页面的编译指令也包含进来,如果两个页面的编译指令冲突,那么页面就会出错。

JSP 的 7 个动作指令

动作指令和编译指令不同,编译指令是通知 Servlet 引擎处理消息,而动作指令只是运行时的动作。编译指令在将 JSP 编译成 Servlet 时起作用;而动作指令通常可替换成 JSP 脚本,它只是 JSP 脚本的标准化写法。

JSP 动作指令主要有如下 7 个:

  • jsp:forward:执行页面转向,将请求的处理转发到下一个页面
  • jsp:param:用于传递参数,必须与其他支持参数的标签一起使用
  • jsp:include:用于动态引入一个 JSP 页面
  • jsp:plugin:用于下载 JavaBean 或 Applet 到客户端执行
  • jsp:useBean:创建一个 JavaBean 实例
  • jsp:setProperty:设置 JavaBean 实例的属性值
  • jsp:getProperty:输出 JavaBean 实例的属性值

forward 指令

forward 指令用于将页面响应转发到另外的页面。既想尽转发到静态的 HTML 页面,也可憎转发到动态的 JSP 页面,或者 转发到容器中的 Servlet。

JSP 的 forward 指令的格式如下:

<!-- JSP 1.0 -->
<jsp:forward page="relativeURL|<%=expression%>"/>

<!-- JSP 1.1 + -->
<jsp:forward page="relativeURL|<%=expression%>">
[
    <jsp:param name="" value=""/>
    ...
]
</jsp:forward>

从 JSP 1.1 规范开始,增加了转发时增加额外的请求参数的功能,增加的请求参数可通过 HttpServletRequest.getParamter() 方法获取。

<jsp:forward> 指令并没有重新向新页面发送请求,它只是完全采用了新页面来对用户生成响应,即请求依然是一次请求,所以:

  • 执行 forward 指令转发时,用户请求的地址(浏览器地址栏的 URL)不会发生改变
  • 执行 forward 指令转发时,客户端的请求参数不会丢失

include

include 指令是一个动态的 include 指令,也用于包含某个页面,它不会导入被 include 页面的编译指令,仅仅将被导入页面的 body 内容插入本页面。

JSP 的 include 指令的语法格式如下:

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

<jsp:include page="relative|<%=expression%>" flush="true">
    <jsp:param name="parameterName" value="parameterValue"/>
</jsp:include>

flush 属性用于指定输出缓存是否转移到被导入文件中。如果指定为 true,则包含在被导入文件中;如果指定为 false,则包含在原文件中。对于 JSP 1.1 及更旧的版本,只能设置为 false。默认值为 false。

总结:

  • 动态导入和静态导入的区别
    • 静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体 Servlet;而动态导入则在 Servlet 中使用 include() 方法来引入被导入页面的内容
    • 静态导入时被导入页面的编译指令会起作用;而动态导入时被导入页面的编译指令则失去作用,只是插入被导入页面的 body 内容
    • 动态导入还可以增加额外的参数
  • forward 和 include 的异同
    • 两者都是采用方法来引入目标页面。通过查看 JSP 页面所生成的 Servlet 代码得出:forward 指令使用 forward() 方法来引入目标页面,而 include 指令则使用 include() 方法来引入目标页面
    • 执行 forward 时,被 forward 的页面将完全替换原有页面;而执行 include 时,被 include 的页面只是插入原有页面。

useBean、setProperty、getProperty

这三个指令都是与 JavaBean 相关的指令,其中 useBean 指令用于在 JSP 页面中初始化一个 JavaBean 实例;setProperty 指令用于为 JavaBean 实例的属性设置值;getProperty 指令用于输出 JavaBean 实例的属性。

useBean 的语法格式如下:

<jsp:useBean id="name" class="className" scope="page|request|session|application"/>

说明:
id 属性是 JavaBean 的实例名,class属性确定 JavaBean 的实现类。scope 属性用于指定 JavaBean 实例的作用范围,该范围有以下 4 个值:

  • page:该 JavaBean 实例仅在该页面有效
  • request:该 JavaBean 实例在本次请求有效
  • session:该 JavaBean 实例在本次 session 内有效
  • application:该 JavaBean 实例在本应用内一直有效

setProperty 指定的语法格式如下:

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

说明:
name 属性确定需要设定 JavaBean 的实例名;property 属性确定需要设置的属性名;value属性则确定需要设置的属性值。

getProperty 指定的语法格式如下:

<jsp:getProperty name="BeanName" property="propertyName"/>

说明:
name 属性确定需要输出的 JavaBean 的实例名;property 属性确定需要输出的属性名。

注意:
对于 setPorperty 和 getProperty 指令,JavaBean中是否真正定义了对应字段并不重要,因为其底层调用的是 getter 和 setter,所以,要使用这两个指令进行赋值和取值,在 JavaBean 中必须提供对应字段的 getter 和 setter。

plugin

plugin 指令用于下载服务器端的 JavaBean 或 Applet 到客户端执行。由于程序在客户端执行,因此客户端必须安装虚拟机。

实际由于现在很少使用 Applet,而且就算要使用 Applet,我们完全可以使用支持 Applet 的 HTML 标签,所以 jsp:plugin 标签的使用场景并不多,此处不做详细介绍。

param

param 指令用于设置参数值,这个指令本身不能单独使用,因为单独的 param 指令没有实际意义。param 指令可以与以下三个指令结合使用:

  • jsp:include
  • jsp:forward
  • jsp:plugin

param 指令的语法格式如下:

<jsp:param name="paramName" value="paramValue"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答关于 JSP 基本语法登录程序的问题。 首先,您需要创建一个 JSP 文件,接着在该文件中编写以下代码: ``` <html> <head> <title>登录页面</title> </head> <body> <h2>用户登录</h2> <form action="login.jsp" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"/></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="登录"/></td> </tr> </table> </form> </body> </html> ``` 这段代码会生成一个简单的登录表单,其中包括用户名和密码输入框以及一个登录按钮。接着,您需要创建一个名为 "login.jsp" 的 JSP 文件,用于处理用户提交的表单数据。 在 "login.jsp" 文件中,您可以编写以下代码: ``` <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String username = request.getParameter("username"); String password = request.getParameter("password"); if(username.equals("admin") && password.equals("admin123")) { out.println("登录成功!"); } else { out.println("用户名或密码错误!"); } %> ``` 在该代码中,首先使用 request.getParameter() 方法获取用户在登录表单中输入的用户名和密码。然后通过一个 if-else 语句判断用户名和密码是否正确,正确则输出 "登录成功!",不正确则输出 "用户名或密码错误!"。 希望这个简单的 JSP 基本语法登录程序能够帮助到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值