求jsp文件中的<%!a=1;%>与<%a=1;%>的区别??他们的原理,以及在Sevlet中代码意义! 求高手!!!
不是JavaScript中的  越详细越好   谢谢

解决方案 »

  1.   

    呵呵,类型都没有,题目错误的。
    <%! %>声明的变量,在jsp页面转换为servlet类时,
    会作为该类的实例变量或类变量,慎用
      

  2.   

    如果是
    <%!int a=1;%>的话,会在jsp对应的类里定义一个成员int a=1;

    <%int a=1;%>则是在jsp对应的_jspService方法中定义一个局部变量a可以根据这个去分析你的问题.
      

  3.   

    <%! %> 这个是声明。 就是写在这里面的 是 jsp转成servlet 后的 成员属性 成员方法。
    <%= %> 这个是表达式。  输出变量等。 和 out.println()   out.print()  out.write() 作用都差不多,大同小异 表达式运用更灵活。
      

  4.   

    哦 看错了 <% %> 这个是小脚本。 你可以看翻译后 work 目录下的java文件 实际上除了声明的内容 都在一个方法内。
    写在小脚本的内容 是 原样的抽取到java文件中,其他的 都是 out.print()  输出的。
      

  5.   

    <%!%>这个是脚本元素中的声明,声明脚本元素用于声明字jsp页面的脚本语言中使用的变量和方法。
    生命必须是完整的声明语句,遵照Java语言的语法。声明不会在当前的输入流中产生任何输出。<%%>是脚本段,它是在请求处理期间要执行的java代码段。脚本段可以产生输出,并竟输出发送到客户端,也可以是一些流程控制语句。在脚本段中可以声明本地变量,在后面的脚本段中一样可以使用该变量
    后台原理:
    利用<%!%>声明的变量,在JSP容器转换JSP页面为Servlet类时,将作该类的实例变量或者类变量(声明时使用了static关键字),在多用户并发访问时,将导致线程安全的问题,除非你确认是单用户访问或者变量是只读的。(这里不讨论线程安全的问题)而<%%>,在JSP容器转换JSP页面为Servlet类时,页面中的代码会按照代码段中出现的次序,
    依次被转换为_jspService()方法中的代码,在脚本段生命的变量,将作为_jspService()方法中的本地变量,
    因此脚本段中的变量是线程安全的
      

  6.   


    说得很好,同样在servlet中声明的全局变量也是危险的吧?
      

  7.   

    建议使用<%= %>比较好,jsp页面定义变量和方法时尽量少使用全局的。
    不过脚本<% %>在页面的使用也不要过于频繁,一般要控制每个<% %>内5-7行代码!