English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

معالجة النماذج في JSP

عندما نتصفح صفحات الويب، نحتاج عادة إلى تقديم معلومات إلى الخادم، وتشغيل برامج الخلفية. يمكن استخدام طرق GET وPOST في متصفح الويب لتقديم بيانات إلى الخادم.

طريقة GET

طريقة GET تضيف معلومات الترميز في نهاية عنوان الموقع، ويتم تقسيم عنوان الموقع ومعلومات الترميز باستخدام "?". مثل ما يلي:

http://ar.oldtoolbag.com/hello?key1=value1&key2=value2

طريقة GET هي الطريقة الافتراضية التي يستخدمها متصفح لمرور المعلمات، وننصح بعدم استخدام طريقة GET لبيانات حساسة مثل كلمات المرور.

عند استخدام get، يكون هناك حد لكمية البيانات التي يمكن نقلها (ليس عدد المعلمات)، ويكون الحد الأقصى 1024 بيت.

طريقة POST

نحن يمكننا استخدام طريقة POST لنقل معلومات حساسة مثل كلمات المرور، حيث تكون البيانات المقدمة باستخدام طريقة POST غير مرئية.

البيانات المقدمة باستخدام طريقة POST غير مرئية، أما طريقة GET فهي تقوم بمرور البيانات عبر URL (يمكنك النظر إلى شريط العناوين في متصفحك).

يستخدم JSP getParameter() للحصول على المعلمات المرسلة، ويستخدم getInputStream() لمعالجة طلب تدفق البيانات الثنائية من العميل.

قراءة بيانات النموذج في JSP

  • getParameter(): استخدام طريقة request.getParameter() للحصول على قيمة معلمات النموذج.

  • getParameterValues(): الحصول على بيانات مثل checkbox (الأسماء متطابقة ولكن القيم متعددة). استقبال متغيرات قائمة، مثل نوع checkbox

  • getParameterNames():يمكن لهذه الطريقة الحصول على أسماء جميع المتغيرات، ويعود بـ Enumeration.

  • getInputStream():استدعاء هذه الطريقة لقراءة تدفق البيانات الثنائية من العميل.

مثال على استخدام طريقة GET في URL

إليك URL بسيط، يستخدم طريقة GET لنقل المعلمات الموجودة في URL:

http://localhost:8080/testjsp/main.jsp?name=基础教程网&url=http://ww.oldtoolbag.com

testjsp هو عنوان المشاريع.

إليك برنامج JSP في ملف main.jsp، يستخدم لمعالجة بيانات النموذج المقدمة من العميل، نستخدم طريقة getParameter() للحصول على البيانات المقدمة:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%
<%@ page import="java.io.*,java.util.*" %>
!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<h1>استخدام طريقة GET لقراءة البيانات</h1>
<ul>
<li><p><b>اسم الموقع:</b>
   <%= request.getParameter("name")%>
</p></li>
<li><p><b>عنوان الموقع:</b>
   <%= request.getParameter("url") %>
</p></li>
</ul>
</body>
</html>

الآن سنعبر عن طريق متصفح إلى http://localhost:8080/testjsp/main.jsp?name=JSP教程&url=http://ww.oldtoolbag.com لنرى النتيجة التالية:

مثال على استخدام طريقة GET في النموذج

إليك مثال بسيط على نموذج HTML، يتم من خلاله تقديم بيانات العميل باستخدام طريقة GET إلى main.jsp في الملف:

!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<form action="main.jsp" method="GET">
اسم الموقع: <input type="text" name="name">
<br />
عنوان الموقع: <input type="text" name="url" />
<input type="submit" value="إرسال" />
</form>
</body>
</html>

حفظ الكود HTML أعلاه في ملف test.htm. ضع هذا الملف في مجلد WebContent للمشروع jsp الحالي (في نفس الدليل مع ملف main.jsp).

من خلال زيارة http://localhost:8080/testjsp/test.html إرسال بيانات النموذج إلى ملف main.jsp، كما يظهر في الصورة التالية:

أدخل معلومات "اسم الموقع" و "عنوان الموقع" في نموذجين "اسم الموقع" و "عنوان الموقع"، وأضغط على زر "إرسال"، فإنه سيقوم بإخراج النتائج.

مثال على استخدام طريقة POST للنموذج

دعونا الآن نستخدم طريقة POST لتحويل بيانات النموذج، وعدل كود ملفي main.jsp وHello.htm كما يلي:

