因为<%!%>中定义的部分会作为jsp生成的java类的类成员。这个时候out还没有define,当然出错。你可以看看你的jsp生成的java源代码,在work目录下。会解决很多问题。

解决方案 »

  1.   

    <%
    void test(){
      System.out.println("this is a test!"); 
    }
    %>
      

  2.   

    <%@page import="javax.servlet.jsp.JspWriter"%>
    <%
    response.setContentType("text/html");
    out.println("this is a test!");
    %>
      

  3.   

    不要直接调用test(); 而是把out作为参数传进去,test(out)就可以了
      

  4.   

    或者你可以学学在servlet里面的写法啊
      

  5.   

    思路是把错误结果返回调用处。
    <%!
    String test(){
      return "this is a test!";
    }
    %>
    ...
    <%
      out.print(test());
    %>
      

  6.   

    是什么文件里的函数块,要是jsp劝你放弃这种念头,jsp是不允许写这种函数快的,要是再servlet里那就需要生成一个out对象,jsp和servlet里调用out是有区别的。