Though I've used Struts quite a bit in the past,  I found this freely 
downloadable book a very good source of '101' Struts information:
 
http://www.theserverside.com/books/sourcebeat/JakartaStrutsLive/index.tss
 
Mike

"Frank W. Zammetti" <[EMAIL PROTECTED]> wrote:
Sounds good! You'll find that the people here are extremely helpful, 
but they do tend to shy away from general questions (unless they are SO 
general as to be theoretical, in which case EVERYONE has an opinion :) 
), so the more specific a question you can ask, the better.

As for books to read, I would highly recommend grabbing the latest copy 
of Head First Servlets and JSP. It's not Struts-specific, but it is 
really necassery to know what is going on beneath Struts, and it is the 
best I've seen in this area (I'm currently using it as a study guide for 
the SCWCD exam, but it's good for anyone I'd say). Frankly, if you get 
everything in that book, most of Struts will make sense almost 
immediately. For Struts, O'Reilly has a pretty good book, the title of 
which elludes me at the moment, but I suspect it's the only one they 
sell. At times it goes into a little TOO much detail for people trying 
to get a start in Struts, but most of it is excellent.

As for your specific architecture questions... Generally speaking, your 
concern about putting all application state for a user in session is 
valid. This isn't what session is for. It's really for fairly small 
BITS of state information, things that will in all likelihood change 
frequently, and certainly nothing that should persist beyond a session 
(hence the name!). But, in your case, since you are just using it as an 
example, I wouldn't worry about it, go ahead and use session, it'll be 
easier.

In Struts, Actions can be shared across requests, which means that if 
you have class-level variables, they are, potentially, shared across 
multiple requests. Clearly this is a formula for disaster.

There are two ways you could go here... one is to use session as I said, 
the other is to have a "data storage class" that just has some static 
members, most probably a Map of some sort. You can use this as 
something of a poor man's database. Think of a HashMap for instance as 
a database table. Now, assume each element you add to the HashMap is 
itself a HashMap. You can think of these "inner HashMaps" as rows in 
the table. Then, each element in that inner HashMap is a field in the 
table. Make sense? You can go so far as to create insertRow(), 
deleteRow() and updateRow() methods for your data storage class... These 
would do the functions their name implies on the HashMap, and you can in 
that way "key" your data, i.e., each "row" has an element recordKey 
let's say. So, your insert method can throw an exception if a "record" 
exists with that key already. In fact, you could go so far as to throw 
a SQLException, and in that way you could replace that data storage 
class with a class that talks to a database down the road, and nothing 
that uses that class should have to change.

But that's getting ahead of ourselves a bit :) If you intend to build 
something that you know would usually use a database, then the second 
approach is a good idea. Be sure to synchronize your access to your 
Maps (which would be a bottleneck in a real application, but you can get 
away with it here, and in general in any application that isn't going to 
have a big load). But, using session might be easier, depends on how 
much work (and control) you want. For a shopping cart, the volume of 
data isn't going to be great, so no worries there.

But, the golden rule with Struts to remember is no class-level 
variables! That's what all this is designed to avoid.

-- 
Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com

