طراحي جاوا باز مي گردد به سال 1991 زمانيكه تعدادي از مهندسين شركت Sun Microsystem به مديريت شخصي بنام James Gosling قصد داشتند يك زبان كوچك طراحي كنند كه بتواند در وسايلي مانند جعبه هاي سوئيچ تلويزيون هاي كابلي مورد استفاده قرار بگيرد .
به دليل اينكه اين وسائل توان حافظه زيادي ندارند ، زبان مزبور مي بايست بسيار كوچك و كد توليد شده آن با حجم بسيار كمي باشد و نكته بسيار مهم ديگري كه امروز يكي از افتخارات Java مي باشد ( كه با توليد جاوا باعث تحول بزرگي در دنياي برنامه نويسي شد ) آن بود كه به دليل اينكه توليد كنندگان وسائل ، هر كدام از CPU خاص خود استفاده ميكردند ، بسيار مهم بود كه زباني طراحي شود كه وابسته به يك Platform (Hardware + Software) خاص نباشد .
در آن زمان نام پروژه Green انتخاب شد . نتيجه اي كه طراحان به آن رسيدند اين بود كه كد خروجي جاوا يك كد واسط باشد كه مي توانست بر روي هر ماشيني اجراء شود . سپس هر ماشين جهت اجراي آن يناز به برنامه اي داشت كه امروز " مفسر جاوا " ناميده مي شود كه به آن JVM ( Java Virtual Machine ) مي گويند . و به اين ترتيب زباني طراحي شد كه كد آن كوچك بود و هم به دليل كوچك بودن خود JVM اين امكان پيش آمد كه زبان كاملا مستقل از Platform باشد زيرا به راحتي هر Platform مي توانست JVM خود را داشته باشد .
به دليل اينكه تيم طراح همه داراي پيش زمينه Unix بودند ، جهت طراحي جاوا زبان پايه خود را C++ انتخاب كردند. بعد از مدتي به دلايلي مدير گروه طراح ، آقاي Gosling تصميم گرفت نام زبان را Oak قرار دهد كه بعد ها متوجه شدند زباني بنام Oak وجود دارد و سرانجام نام آنرا جاوا ناميدند.
J2EE
امروزه، توسعهدهندگان بيشتري خواهان نوشتن نرمافزارهاي کاربردي توزيعيافته با مقياس کلان هستند و در اينکار، نيازمند سرعت و قابليت اطمينان تکنولوژيهاي سمت سرور هستند. براي کاهش هزينه طراحي و توسعه نرمافزارهاي کاربردي، سکوي J2EE يک روش مبتني بر کامپوننت براي طراحي، توسعه، سرهم بندي و اجراي نرمافزارهاي کاربردي در مقياس کلان ارائه کرده است. اين سکو، يک مدل توزيعيافته چندلايهاي عرضه ميکند که داراي کامپوننتهاي با قابليت استفاده مجدد است، يک مدل امنيتي يکپارچه دارد، کنترلهاي transaction قابل انعطاف دارد و ميتواند Web Service ها را از طريق پروتکل استاندارد XML پوشش دهد.
با استفاده از J2EE، يک توسعهگر نه تنها ميتواند به سرعت، راهحلهاي ابداعي تجاري مناسب براي بازار ارائه دهد، بلکه اين راهحلهاي مبتني بر کامپوننت و مستقل از سکو، به محصولات و رابطهاي برنامههاي کاربردي هيچ توليدکنندهاي وابسته نيستند. در حقيقت، مشتريان و توليدکنندگان نيز از آزادي در انتخاب محصولات و کامپوننتهائي که بيشتر بتواند نيازهاي تجاري و تکنولوژيکي آنها را برطرف سازد، احساس رضايت ميکنند.
سکوي J2EE، از يک مدل چندلايهاي توزيعيافته براي نرمافزارهاي کاربردي با مقياس کلان استفاده ميکند. منطق برنامه کاربردي به يک سري کامپوننت شکسته ميشود که ميتوانند بر روي چندين ماشين مختلف قرار گيرند.
- هاي لايه کاربر بر روي ماشين کاربر اجرا ميشوند.
- کامپوننتهاي لايه Web بر روي سرور J2EE قرار دارند.
- کامپوننتهاي کاري نيز بر روي سرور J2EE قرار دارند.
- نرمافزارهاي سيستم اطلاعاتي سيستم که بر روي سرور EIS قرار دارند.

کامپوننتهائي که توسط J2EE معرفي شدهاند عبارتند از :
- برنامه کاربردي client و applet ها که بر روي ماشين client اجرا ميشوند.
- Servletهاي جاوائي و JSPها که بر روي سرور اجرا ميشوند.
- کامپوننتهاي EJB که اجزاي منطق کاري هستند و بر روي سرور اجرا ميشوند.
کامپوننتهاي J2EE توسط زبان برنامهنويسي جاوا نوشته و کامپايل ميشوند.
Struts
جاکارتا Struts، يک پروژه Open-source است که توسط موسسه نرمافزاري آپاچي مورد حمايت قرار گرفته است. اين پروژه، يک پيادهسازي سمت سرور جاوائي از الگوي طراحي MVC است. پروژه Struts در سال 2000 توسط کرگ مککلاهان به وجود آمد و پس از آن توسط انجمن Open-source پوشش داده شده است.
پروژه Struts با هدف مهياسازي يک چارچوب Open-source براي توليد نرمافزارهاي کاربردي تحت Web طراحي شده است. چارچوبي که به راحتي لايه نمايش را از لايههاي کاري و داده جدا ميسازد.
چارچوب Struts، پيادهسازي MVC سمت سرور خود را با بهرهجوئي ترکيبي از JSPها، tagهاي متناسبسازي شده براي JSP و servletهاي جاوائي مدل ميکند.

- اين پروسه را ميتوان به پنج مرحله اصلي تقسيم کرد :
- 1. يک درخواست از View قابل مشاهده فرستاده ميشود.
- 2. اين درخواست، توسط ActionServlet که به عنوان Controller عمل ميکند، دريافت ميشود و ActionServlet با استفاده از تعاريف گنجانده شده در فايل XML خود، نام کلاس Actionاي را که بايد کار منطقي درخواست مورد نظر را انجام دهد، پيدا ميکند.
- 3. کلاس Action مورد نظر، منطق خود را بر روي کامپوننتهاي مدل برنامه کاربردي مورد نظر، انجام ميدهد.
- 4- همينکه کار کلاس Action مورد نظر به اتمام ميرسد، کنترل، همراه با نتيجه اجراي کلاس Action به ActionServlet بازميگردد. با توجه به نتيجه حاصل از اجراي کلاس Action، ActionServlet تصميم ميگيرد که کنترل را به کدام صفحه نمايشي رهنمون کند.
- 5- چرخه حيات درخواست، با ارسال کنترل به صفحه نمايشي که در مرحله قبل پيدا کرده است، پايان مييابد.