الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ربط السرفلت بالفورم

بدأه ηaseemЈava في 14 ديسمبر 2013 · 4 رد · 1,165 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله

 

السلام عليكم

اريد معرفة الفرق بين relative url  و ال absolute url ؟

كيف يكون نكتب الurl  في الخاصية action حينما اريد ان اربط السرفلت بفورم معين؟

وممكن تشرحوا لنا كيفية تحديد اليو ار ال بارتن في ملف الweb.xml

 

تحياتي

تم تعديل هذه المشاركة بواسطة ηaseemЈava في 14 ديسمبر 2013 في 20:58

#2

بالنسبة للسؤال الاول عن الفرق بين relative and absolute urls

تقدر تقول ان ال Relative Path مش فيه معلومات كفايه عن ال Location الى هو رايح ليه زى مثلا اسم الدومين او فى بعض الاحيان اسم ال Directory الى الفايل موجود فيه

مثلا, لو عندك Directory اسمه مثلا Cpanel وال فيه صحفتين الاولى اسمها index.html , والتانيه اسمها home.php 

                                                cpanel     

                                     index.html

                                    home.html

وانت فى البروزر عندك واقف على صفحه اسمها

http://www.mydomian.com/cpanel/index.html

وعايز تروح لصفحه ال home.html عن طريق Href, ببساطه, هتستخدم Relative Url, زى ما هو موضح :-

 <a href="home.html">home</a>

 :: EXS

index.html
/graphics/image.png
 
على العكس تمام ال  Absolute URL, والى بيحتوى على معلومات عن ال Location زى ال Domain name, Directory 
وعلى نفس المثال السابق لو حبيت تعمل Absolute URL
 
 
بخصوص تانى سؤال وهو كتابه URL in form action attribute with servlet فهيا بسيطه جدا 
خلينا اول شىء نكريت ال فورم 
<form action="hello" method="POST">
First Name: <input type="text" name="first_name"/>
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

دى عباره عن form هتروح ل Servlet اسمه hello

 

خلينا نكريت السيرفلت بتاعنا

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

/**
 *
 * @author EG-WAFA
 */

public class HelloForm extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter printWriter = resp.getWriter();
        String val = req.getParameter("last_name");
        printWriter.write(val);
        
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
    
}

الوقتى تقدر تستخدم Post or Get in form action

ببساطه جدا عندك طريقتين عشان تكريت ال Servlet url 

اول طريق باستخدام java annotations عن طريق 

//@WebServlet("/hello")
public class HelloForm extends HttpServlet {

وتانى طريقه بما انك عايز تحدد ال

"URL Pattern in deployment descriptor "web.xml

 

فى ملف ال Web.xml هيبقى عندك خطوتين, اولها انك تكريت السيرفلت والتانيه انك توجهه "Mapping"

<servlet>
<servlet-name>MyServletName</servlet-name>
<servlet-class>myPackage.MyServletClass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletName</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

اتمنى اكون افادتك

تم تعديل هذه المشاركة بواسطة adel wafa في 15 ديسمبر 2013 في 19:23

#3

جزاك الله خير وألف شكر

اليو أر ال باترن URL pattern له اكثر من شكل او طريقة لكتابته او لربطه بالسرفلت في ملف web.xml

مثلا ينتهي /* او ينتهي / بس او يبتدئ ب /.. ثم كتابة الاسم اللي حيظهر في المتصفح

اذا ممكن توضح ما مقصود بهذه الطرق

آيه عمل هذه الاوبجكتس التالية او نستخدمها في ماذا؟

PageContext و page و application و الconfig

قرأت عنهم لكن اريد ضرب امثلة لتوصلالفكرة بدون كود

تم تعديل هذه المشاركة بواسطة ηaseemЈava في 15 ديسمبر 2013 في 19:49

#4

اول حاجه عن ال URL Pattern 

A. Patter ends with /*, firstly 

معناها ان اى Request بيحتوى على السيرفرلت نيم الى قبل /* , فعلى طول هيروح للسيرفلت دا يهاندل الريكوست, مش مفهومه طبعا بس خد بالك من المثال دا

اعمل فورم بسيطه جدا

<form action="hello/hello2/hello3/hello4" method="POST">
First Name: <input type="text" name="first_name"/>
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

الفورم دى بتروح لسيرفلت واحد بس اسمه hello , يعنى انا ماعنديش اى سيرفلت اسمه hello2 او hello3 او hello4 دى مجرد اسامى انا ضفتها من عندى لتوضيح المثال

كريت سيرفلت hello

public class HelloForm extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter printWriter = resp.getWriter();
        String val = req.getParameter("last_name");
        printWriter.write(val);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

كدا كريت السيرفلت, عايز نخلى الفورم تنادى على السيرفلت , وما تنساش الفورم اكشن اسمه hello/hello2/hello3/hello4

فى web.xml

    <servlet>
        <servlet-name>myServletName</servlet-name>
        <servlet-class>servlets.HelloForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServletName</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

وحاول انك تعمل ديبلوى وترن المثال , بالفعل مش هيشتغل وهيعطيك 404 error

المشكله هنا ان الفورم اكشن hello/hello2/hello3/hello4 رايحه لمكان مش  موجود , وهنا تيجى وظيفه /*

كل الحكايه انك هتيجى فى ال URL Pattern وتضيف فى الاخر /* يعنى 

<!--<url-pattern>/hello</url-pattern>-->
<url-pattern>/hello/*</url-pattern>

فكل ريكوست جايه على URL يحتوى على سيرفلت اسمه hello , على طول هتروح لل hello Servlet

 

تانى نوع

ال URL Pattern الى بتبدء ب *.

 

معناها ان url بيتنتهى بامتداد محدد انت هتحدده, هيروح للسيرفلت الى واخد الامتداد دا , مثال بسيط جدا , الفورم الى فوق غير بس فيها ال Action

<form action="yaRab.abc" method="POST">
First Name: <input type="text" name="first_name"/>

Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

طبعا ما فيش عندى صفحه اسمها yaRab.abc ولا حتى فيه امتداد اسمه abc, انا هنا مش بهتم باسم الفايل انا بهتم بالامتداد لان دا الى هتعامل معاه فى الباترن 

روح لصفحه ال Web.xml , وغير الباترن الى

<servlet>
<servlet-name>myServletName</servlet-name>
<servlet-class>servlets.HelloForm</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServletName</servlet-name>
<url-pattern>*.abc</url-pattern>
</servlet-mapping>

اظن كدا اتفهمت شويه, السيرفلت الى اسمه HelloForm هيقبل اى ريكويست جايه من اى URL امتداده abc

 

وما فيش URL Pattern بينتهى ب / 

وال URL pattern الى بتبدء ب / معناها ال 

Default Servlet/Your Servlet

 

ببساطه غير الفورم action ل 

 <form action="faces/hello" method="POST">
First Name: <input type="text" name="first_name"/>
<br />
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

وما تعدلش فى ال Web.xml

واعمل submit للفورم وخلى بالك من اسم اللينك الى فوق 

 

 

 

ارجو انك تكون فهمتها, هيا مش صعبه بس ممله وصدقنى مش هتحتاجها الا نادر جدا 

تم تعديل هذه المشاركة بواسطة adel wafa في 15 ديسمبر 2013 في 22:32

#5

جزيل الشكر لك

ومنتظرين التكملة

مواضيع مشابهة