I keep three matrices in my OpenGL applications. They are the Model, View and the Projection matrices. All these matrices are sent to the shader using the uniforms and the shader does this.

gl_Position = mProj * mView * mModel * vec4(position, 1.0);

That is, the position is by default in the local object space. Multiplying it with the Model matrix applies the translation, rotation and scaling for that model, and the transformed vertex is now in the world space.

Now the vertex is multiplied by the View matrix, which applies the transformations of the camera, like the camera position and the orientation. Now the vertex will be in the eye space.

Finally the vertex is multiplied with the Projection matrix, applying the effect of either perspective or orthographic, which depends on what I chose to use. Finally after the transformation, the vertex will be in normalized device coordinates (ranging from -1 to +1) and will be rendered by the OpenGL.

Where does the model matrix get it's value from?

The model matrix is by default, an identity matrix. Whenever you want to only transform the entity and not the entire world, you will multiply the transformation matrix with the model matrix and set the result as the new model matrix. This allows you to keep separate attributes for each instance of a model in the scene.

Do I need to reset all model, view and projection matrices inside display() ? i.e every frame?

No you don't. You can create the matrices once, but whenever the value of the matrices change on the client side, that is, your program, you have to update the uniforms in your shader program.

Do I reset mode, view and projection matrices after drawing each object?

No you don't. Usually you will keep one projection and one view matrix, but several model matrices per each object you have in your scene. The projection usually won't change in the entire course of the application, so there is no need to re-update it. The view matrix, is with your camera, so usually it will also be one for the entire scene. The model matrix, however will be different for each object, so you have to update it every frame.

Where do you get your Model matrix values from? i.e what are they generated from?

There are certain formulae which creates those matrices, like the helper method you have above which generates a perspective projection matrix based on the field-of-view and the aspect-ratio of the camera lens. It is hard to explain all those formulae here, so you can see the source code of my TransformUtils class which has such functions.

See the source code for my TransformUtils class on my GitHub repository. It's not completely documented, but I think you can use them.

Hope this helps.