ایجاد یک Servlet ساده
در ادامه سری آموزش های Java Enterprise, قصد داریم تا یک Servlet ساده بنویسم و با آن بیشتر آشنا شویم.
همانطور که در آموزش های قبلی گفته شد, Servlet ها در واقع یک کلاس جاوا هستند و instance ایجاد شده از tomcat آنرا اجرا میکند. در برنامه های جاوایی که بر روی Desktop اجرا میکنید یک متد main نوشته میشود و برای اجرا از همین متد استفاده میگردد اما در اینجا بر روی ماشینی اجرا میشود که tomcat روی آن نصب شده است. تفاوت بعدی این است که Servlet ها متد main ندارند بلکه یکسری متد ها در آن ها تعریف شده اند که وقتی به Servlet دسترسی پیدا میکنید, tomcat نسبت به اجرا آن اقدام میکند.
برای توضیح بیشتر یک Servlet ایجاد میکنیم. ( در محیط Intellij )
@WebServlet(name = "SimpleServlet") public class SimpleServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
در اولین خط webservlet annotation را مشاهده میکنید. در واقع از Java EE 7 به بعد, annotaion را میتوان جایگزین تنظیمات Servlet در web.xml دانست. در واقع ما با اینکار در زمان اجرا, به container این کلاس را به عنوان یک Servlet معرفی میکنیم. با این حال ارث بری از کلاس HttpServlet حتما باید صورت پذیرد. با استفاده از این annotation میتوانیم
- name : نام مربوط به آن
- url pattern : به pattern خاصی آن را مرتبط کنیم. در واقع مشخص میکنیم که اگر چنین آدرسی وارد شد, این کلاس فراخوانی شود.
- load on Start up : یک عدد است که اگر مقدار آن بیشتر مساوی صفر باشد, نشان دهنده اولویت است و هرچه عدد مختص بیشتر باشد, دارای اولویت بیشتری نیز میباشد.
- Description : شامل یکسری توضیحات است
- init Params : چندین WebInitParam annotation دریافت میکند.
و … را مشخص کنیم.
دو متد مهم پیاده سازی شده است که بر پایه دو متد Request در Http می باشد
- doPost : وقتی یک درخواست در متد Post ارسال گردد این متد فراخوانی میشود.
- doGet : وقتی یک درخواست در متد Get ارسال گردد این متد فراخوانی میشود.
و همچنین متد default متد Get میباشد. دو پارامتر ورودی در این دو متد وجود دارد. همانطور که از نام object های آن مشخص است یکی از آنها به request ارسال شده و دیگری به response که به سمت کاربر ارسال میگردد, مرتبط میشود.
ابتدا annotation را این گونه تغییر میدهیم :
@WebServlet(name = "SimpleServlet",urlPatterns = {"/simpleServlet","/java/zerotohero/hello"} , description = "Simple Servlet", initParams = {@WebInitParam(name="user",value = "vhdrjb"),@WebInitParam(name="message",value = "welcome to zero to hero")})
با تعریف فوق آدرس دسترسی به این Servlet به این صورت خواهد بود :
http://<my-site-ip>/java/zerotohero/hello http://<my-site-ip>/simpleServlet
و با هریک از این آدرس ها این کلاس فراخوانی میگردد. همچنین یکسری پارامتر ورودی نیز تعریف کرده ایم.
همانطور که گفته شد متد پیشفرض request ها متد get میباشد در نتیجه کد هارا در متد doGet پیاده سازی میکنیم.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String message = getInitParameter("message"); PrintWriter printWriter = response.getWriter(); printWriter.println("<h1>" + message + "</h1>"); }
همانطور که اشاره شد object کلاس HttpServletResponse برای ارسال پاسخ به سمت کاربر درخواست دهنده میباشد و در کد بالا مقدار خروجی را در قالب html به کاربر ارسال میکند.
<html> <head> </head> <body> <h1>welcome to zero to hero</h1> </body> </html>
سری مقالات آموزش Java Enterprise همچنان ادامه دارد. در مقاله بعدی پیرامون پارامتر ها در Servlet صحبت خواهیم کرد.
با ماه همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.