
1.2.2 IDEA动态调试程序
1.IDEA运行Java Web应用
在“New Project”界面选中“Java”→“Web Application”,单击“Next”按钮,进入下一步,创建项目如图1-38所示。

图1-38 创建项目
在“Project name”中输入自定义的名称,单击“Finish”按钮完成项目的创建,如图1-39所示。

图1-39 添加项目名称
在Web目录中编辑index.jsp文件,内容为连接数据库并通过Web端进行查询,如图1-40所示。

图1-40 编辑index.jsp
代码编写后配置Web服务器,单击右上角“Add Configuration”进行配置,依次单击“+”号,选择“Tomcat Server”→“Local”,如图1-41所示。

图1-41 选择Web服务器
在弹出的配置页面中,输入自定义的Tomcat Server的名称“Javaweb”,然后单击“Configure”对Tomcat Home进行配置,Tomcat Home就是本机Tomcat的Home目录,如图1-42所示。

图1-42 配置Tomcat路径
再然后单击“Deployment”选项卡,单击左下角的“+”号,选中“Artifact”选项,单击“OK”按钮,如图1-43所示。

图1-43 添加Artifact
配置完成后左上角“Javaweb”的“×”号消失,添加Artifact结果如图1-44所示。至此,“Tomcat Web”应用就配置完成,下面就可以运行“Java Web”程序了。

图1-44 添加Artifact结果
单击“Run”按钮,就会调用Tomcat自动运行jsp代码,如图1-45所示。

图1-45 运行jsp代码
运行后的结果如图1-46所示,显示相关的界面,这就是利用IDEA运行Java Web应用的整个过程。

图1-46 运行结果
2.IDEA动态调试基础
IDEA动态调试Java Web程序相对于Eclipse要简单很多,第一步也是要设置断点,然后开启debug模式,触发调试除了使用IDEA的debug按钮外(跟Eclipse类似),Java Web应用还可以通过浏览器的访问触发调试。
(1)设置断点选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可,看到行号处有红点说明断点设置成功,如图1-47所示,说明在第7行f1()函数处设置了断点。

图1-47 设置断点
(2)开启调试会话,单击右上角的调试按钮将进入调试模式,此时图标将会出现绿色的小点亮,便说明已成功开启了调试模式,如图1-48所示。

图1-48 开启调试后的效果
进入调试后IDEA下方出现Debug方法调用栈区的视图。在这个区域中显示了程序执行到断点处所调用过的所有方法,程序由下到上依次被调用,此案例main方法在f2方法的下面,说明main方法比f2方法调用的时间要早。红色框中表示的是现在调试程序停留的代码行,在方法f2()中,程序的第7行如图1-49所示。
接下来就进行调试,这里涉及几种不同的方式。
Step Over:按此按钮调试程序会向下执行一行,如果当前行调用了其他方法,会执行完成此方法后进入到下一行,如图1-50所示。
目前断点在f1(),如果执行此操作,程序会先执行f1()函数,然后再向下执行一行到第8行,如图1-51所示。

图1-49 程序调用顺序

图1-50 单击Step Over按钮

图1-51 单击Step Over的结果
Step Into:执行此操作程序会向下执行一行,如果该行有自定义方法,则进入自定义方法中执行,但是不会进入官方类库的方法,如图1-52所示。

图1-52 单击Step Into按钮
目前断点在f1(),如果执行此操作,程序会进入f1()函数中,执行到第3行,如图1-53所示。

图1-53 单击Step Into结果
Force Step Into:该操作与Step Into类似,也会向下执行一行,但是该操作不论是自定义还是官方方法都会进入执行,如图1-54所示。
“System.out.println("f2")”这是系统函数,如果执行“Step Into”操作,程序不会进入此函数中。但是执行“Force Step Into”操作程序会进入println()系统函数中,如图1-55所示。

图1-54 单击Force Step Into结果

图1-55 断点进入println()系统函数中
Step Out:如果通过前面的操作进入到某个方法中,但发现此方法有问题,需要跳出返回就可以执行“Step Out”操作,执行完此操作后,首先会将当前的方法运行完,然后再跳出,如图1-56所示。

图1-56 单击Step Out按钮
Drop Frame:执行完成该操作后,程序将返回到当前方法的调用处重新执行,并且所有上下文变量的值也会初始化,如图1-57所示。
(3)设置变量值,IDEA可以对变量值进行设置,选择变量,用鼠标右键单击“Set Value”,就可以对变量的值进行修改,如图1-58所示,可以将变量的c的值由1设置为3。

图1-57 单击Drop Frame按钮

图1-58 设置变量值
3.IDEA动态调试Java Web程序
通过IDEA动态调试Java Web程序的步骤如下。
第一步设置断点,在39行处双击鼠标两次设置断点,如图1-59所示。

图1-59 设置断点
第二步单击“Debug”,会有个绿色的小点亮,这样就开启了debug模式,如图1-60所示。
第三步直接使用浏览器访问http://localhost:8080/WebApp_war_exploded/index.jsp?id=1就会自动触发调试。浏览器会一直转圈,说明请求没有到达服务器,一直在等待响应,命中断点后的效果如图1-61所示。
在IDEA中看到程序运行到了断点处,也可以看到id的值为1,这样程序就已经开始动态调试了,单步调试分析相关变量值及代码的逻辑就可以了,如图1-62所示。

图1-60 单击Debug

图1-61 命中断点后的效果

图1-62 调试页面