JSP1基本语法

本文详细介绍了JSP的基础知识,包括注释、声明语句、脚本段、表达式、指令元素和动作元素等内容。深入探讨了各种元素的使用方法及注意事项。

1. 注释

隐藏注释:

<%-- 这种是隐藏注释 --%>
  • 增加可读性
  • 顾及系统安全性,用户通过浏览器看不到源代码中的注释
  • 注释写在jsp源码中,但不发送到客户端

显式注释:

<!-- 这种是显示注释(HTML注释) -->
  • 用户可以通过源代码看到显式注释

Java注释:

<%
    //在脚本段的Java代码中可以使用Java的注释方法
    /*
    多行注释也是可以的。
    */
%>

2. 声明语句

声明可以用来定义一个或多个合法的变量和方法,并不输出任何文本到输出流去,声明的变量和方法将在JSP页面初始化时被初始化。

<%! int a=1; %><%--这是声明变量 --%>

<%! 
    public int count(){ 
        return i++;
    }
%><%-- 这是声明方法 --%>

使用声明需要注意:

  • 使用<%! %>方法声明的变量或方法,在编译后会成为成员变量和成员方法。
  • <%! %>声明的成员变量在整个JSP页面都有效,这些变量的内存空间直到服务器关闭后才会释放
  • <%! %>声明的方法也会在整个JSP页面有效,但在该方法内部定义的变量只在该方法内有效
  • 在<% %>中声明的变量为局部变量,并且不能声明方法

区分这两种方法:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>这是第一个JSP程序</title>
</head>
<body>
    <%! int Num=1;%><%--这是全局变量--%>
    <%!
        public int Num(){
            return Num++;
        }
    %><%--这是方法的声明--%>
    
    <%  int count=0;%><%--这是局部变量--%>
    <%count++;%><%--这是代码段--%>
    
    <%
    out.println("Hello,JSP");
    out.println("你好,JSP");
    %><br>
    
    <%--这是备注1 --%>
    <!--这是注释2-->
    <!-- <%=(new java.util.Date()).toLocaleString()%>-->

    <%="您是第"+count+"个客人"%><br>
    <%="您是第"+Num()+"个客人"%><br>
</body>
</html>

方法的声明:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>方法的声明</title>
</head>
<body>
<%=new java.util.Date()%><br>
<p>输入圆的半径</p>
<form action="test2.jsp" method="get">
    <input type="text" name="radius">
    <input type="submit" value="提交">
    <input type="reset" value="重置">
</form>

<%--声明计算面积和周长的算法--%>
<%!double area(double r){
  return  Math.PI*r*r;
}
double perimeter(double r){
    return Math.PI*2*r;
}
%>

<%
    String str=request.getParameter("radius");//获得radius参数
    if(str!=null){
        double r =Double.parseDouble(str);
%>
        <p>圆的面积:<%=area(r)%>
        <p>圆的周长:<%=perimeter(r)%>
<%
     }
%>
</body>
</html>

3. 脚本段

JSP的脚本代码就是一段Java代码,这些代码在请求处理时在服务器端按照顺序执行

String t="这里是代码段"
<% out.println(t) %>

代码段并非一定要完整,例如:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Calendar" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
    if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){
    %>
        早上好
    <%
    }else{
    %>
        下午好
    <%
    }
    %>
</body>
</html>

注意,如果要在脚本段使用“%>”字符,必须写成“%/>”。

并且脚本段内不能定义方法,因为jsp会将脚本段内的代码放进servlet方法内,而方法是不能嵌套定义的。

4. 表达式

表达式在运行后自动转换成字符串,然后插入到表达式所在jsp文件的位置显示。表达式的计算在运行时进行。

<% =new java.utilDate()%>
<%="Hello" %>

应该注意几点:

  • 不能用分号“;”作为表达式的结束符
  • 表达式也能作为jsp的属性值,多个表达式时,顺序是从左到右

    jsp的表达式中没有分号,除非在加引号的字符串部分才使用分号。

    实际上表达式是被转换成out.println()方法中的内容,<%="Hello"%>相当于jsp页面中的<% out.println("Hello");%>

5. 指令元素

jsp的指令元素描述jsp页面转换成jsp容器所能执行的java代码的控制信息。jsp的指令元素独立于jsp页面接受的任何请求,且不产生任何页面输出信息。

jsp中包括page、include、taglib,这三种指令

5.1 page指令

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

page指令用来设定JSP页面的全局属性,该配置作用于整个JSP页面。语法格式为

<%@page 属性="属性值" 属性="属性值"%>。

