--菜鸟学习jsp之Tomcat处理jsp页面的流程:

   客户请求*.jsp文件,服务器找到此*.jsp文件先将他翻译成*.java文件然此*.java文件编译成*.class文件,最后运行此*.class文件并且拼接成对应的jsp文件响应给客户。

    在jsp中所有的java代码必须出现在scriptlet标签内即:<%! %>、<%%>和<%=%>,其实他们的作用就是告诉服务器如何去翻译jsp中的java。对于任何一个jsp文件会被服务器翻译成如下格式java文件(其中很多的初始化等代码没有写):

 

 

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

 

  public void _jspInit() {
      }

  public void _jspDestroy() {
  }

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

  }
}

        很明显服务器将一个jsp文件翻译成了一个java类,并且自动生成了三个方法,第一个是初始化用的,第二个是在服务器关闭或者jsp内容改变时执行的,第三个就是对客户的响应时执行的。此三个方法都可以直接在jsp文件中进行重写,但是必须写在<%!%>之中,可见此标签就是告诉服务器他里面的内容都是类的属性,学习过java的都知道一个对于一个类他的属性有:成员变量、成员方法、内部类、代码块等,所以在写jsp代码时如果要定义这些内容就应该用<%!%>标签指定。

      当然一般情况下在一个jsp页面中很少去重写这些方法,都是直接写代码,上面说过对客户的响应服务器会调用_jspService方法所以jsp中需要在响应期间执行的代码都必须写在<%%>标签中,可见此标签法所有内容都会被服务器翻译成jspService方法的内容,这也是为什么在<%%>标签中不能定义方法、类、代码块原因(如果你还不知道为什么就先学习下java中方法定义的规则),因此在<%%>标签中一般定义:局部变量、语句等.

      要想将对用户的响应显示在页面上,就必须使用jspWriter的对象out他是一个输出流,他的作用就是向页面输出内容具体的实现是out.writer("")或者out.print("");所以标签<%=%>会被翻译成此输出语句,同时他也是被放到了_jspService方法中。

      最后总结下:在学jsp的过程中不必深究如上代码,只要知道这三个标签干什么用就行了,正确使用就行了。其实在真正的开放中在jsp中出现的会全部是标签,因为所有的代码都由一个一个的标签去表示,这些标签会告诉服务器该如何去生成代码。

    以上只是本菜鸟的学习体会,各位大虾多多指点!