JSP的变量

本文介绍了JSP中两种变量声明的方法及其区别。一种是在<%! %>中声明,这种声明方式使得变量成为servlet的类变量;另一种是在<% %>中声明,这种方式声明的变量为方法变量。通过示例代码展示了这两种声明方式的具体应用。

 

JSP的变量 

 

    jsp 的变量有两声明方法,

    1, 写在 <%!  %>里

    2, 写在 <%  %>里

    注意它们一个有"!" , 另一个没有。它们的区别是:用第一种方法声明的变量将被翻译成 servlet 的类变量,用第二方法声明的变量将翻译成方法变量。如下边所示:

    jsp文件:

<%@ page contentType="text/html;charset=GB2312" %>
<html>
<body>
 <%! int i = 100 ; %>
 <%  int j = 1000 ; %>
 <% out.print( " i=" + i + "; j=" + j ) ; %> </p>
</body>
</html>

    生成的 servlet :

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class test_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

 int i = 100 ;
  private static java.util.List _jspx_dependants;

  public Object getDependants() {
    return _jspx_dependants;
  }

  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

    JspFactory _jspxFactory = null;
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
    PageContext _jspx_page_context = null;


    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html;charset=GB2312");
      pageContext = _jspxFactory.getPageContext(this, request, response,
         null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("/r/n");
      out.write("/r/n");
      out.write("/r/n");
      out.write("<html>/r/n");
      out.write("<body>/r/n");
      out.write("/t");
      out.write('/r');
      out.write('/n');
      out.write(' ');
  int j = 1000 ;
      out.write('/r');
      out.write('/n');
      out.write(' ');
 out.print( " i=" + i + "; j=" + j ) ;
      out.write(" </p>/r/n");
      out.write("</body>/r/n");
      out.write("</html>");
    } catch (Throwable t) {
      if (!(t instanceof SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          out.clearBuffer();
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
      }
    } finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
} 

JSP 页面中,可以使用 JSTL(JSP 标准标签库)中的 `<c:set>` 标签来设置变量,该标签提供了更简洁和灵活的方式来操作变量,尤其是在动态计算值时非常有用。`<c:set>` 标签支持设置变量的值、作用域以及变量名称,能够替代传统的脚本变量声明方式。 ### 使用 `<c:set>` 标签设置变量的基本语法 ```jsp <c:set var="变量名" value="变量值" scope="作用域"/> ``` - `var`:定义变量的名称。 - `value`:指定变量的值,可以是静态值,也可以是 EL 表达式。 - `scope`:变量的作用域,可选值包括 `page`、`request`、`session` 和 `application`,默认为 `page`。 ### 示例:将变量赋值转换为 `<c:set>` 标签形式 假设在 JSP 页面中,原本使用脚本声明变量的方式如下: ```jsp <% String username = "JohnDoe"; int count = 10; %> ``` 可以使用 `<c:set>` 标签替代为: ```jsp <c:set var="username" value="JohnDoe"/> <c:set var="count" value="${10}"/> ``` 如果变量值来源于动态计算或 EL 表达式,`<c:set>` 会更加灵活: ```jsp <c:set var="total" value="${price * quantity}"/> ``` ### 变量作用域的设置 如果希望变量在更广泛的作用域中使用,可以明确指定 `scope` 属性。例如,将变量存储在 `session` 中: ```jsp <c:set var="userRole" value="admin" scope="session"/> ``` 此变量 `userRole` 将在整个会话期间可用。 ### 输出变量值 可以使用 `<c:out>` 标签来输出 `<c:set>` 设置的变量: ```jsp <c:out value="${username}"/> ``` ### 完整示例 ```jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title><c:set> 标签示例</title> </head> <body> <c:set var="username" value="JohnDoe"/> <c:set var="count" value="${10}"/> <c:set var="userRole" value="admin" scope="session"/> 用户名:<c:out value="${username}"/><br/> 计数器:<c:out value="${count}"/><br/> 用户角色:<c:out value="${userRole}"/> </body> </html> ``` 通过这种方式,可以在 JSP 页面中更加清晰地管理变量,同时避免使用传统的脚本代码块,提升代码的可读性和可维护性[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值