page指令包含13个属性,如下:

(1) language="java" 用来指明所使用的脚本语言类型

(2) extends="package.class" 用来指定该JSP页面生成的Servlet继承于哪个父类

(3) import 用来指定要导入的Java包

默认导入的包有:
    
    java.lang.*;
        
    java.servlet.*;
        
    java.servlet.jsp.*;
        
    java.servlet.http.*;
        

(4) session="true/false" 用来指定该JSP页面是否可以使用session对象

(5) buffer="none/size kb" 指定是否使用缓冲区

(6) autoFlush="true/false" 指定缓冲区是否自动进行强制输出

(7) isThreadSafe="true/false" 指定该JSP文件是否支持多线程的使用

(8) info="text" 设置该JSP页面的相关信息

(9) errorPage="URL" 指定当该JSP文件发生异常错误时,网页跳转到的能处理此异常的JSP文件

(10) isErrorPage="true/false" 指定该JSP文件是否为能处理异常的JSP文件

(11) contentType="mineType[;charse=characterSet]" 指定该JSP文件的MIME类型及网页编码格式

(12) pageEncoding 指定网页的编码格式

(13) isELIgnored 指定该JSP文件是否支持EL表达式

注意,不论将page指令放在jsp文件的哪个位置,他的作用都是整个jsp页面。

整个jsp页面可以使用多个page指令,但其中的属性只能用一次,除了import

5.2 include指令

include指令用来包含一个静态文件,解析当前页面时,这个文件中的代码会被复制到当前页面中。这个文件可以是jsp页面,html页面,文本文件或一段Java代码。语法格式为

<%@ include file="url"%>

file的属性值被解释为相对于当前jsp文件的URL.

注意:

include指令插入文件的过程时静态的,所以file属性不能时一个变量,也不可以在file所指定的文件后面添加任何参数

使用include指令,那么包含这个文件所执行的结果将会插入到jsp文件中放<%include%>的地方。包含文件被执行,主jsp文件的过程将会被恢复。加载的文件内容将会成为当前网页的一部分

include.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>include指令</title>
</head>
<body>
插入jsp文件:<%@include file="include1.jsp"%>
</body>
</html>

include1.jsp

<!--<%@ page contentType="text/html;charset=UTF-8" language="java" %> -->
<%=new java.util.Date().toString()%>

当插入的文件含有中文时,应该是用page指令防止乱码

5.3 taglib指令

taglib指令用来声明此JSP文件使用了自定义的标签,同时制定所引用的标签库并设置前缀。语法格式为:

<%@ taglib uri="taglibrary's uri" prefix="tagPrefix"%>

uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。

taglibrary:指示前缀将被用于标识在WEV-INF/tags目录下的标签文件。

prefix属性:标签的前缀,区分多个自定义标签。不可以使用保留前缀和空前缀,遵循XML命名空间的命名约定。

6. 动作元素

jsp动作元素和指令元素不同,他是在客户端请求时动态执行的,是通过XML语法格式的标记来实现控制Servlet行为的

语法描述
jsp:include在页面被请求的时候引入一个文件。
jsp:useBean寻找或者实例化一个JavaBean。
jsp:useBean寻找或者实例化一个JavaBean。
jsp:setProperty设置JavaBean的属性。
jsp:getProperty输出某个JavaBean的属性。
jsp:forward把请求转到一个新的页面。
jsp:plugin根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element定义动态XML元素
jsp:attribute设置动态定义的XML元素属性。
jsp:body设置动态定义的XML元素内容。
jsp:text在JSP页面和文档中使用写入文本的模板

6.1 jsp:include

<jsp:include page="相对 URL 地址" flush="true/false" />

动作元素可以包含其他静态或者动态页面

jsp中有两种不同的包含方式:编译时包含和运行时包含:

  • 编译时包含只是将静态文件内容加到JSP页面中,优点是速度快,如<% include file=""%>指令。

  • 运行时包含指被包含的文件在运行时被jsp容器编译执行,的包含就是运行时包含,同时也支持编译时包含

    具体详见网络资料

    jsp会对<% include file=""%>包含的文件进行语法分析,但不会对包含的文件进行语义分析

6.2 jsp:forward

<jsp:forward page="相对 URL 地址" />

jsp:forward动作把请求转到另外的页面。转向的目标可以是静态的HTML页面、JSP页面或Servlet类。
jsp:forward标记只有一个属性page。
test4.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>forward测试</title>
</head>
<body>
<jsp:forward page="test4.1.jsp"/>
</body>
</html>

