aspose file tools*
The moose likes Servlets and the fly likes Help with MVC implementation Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Servlets
Bookmark "Help with MVC implementation" Watch "Help with MVC implementation" New topic
Author

Help with MVC implementation

Mikey Kelly
Greenhorn

Joined: Aug 09, 2005
Posts: 18
Hi,
I'm trying to make a start on the MVC Model 2 approach with a simplish JSP/Servlet application. I'm looking for tips for best practice.

I have a main controller servlet, and various JSP views. When the controller servlet is first called (let's say we pass action="start" in the request to the servlet to let it know that this is the entry point), I can gather info from the request about the user. I only want to do this once, then store this information and make it available to the JSP views as required.

I could store this info in session variables, but I thought it might be tidier to store it in a bean object. However, my experience of using beans is very basic.
If I initialise a bean in the servlet, what lifespan will it have? Just the session? (There is a new instance of the servlet for every session...?) To access the bean from the JSP page, would I use the JSP useBean tag, and if so, with what scope? Or should I save the bean to the session in the servlet, then retrieve it from the session in the JSP pages?

Also, is it reasonable to just intialise the bean when the web application is first accessed (action="start"), or should I be checking at every stage to see if the bean is initialised, and if not, start the initialisation procedure?

Sorry if these are basic issues, but i don't have a good overview of the process.

Thanks,
Mike
Bear Bibeault
Author and ninkuma
Marshal

Joined: Jan 10, 2002
Posts: 61232
    
  66

If I initialise a bean in the servlet, what lifespan will it have?


Only as long it is referenced, just like any other java object. If you create a bean in the servlet, and then don't do anything else with it, it will go out of scope and made available for garbage collecting when the servlet ends execution.

There is a new instance of the servlet for every session...?


No. There is one instance of the servlet per web application.


Or should I save the bean to the session in the servlet, then retrieve it from the session in the JSP pages?


If you want the bean to be available to all JSPs in the session, this is the way to do it.

You would the useBean tag on the JSP to retrieve the bean if you are writing old-fashioned JSPs with scriplets, or EL expressions and the JSTL if writing modern scriptless JSP pages.


Also, is it reasonable to just intialise the bean when the web application is first accessed (action="start")


Only if the data you are storing is to be identical for all sessions/users and all JSPs.

I'm also a little concerned about this "start" action. Are you actually depending upon an external hit in order to initialize the application? If so, I'd highly recommend re-thinking that. A context listener would be a much safer approach.

If however, by "start" you are referring to an action more along the lines of a user login, then it may be ok.
[ October 06, 2005: Message edited by: Bear Bibeault ]

[Asking smart questions] [Bear's FrontMan] [About Bear] [Books by Bear]
Mikey Kelly
Greenhorn

Joined: Aug 09, 2005
Posts: 18
Thanks, that's very helpful.
Just to clarify - I don't want one bean with user data for all sessions/users.
I want one for every user (one per session).
So I suppose when a user starts using the web app (they do something like a log-in as you guessed), or makes any other call to the controller servlet, I should check to see if a bean has been saved to the session. If not, initialise a new one and save it to the session.
Mike
Bear Bibeault
Author and ninkuma
Marshal

Joined: Jan 10, 2002
Posts: 61232
    
  66

Yes, that's the general idea.

A little more advanced would be to use a servlet filter to check for the existance of the bean. If one doesn't exist, the request is hi-jacked to the login page. The act of logging in creates the bean and places it in the session.

That way, if they bookmark an inner page, or if the session times out, they are directed to the login page whenever the bean does not exist.
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Help with MVC implementation