I suspect that you probably made the understandable beginner mistake of thinking that a webapp is a "program". That is, something you start, it runs and eventually it stops.
Webapps don't work that way. A JEE webapp is (strictly speaking) a collection of items stored in a specially-formatted JAR (which is itself a specially formatted ZIP). In actual practice, often when a webapp is deployed to a webapp server, the webapp is unzipped ("exploded"). For Tomcat, the WAR goes into the TOMCAT_HOME/webapps directory and the name of the WAR is used by default as the webapp context path, to distinguish that webapp from other webapps that migh also be deployed there. DON'T mistake a WAR structure for a file share. A WEB server is NOT a FILE server! URLs may look a lot like Unix filesystem paths, but they don't always act like filesystem paths and you cannot ever simply do open/close/read/write/delete operations on them from a web client,
WARs are more like Windows DLLs, then, than Windows executables.
To "run" a webapp, then, first you have to define one or more instances of the Servlet class or subclass (typically you subclass HttpServlet). I'll ignore JSPs, as they have their own mechanisms not important here.
Then you have to map a URL sub-path ("resource path") to that servlet class. Originally this was done by defining a logical servlet ID mapped to a path plus the same logical servlet mapped to a fully-qualified servler classname in the WEB-INF/web.xml file, but these days, there's an annotation that you can place in the source code for your servlet to make that task automatic. As I said, a URL path is NOT a "filesystem" path, so I can make a URL like "http://www.mysite.com:8080/mywebapp/foo" and it could use that mapping to reference the WAR resource /WEB-INF/classes/com.mysite.myapp.stuff.servlets.MyFoo.class".
So when a remote user sends Tomcat that URL, Tomcat will use the "/mywebapp" context path to local your WAR, then look at the web.xml data to resolve the resource path "/foo" to class com.mysite.myapp.stuff.servlets.MyFoo.class and Tomcat will look for its service() method and invoke it, passing the digested URL request data as well as providing response object to send it to. And no, webapps have no "main()" method. They don't run like apps, but are instead called from Tomcat.
Usually you don't subclass Servlet. The HttpServlet subclass overloads Servlet with a number of useful methods like doGet() and doPost(). The overloaded service() method looks at the incoming request to see if it's a GET, POST, DELETE, or whatever invokes the appropriate HttpServlet processing method.
Also be aware that when you type a URL in the navigation control of a web browser. that URL is always set as a GET request (valid request types are defined in an Internet standards document called an RFC). To make a POST, you have to submit an HTML form defined with a method type of "POST" or use an HTTL utility app such as "curl".
So, in short, you cannot define just any only processing method in a servlet and expect it to work. Tomcat won't know to even look for a "protected void processRequest(HttpServletRequest request, HttpServletResponse response)" and noy just because it's protected. You'd have to name that method "doGet()" to invoke it from a browser navigation, or doPost() to invoke is from an HTML FORM whose method="POST".