Simon MARTIN wrote:
> Hi,
> 
> thanks for your offering of help.
> I know that my Struts knowlegde is not the best yet -- no question about 
> it -- but I'm willing to change that, as far as my time allows it.
> 
> Fortunately, my lecture is not of that importance you might have 
> assumed, as I'm 'only' giving a presentation at school. However, I of 
> course want to present something I know about, so this does not really 
> change the situation.
> 
> As I can see what you're telling me, I think my learning has been to 
> practice-orientated and too less theory-orientated, which brings me into 
> trouble when the requirements change.
> So far, I've only strictly written Spring apps with Struts MVC or 
> without Struts MVC, but, in any case, with Hibernate as ORM-framework. 
> Therefore, I really came into troubles when using Struts alone, and then 
> even doing so without a database.
> Of course, I had thought about putting the stuff into the session, 
> either, but putting complete client-state into the session seemed 
> unclean to me, as I personally had prefered some kind of 
> property-setting statically.
> Please let me know about further architectural mistakes I've done.
> 
> I've started reading Wiley's 'Mastering Jakarta Struts', which 
> unfortunately seems kind of outdated to me. Please let me know about 
> better alternatives.
> 
> Furthermore, I'd appreciate any kind of help.
> 
> Kind regards and thanks in advance,
> Simon
> 
> 
> [EMAIL PROTECTED] wrote:
> 
>> PLEASE do not take offense from what I am about to say. I do not mean 
>> to be anything but constructive and helpful...
>>
>> I am concerned that you are trying to build an example for those you 
>> will be teaching because I can see some fundamental misunderstandings, 
>> or gaps in your knowledge. I'd be willing to guess that someone (your 
>> emoployer?) asked you to teach some people because you were the best 
>> of the group, and if that's the case I most certainly commend you for 
>> taking on the task.
>>
>> However, I think it would be in your best interest, and certainly in 
>> your students' best interest, to take some time and become more 
>> familiar with the topic(s) you are going to be teaching. I and others 
>> here could give you the answers, and we'd be happy to do so, but the 
>> questions you are asking are things that you really should be able to 
>> answer yourself in light of the fact that you are going to be 
>> teaching, and might face the same questions, or others that will test 
>> your fundamental knowledge. I'm not just talking about learning 
>> Struts here, which certainly is a big part of it. I sense you may 
>> have some learning to do with regard to web application development in 
>> general.
>>
>> Again, I hope I have not offended you, that is not my intent in any 
>> way. If your just learning this stuff yourself, that's great, we'll 
>> all help any way we can, but I would really try and hold off on the 
>> teaching for a while until you see these answers yourself.
>>
> 
> 
> > On Tue, December 7, 2004 1:59 pm, Bill Siggelkow said:
> > Simon,
> >
> > Actions should not hold client-state; instead, you can create a
> > ShoppingCart in the Action but then save it in the HttpSession.
> >
> > Without going into to many details, I suggest you take a look at the
> > Struts MailReader example distributed with Struts.
> >
> > -Bill Siggelkow
> >
> >
> > Simon MARTIN wrote:
> >
> >> Hi,
> >>
> >> I'm currently writing a short Struts application without a database (I
> >> know that this would be better, but as it is only for teaching 
> purposes,
> >> I don't want to 'overflow' my audience with databases and ORM).
> >> It should be a small online sales system -- I've got ShoppingItems,
> >> ShoppingUsers (which are not yet used) and ShoppingCarts.
> >>
> >> I want a ShoppingCart which stores the ordered items per user. I had
> >> something like this:
> >>
> >> public class ShoppingCartAction extends DispatchAction {
> >> private ShoppingCartManager shoppingCartManager;
> >> ...
> >>
> >> public ActionForward order(...)
> >> ...
> >>
> >> public ActionForward list(...)
> >> ...
> >> }
> >>
> >> and thought that it would work. Unfortunately, each user (which is not
> >> authenticated or anything yet) gets the same shopping cart when he 
> calls
> >> shoppingCart.do?method=list.
> >>
> >> So I did some research and found this:
> >> http://www.jguru.com/faq/view.jsp?EID=1057609
> >>
> >> So I created an ShoppingCartMapping class
> >>
> >> public class ShoppingCartMapping extends ActionMapping {
> >> private ShoppingCartManager shoppingCartManager;
> >> ...
> >> }
> >>
> >> and call it like this
> >>
> >> public ActionForward list(ActionMapping mapping, ActionForm form,
> >> HttpServletRequest request,
> >> HttpServletResponse response)
> >> throws Exception {
> >> request.setAttribute("orderedItems",
> >> 
> ((ShoppingCartMapping)mapping).getShoppingCartManager().getItems());
> >> return mapping.findForward("list");
> >> }
> >>
> >> which gives me a ClassCastException.
> >>
> >> Do I have to set my custom ActionMapping in web.xml or
> >> struts-config.xml?
> >> Am I on the right way, or is there a better way of doing this?
> >>
> >> Thanks in advande and kind regards,
> >> Simon
> >>
> >> PS: Please cc me in your answers.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> 
> 




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


                
---------------------------------
Do you Yahoo!?
 Meet the all-new My Yahoo! – Try it today! 

Reply via email to