J2ee学习:JSP脚本、声明、表达式

jsp脚本:在<% %>里插入Java代码,每一句都需要;结束。

    语法:<% ***java代码*** %>

脚本的本质就是把在第一次编译jsp页面生成一个servlet类的字节码文件时,把代码插入到其中的_jspService()方法中;

例如:

  .html: 

<%
   boolean flag=true;
   String name="Jerry";
%>
<%  if(flag){  %>
 Hello <%=name %>
<%}else{ %>
byebye
<% } %>

编译后的.java

      boolean flag=true;
      String name="Jerry";
      out.write('\r');
      out.write('\n');
      out.write('	');
if(flag){
      out.write("\r\n");
      out.write("\t Hello ");
      out.print(name );
      out.write("\r\n");
      out.write("\t ");
}else{ 
      out.write("\r\n");
      out.write("\t byebye\r\n");
      out.write("\t ");
 } 

JSP声明:允许用户定义Servlet中的变量、方法 

  语法:<%!code %>

示例:

<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<title>声明示例</title>  
</head>  
<!-- 下面是JSP声明部分 -->  
<%!  
    //声明一个整型变量  
    public int count;  
  
    //声明一个方法  
    public int add(int a,int b) {  
        return a+b;  
    }%>  
<body>  
    <%  
        //将count的值输出后再加1  
        out.println(count++);  
    %>  
    <br />  
    <%  
        //使用add()方法算出和  
        out.println(add(8,9));  
    %>  
</body>  
</html>

声明的本质:就是将声明的变量和方法,作为转译后的Servlet类的变量和方法。

注意
     现象:  打开多个浏览器, 甚至可以在不同的机器上打开浏览器来刷新改页面, 将发现所有访问客户端访问的count值是连续的, 即所有的客户端共享了同一个count变量。    
     原因:  JSP页面会编译成一个Servlet类, 每个Servlet在容器中只有一个实例(单例模式); 在JSP中声明的变量是Servlet中的成员变量,成员变量只在创建时初始化, 该变量的值将一直保存, 直到实例销毁。


JSP表达式:是对数据的表示,系统将其作为一个值进行计算

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

语法:<%=variable%> 或者 <%=user.getName() %>

本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出。这样如果user.getName()的返回值是"liky", 那么实际上在servlet中就将转换成out.print("liky");

所以在表达式中出现的方法,必须要有返回值。

<%! String language = "JSP" %>
<h1>This is my <%=language %> page</h1>


脚本和声明变量的对比:

(1) private, public等访问控制符:

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

脚本: 脚本中声明的变量都是_jspService()函数中的局部变量,所以是不能使用private,public等访问控制符的。

(2)方法声明


声明: 在声明中,可以声明方法, 因为实际是在声明Servlet类的方法;

脚本: 在脚本中,不可以声明方法,因为在Java的_jspService()的方法中是不能声明的方法。


(3) 编译结果

声明: 将声明的变量和方法,作为Servlet类的变量和方法。

脚本: 将代码插入到Servlet的_jspService()方法中。


参考博客:https://blog.csdn.net/wu_cai_/article/details/51480692


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值