test4.1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>forward1</title>
</head>
<body>
这是test4.1
</body>
</html>

这时地址栏是test4.jsp,但显示的内容是test4.1.jsp。forward适用于登陆,验证权限之后的跳转

6.3 jsp:param

<jsp:param name="atteibuteName" value="attributeValue"/>

jsp:param主要用来传递参数给JSP程序,而又程序取得参数值,在程序中便是一个变量值。
在使用时必须要设置name属性,表示传递参数的名称,并通过value属性来设置该参数的值。jsp操作元素设置元素属必须加上双引号“”。
取得参数的方法:

request.getParameter("atteibuteName")

jsp:param的操作元素必须配合jsp:include、jsp:forword、jsp:plugin等元素,在加载外部程序或是网页转换的时候,传递参数给另一个jsp程序。

6.4 jsp:useBean、jsp:setProperty、jsp:getProperty

6.4.1 jsp:useBean动作用来加载一个将在JSP页面中使用的JavaBean。

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

  • id指定该JavaBean的实例变量的名称。
  • scope指定该Bean的有效范围。page指只在当前jsp页面有;,request指在任何执行相同请求的jsp文件中使用bean,直到页面执行完;,session指从创建该bean开始,相同session下的jsp中使用该bean;application指从创建该bean开始,相同application下的jsp中使用该bean。
  • class指定Bean的完整包名。

    class属性不可接受动态值,不能是抽象的

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>useBean</title>
</head>
<body>
<jsp:useBean id="clock" class="java.util.Date"/>
<%=clock%>
</body>
</html>

bean属性用于指定bean的名字,可以接受动态值。beanName属性必须与type属性结合使用,不能与class属性同时使用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>beanName</title>
</head>
<body>
<jsp:useBean id="clock" type="java.io.Serializable" beanName="java.util.Date"/>
<%=clock%>
</body>
</html>

6.4.2 jsp:setProperty用来设置已经实例化的Bean对象的属性

有两种用法:

  • 在jsp:useBean元素后面使用jsp:setProperty
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
  • 把jsp:setProperty放入jsp:useBean内部
<jsp:useBean id="myName" ... >
...
   <jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>

这时jsp:setProperty只有在新建Bean实例时才会执行,如果使用现有实例则不执行jsp:setProperty。

属性描述
namename属性是必需的。它表示要设置属性的是哪个Bean。
propertyproperty属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
valuevalue 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。value和param不能同时使用,但可以使用其中任意一个。
paramparam 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>setProperty</title>
</head>
<body>
<jsp:useBean id="clock" class="java.util.Date">
<jsp:setProperty name="clock" property="hours" param="hh"/>
<jsp:setProperty name="clock" property="minutes" param="79"/>
<jsp:setProperty name="clock" property="seconds" param="*"/>
</jsp:useBean>设置属性后的时刻:<%=clock%><br>
现在是:<%=clock.getHours()%>点,
<%=clock.getMinutes()%>分,
<%=clock.getSeconds()%>秒
</html>0

6.4.3 jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。

<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>

不能使用jsp:getProperty检索已经被索引了的属性;能够和JavaBean一起使用jsp:getProperty,但是不能与企业级Bean一起使用

属性描述
name要检索的Bean属性名称。Bean必须已定义。
property表示要提取Bean属性的值

6.4.4 实例

TestBean.java

public class TestBean {
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String userName;
    public String password;
    public int age;
}

register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>register</title>
</head>
<body>
<form method="get" action="regiter.jsp"/>
<table>
    <tr>
        <td>Name:<input type="text" name="userName"></td>
    </tr>
    <tr>
        <td>Password:<input type="password" name="password"></td>
    </tr>
    <tr>
        <td>Age:<input type="text" name="age"></td>
    </tr>
    <tr>
        <td><input type="submit" value="submit"></td>
    </tr>
</table>
</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>regiter</title>
</head>
<body>
<jsp:useBean id="user" scope="page" class="regiter.TestBean"/>
<jsp:setProperty name="user" property="*"/>
regiter success:<br>
Username:<jsp:getProperty name="user" property="userName"/>
Password:<jsp:getProperty name="user" property="password"/>
Age:<jsp:getProperty name="user" property="age"/>
</body>
</html>

6.5 jsp:plugin

jsp:plugin操作元素的功能是在于从jsp网页中加载java applet或javaBean程序组件,与HTML的applet和object标签有着类似的功能。

<jsp:plugin type="bean/applet code="cassFileName>

转载于:https://www.cnblogs.com/lvdandan/p/6738344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值