This is my JSP page.

   <%
    int a = 10;
    %>
    <%
    out.print(a++);
    %>
   

    使用Java脚本输出a的值:  <%=a%>
   

        <%!
    int a = 100;
    public void fun1() {
        System.out.println(a);
    }
       %>
    <%
    out.print(this.a++);
    fun1();
    %>
 
Baidu
sogou


当第一次访问index.jsp后,服务器会将index.jsp翻译成对应的Java文件,文件名为index_jsp.java。该文件存放的目录如图1-2所示:

图1-2 Java文件所在目录
由图1-2可知,jsp编译后的Java文件都存放在tomcat安装目录的work/Catalina/localhos目录中,其中Example15是项目名称。
找到文件所在的目录,点击此处  查看index_jsp.java文件。下面来分析该文件的代码,如下所示:
(1)在index.jsp文件中使用<%!%>脚本声明了成员变量和成员方法,它们在index_jsp.java中的位置如图1-3所示:

图1-3 成员所在位置
由图1-3可知,该java文件的类名就是index_jsp,它继承了HttpJspBase类,这个类是Tomcat定义的类。该类实现了Servlet接口,因此index_jsp类也是Servlet类。在index_jsp类的成员位置定义了成员变量a,值为100,定义了成员方法fun1()。
(2)接着看index_jsp类的service()方法,如图1-4所示:

图1-4 service方法
由图1-4可知,在index_jsp类中,service()方法的名字是_jspService。我们知道jsp有九大内置对象,我们可以由图1-4看出,在_jspService()方法中,定义了6个变量,分别是session,application,config,out,page,pageContext。由于在_jspService()方法中定义了,因此再jsp页面中我们可以直接使用这些变量,另外,其他三个内置对象:request、response是做为参数传递给了_jspService()方法,exceptionn在后面我们会讲解。
(3)每次一请求,服务器都会调用_jspService()方法,那么浏览器中显示的页面信息必然和该放方法有关,下面我们来了解如何将页面中的信息显示在浏览器,如图1-5所示:

图1-5 输出页面信息
图1-5所示中,index.jsp页面中<%%>里面的代码在index_jsp.java文件中出现的位置是_jspService()方法中,并且按原样显示,而其他的HTML代码都是以字符串的形式通过out对象调用write()方法输出到浏览器端。其中:

<%= basePath%>被out.print(basePath)方法输出在浏览器端。out对象的writer()方法和print()方法没有什么区别,这样用是为了区别HTML代码和Java代码的输出。
(4)下面来看在jsp中使用for循环,在index_jsp.java中是如何显示的,如图1-6所示:

图1-6 for循环
由图1-6可知,在for循环中,使用out.write()方法将HTML代码输出,对应在页面中的代码如下所示:
<%
    for(int i = 0; i < 10; i++) {
%> 
   
       张三
       29
   
<% } %>
(5)在_jspService()方法中,有一个异常处理,如图1-7所示:

图1-7 异常处理
当执行_jspService()方法过程中,出现了异常,那么图1-7中的代码就会捕获该异常,并进行处理。出现异常之前的代码不会被输出在浏览器端,服务器会给浏览器端响应500状态码。并且地址栏地址不变,可以理解为服务器在做转发,我们知道在进行转发时,response响应输出流中的信息会被清空,因此之前的向response缓冲区存放的信息不会显示在浏览器端。

本文版权归澳门大阳城APP入口Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:澳门大阳城APP入口Java培训学院
首发:http://www.itcast.cn/javaee

最新资讯

相关阅读

0 分享到:

Java高级软件工程师课程javaee

Python大数据课程python

web前端课程全薪升级V8.5web

AI+设计课程design

大数据培训班cloud

软件测试培训课程test

c

新媒体运营培训课程netmarket

产品经理培训课程pm

linux培训班Linux

影视制作培训movies

智能机器人开发robot

电商视觉设计uids

人工智能培训课程Python

集成电路应用开发(嵌入式)培训课程jdbc

北京校区

    在线咨询 我要报名
    和我们在线交谈!
    Baidu
    sogou