JSP学习(二)------JSP基础知识详解

本文详细介绍了JSP的基本概念和技术细节,包括脚本元素、小脚本、表达式、注解、指令及动作等内容,并通过具体示例加以说明。此外还介绍了JSTL的使用方法及其常见标签。

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

JSP脚本元素

  • JSP声明
    声明是用来在jsp页面中声明变量或定义方法的语句,以<%开头,以%>结尾的标签,举例如下:
<% int count=0;
   String str="hello"; %>
  • JSP小脚本
    JSP小脚本简单说就是纯粹的java代码片段,是以<%开头,以%>结束的标签,举例如下:
<% count++; %>
  • JSP表达式
    语法结构为:
<%= expression %>

JSP表达式中的元素将会被自动转化成String类型,可以理解为引用一个变量的值,它将会被嵌入在JSP中进行显示,例如:

<html> 
<head><title>A Comment Test</title></head> 
<body>
<p>
   Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body> 
</html> 

ps:JSP表达式的%和=之间不能有空格,并且不能以;结束
JSP注解语法为:

<%-- This is JSP comment --%>

JSP指令

语法结构:

<%@ directive attribute="value" %>

JSP有三种类型的指令标签,每个指令能影响servelt类的整体结构,如下图所示:

每中类型的指令均含有多种的属性(attribute),下面将对每种类型指令的属性分别介绍

  • page类型常用指令表:
    这里写图片描述

  • include类型有两种形式,分别是page和file,如下所示:

<%@ include file=”relativeURI ”%>
<%-- flush必须为truefalse为缺省值--%>
<jsp:include page=”relativeURI ” flush=”true”/>

file是将指定的文件进行编译并在当前页面转换成servlet之前融合进当前的页面,即在当前页面还没开始生成之前,比如一些静态文件header.jsp
page 在请求处理阶段执行,让您将文件插入正在生成的页面
注意:file属于JSP指令,page属于JSP动作
- taglib类型
JSP通过这个类型引入标准标签库,可以简化我们对代码的编写

JSP动作

  • include(讲解见上)
  • useBean
    标签表示用来在JSP页面中创建一个bean实例并指定它的名字以及作用范围(不写默认page范围)
    语法结构:
<%-- 最简单的语法 --%>
<jsp:useBean id="name" class="package.class" />
<%-- 完整语法 --%>
<jsp:useBean id="name" scope="page | request | session | application" typeSpec />
<%-- 其中typeSpec有以下几种可能的情况:--%>
class="className" | class="className" type="typeName" | beanName="beanName" type="typeName" | type="typeName"

注意:必须使用class或type,而不能同时使用class和beanName。beanName表示Bean的名字,其形式为“a.b.c”

  • setProperty
    该动作设置一个bean的属性,在这个动作之前,该bean必须存在,举例
<html>
<head>
<title>Using JavaBeans in JSP</title>
</head>
<body>
<center>
<h2>Using JavaBeans in JSP</h2>

<jsp:useBean id="test" class="action.TestBean" />
<%-- value和param必须有一个,有区别 --%>
<jsp:setProperty name="test" 
                    property="message" 
                    value="Hello JSP..." />

<p>Got message....</p>

<jsp:getProperty name="test" property="message" />

</center>
</body>
</html>

前提必须有一个bean

/* File: TestBean.java */
package action;

public class TestBean {
   private String message = "No message specified";

   public String getMessage() {
      return(message);
   }
   public void setMessage(String message) {
      this.message = message;
   }
}
  • getProperty
    使用getProperty动作将检索一个给定的属性的值,并将其转换为字符串,并最终将其插入到输出,示例如上
  • forward
    终止当前页面的动作,将请求转发给另一个资源,如静态页面,另一个JSP页面或Java Servlet
    简单语法如下:
    <jsp:forward page="Relative URL" />
    示例如下:
    date.jsp
    <p>
    Today's date: <%= (new java.util.Date()).toLocaleString(
    </p>

    main.jsp
<html>
<head>
<title>The include Action Example</title>
</head>
<body>
<center>
<h2>The include action Example</h2>
<jsp:forward page="date.jsp" />
</center>
</body>
</html>
  • plugin
    plugin动作是用来插入Java组件到一个JSP页面
  • element、attribute、body
    这三个动作来动态定义的XML元素
  • text
    该动作可以用来写在JSP页面和文档模板文本

JSTL

JSTL是JSP的标准标签集合,里面包括了核心标签(c),格式化标签(fmt),数据库标签(sql),XML标签(x)以及自定义标签,在运用JSTL之前,我们需要先导入jstl、standard JAR包,pom.xml导入方式如下:

<!--引入JSTL标签库-->
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>javax.servlet.jsp.jstl-api</artifactId>
      <version>1.2.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>

下面我只演示c标签的示例:

<%--
  Created by IntelliJ IDEA.
  User: 罗浩
  Date: 2017/9/16
  Time: 16:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>JSTL demo</title>
</head>
<body>

<c:out value="${'JSTL demo!'}"/>

<c:set var="salary" scope="session" value="${2000*2}"/>
<p>Before Remove Value: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>After Remove Value: <c:out value="${salary}"/></p>

<c:catch var ="catchException">
    <% int x = 5/0;%>
</c:catch>

<c:if test = "${catchException != null}">
    <p>The exception is : ${catchException} <br />
        There is an exception: ${catchException.message}</p>
</c:if>

<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
    </c:forEach>

    <c:forTokens items="Zara,nuha,roshy" delims="," var="name">
      <c:out value="${name}"/><p>
    </c:forTokens>


</body>
</html>

访问结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值