كود ملف main.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%
<%@ page import="java.io.*,java.util.*" %>
!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<h1>قراءة البيانات باستخدام طريقة POST</h1>
<ul>
<li><p><b>اسم الموقع:</b>
<%
// لحل مشكلة تلوث النصوص الصينية
String name = new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8");
%>
   <%= name %>
</p></li>
<li><p><b>عنوان الموقع:</b>
   <%= request.getParameter("url") %>
</p></li>
</ul>
</body>
</html>

نحن نستخدم في الكود new String((request.getParameter("name")).getBytes("ISO-8859-1"),"UTF-8")لتحويل الترميز، منع حدوث تلوث النصوص الصينية.

هذا هو الكود المعدل لـ test.htm:

!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<form action="main.jsp" method="POST">
اسم الموقع: <input type="text" name="name">
<br />
عنوان الموقع: <input type="text" name="url" />
<input type="submit" value="إرسال" />
</form>
</body>
</html>

من خلال زيارة http://localhost:8080/testjsp/test.html إرسال بيانات النموذج إلى ملف main.jsp كما يلي:

نقل بيانات Checkbox إلى برنامج JSP

يمكن لمربعات الاختيار checkbox نقل بيانات واحدة أو أكثر.

هذا كود HTML بسيط، ويتم حفظه في ملف test.htm:

!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="google" checked="checked" /> Google
<input type="checkbox" name="w3codebox"  /> موقع تعليميات الأساسيات
<input type="checkbox" name="taobao" checked="checked" /> طواحين
<input type="submit" value="اختيار الموقع" />
</form>
</body>
</html>

كود أعلاه في متصفح يظهر كالتالي:

هذا الكود في ملف main.jsp用于 معالجة بيانات مربعات الاختيار:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%
<%@ page import="java.io.*,java.util.*" %>
!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<h1>من قراءة البيانات من مربعات الاختيار</h1>
<ul>
<li><p><b>هل تم اختيار Google؟:</b>
   <%= request.getParameter("google")%>
</p></li>
<li><p><b>هل تم اختيار موقع دروس الأساس؟:</b>
   <%= request.getParameter("w3codebox")%>
</p></li>
<li><p><b>هل تم اختيار Taobao؟:</b>
   <%= request.getParameter("taobao")%>
</p></li>
</ul>
</body>
</html>

من خلال زيارة http://localhost:8080/testjsp/test.html إرسال بيانات النموذج إلى ملف main.jsp كما يلي:

بعد النقر على "اختيار الموقع":


قراءة جميع المعاملات النموذج

سنستخدم الآن HttpServletRequest من getParameterNames() لقراءة جميع المعاملات النموذج، يمكن لهذه الطريقة الحصول على أسماء جميع المتغيرات، وتعطي ترتيباً.

بمجرد أن لدينا Enumeration (الترتيب)، يمكننا استدعاء hasMoreElements() لتحديد ما إذا كان هناك عناصر أخرى، واستخدام nextElement() للحصول على اسم كل معامل.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%
<%@ page import="java.io.*,java.util.*" %>
!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<h1>قراءة جميع المعاملات النموذج</h1>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>اسم المعامل</th><th>قيمة المعامل</th>
</tr>
<%
   Enumeration paramNames = request.getParameterNames();
   while(paramNames.hasMoreElements()) {
      String paramName = (String)paramNames.nextElement();
      out.print("<tr><td>" + paramName + "</td>\n");
      String paramValue = request.getParameter(paramName);
      out.println("<td> " + paramValue + "</td></tr>\n");
   }
%>
</table>
</body>
</html>

هذا هو محتوى ملف test.htm:

!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
<title>موقع تعليميات الأساسيات (oldtoolbag.com)</title>
</head>
<body>
<form action="main.jsp" method="POST" target="_blank">
<input type="checkbox" name="google" checked="checked" /> Google
<input type="checkbox" name="w3codebox"  /> موقع تعليميات الأساسيات
<input type="checkbox" name="taobao" checked="checked" /> 
                                                Taobao
<input type="submit" value="اختيار الموقع" />
</form>
</body>
</html>

الآن دعونا نزور ملف test.htm لطرح البيانات ونرى النتيجة كما يلي:

من خلال زيارة http://localhost:8080/testjsp/test.html إرسال بيانات النموذج إلى ملف main.jsp كما يلي:


بعد النقر على "اختيار الموقع":


يمكنك محاولة استخدام الشيفرة في JSP أعلاه لقراءة أشياء أخرى مثل مربعات النص، أزرار التحديد أو قوائم التراجيح وما إلى ذلك من أنواع البيانات المختلفة.