2514. Remote Debugging JSP ApplicationEclipse and Debugging
Introduce how to remote debug JSP application which is hosted in Tomcat.
In the posting Building Website with JSP and MySQL, we created a JSPTutorial application to manage products. This application is hosted on Tomcat web server, and it uses MySQL for storing data. Suppose there is an issue that the update function is not working. We need to debug the application to figure out what is happening.
2. Setting up MySQL Database
2.1 Creating Connection
In MySQL Workbench, create a new connection to local MySQL database, specify the connection name
2.2 Creating Database and Table
In Query tab of Workbench, execute following sql script to create a new database named
CREATE DATABASE IF NOT EXISTS `jsptutorial`
Create a table named
Product, which contains three columns.
USE `jsptutorial`; CREATE TABLE `Product` ( `ProductId` int(11) NOT NULL AUTO_INCREMENT, `ProductName` varchar(50) DEFAULT NULL, `Price` double NOT NULL, PRIMARY KEY (`ProductId`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
Create initial data.
INSERT INTO `Product` VALUES (1,'Xbox',100),(2,'PS4',400),(3,'iPhone',699);
Run the following script to show all data in table
SELECT * FROM jsptutorial.Product;
3. Setting Up JSP Project
3.1 Getting JSP Project
We will use the same JSP application for Building Website with JSP and MySQL. Download the source files from JSPTutorial on GitHub. Rename it to
JSPDebugging and refactor package names accordingly. The project in Eclipse looks like this.
Build the project, then deploy it to tomcat’s default web folder
1) Create a new folder
jspdeployed under webapps.
2) Copy all of the files from
3) Copy the entire ‘classes’ folder from
4) The final structure of
jspdeployed folder looks like below. All the files for this JSP Tutorial application are deployed.
3.2 Starting Tomcat
Run following command to start tomcat.
Access http://localhost:8080/jspdeployed/productlist.jsp in web browser. You should see three products in the list. Click the Edit button for line 3. Change the product name and price, click ‘Save’ button. Nothing happened, the name and price of the third product are not changed. We need to find out why.
3.3 Restart Tomcat in Debug Mode
First, stop tomcat with following command.
Run followings commands to start tomcat with enabling remote debugging.
$ export JPDA_ADDRESS=8028 $ export JPDA_TRANSPORT=dt_socket $ /usr/local/apache-tomcat-9.0.1/bin/catalina.sh jpda start
4. Debugging in Eclipse
4.1 Creating Debug Configuration
In Eclipse, Run -> Debug Configurations…, create a new ‘Remote Java Application’ named
Remote Debugging. Specify the Host to
localhost and Port to
4.2 Setting Breakpoint
In Eclipse, set breakpoint to line 58 of
ProductDao.java, inspecting the
4.3 Starting Debugging
In Eclipse, click the
Debug As.. button on toolbar and select
In web browser, try to update the third product again, click the Save button.
In Eclipse, you will see the debugging is working now. The breakpoint in
update method is activated.
Step Over button(F6) in the tool bar to step the execution to the next line. Meanwhile, you see the value of variable
query is ‘UPDATE Product SET ProductName = ?, Price = 0
WHERE ProductName = ?’. However, the correct query should be ‘UPDATE Product SET ProductName = ?, Price = 0
WHERE ProductId = ?’. We find the root cause.
Stop debugging, try to fix the bug by replacing
ProductId in the ‘Where’ clause. Compile the project and deploy the new classes into
/webapps/jspdeployed/. Restart tomcat, then try to update the third product again. Refresh the product list page. You will see the product name and price have been updated properly.