Latest web development tutorials

بيانات النموذج بريمج

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

الحصول على الطريقة

الحصول على طريقة لإرسال معلومات المستخدم المشفرة لطلب الصفحة. صفحة والمعلومات وسيطة تشفيرها باستخدام محدد الطابع، على النحو التالي ؟:

http://www.test.com/hello؟key1=value1&key2=value2

GET هو الأسلوب الافتراضي لتمرير المعلومات من المتصفح إلى عملية خادم الويب والتي سوف تنتج سلسلة طويلة، فإنه يظهر في شريط عنوان المتصفح. إذا كنت ترغب في تمرير كلمات السر الخادم أو غيرها من المعلومات الحساسة، من فضلك لا تستخدم أسلوب GET. هناك الحصول على الحد الأقصى لحجم الأسلوب: طلب سلسلة يمكن أن يصل إلى 1024 حرفا.

ويتم نقل هذه المعلومات باستخدام رأس QUERY_STRING، ويمكن الوصول إليها من خلال متغير البيئة QUERY_STRING، بريمج استخدام أسلوبdoGet () للتعامل مع هذا النوع من الطلب.

أسلوب POST

طريقة أخرى أكثر موثوقية من تمرير المعلومات إلى الخفي هو طريقة POST. الأسلوب POST لحزم المعلومات في الأساس بنفس الطريقة GET، أسلوب POST ولكن ليس على المعلومات ك URL؟ تبث سلسلة نص بعد حرف، ولكن المعلومات كرسالة منفصلة. وصلت الرسالة في شكل الإخراج القياسي الخفي، يمكنك تحليل واستخدامها لمستوى الانتاج. استخدام بريمج doPost () طريقة للتعامل مع هذا النوع من الطلب.

استخدام بريمج لقراءة بيانات النموذج

بريمج لمعالجة بيانات النموذج، والتي تستخدم أساليب مختلفة تبعا للحالة حل تلقائيا:

  • getParameter (): يمكنك استدعاء الأسلوب request.getParameter () للحصول على قيمة المعلمة النموذج.
  • getParameterValues (): إذا ظهرت المعلمة أكثر من مرة، ثم استدعاء الأسلوب وإرجاع القيم متعددة، مثل خانات الاختيار.
  • getParameterNames (): إذا كنت ترغب في الحصول على قائمة كاملة من الطلبات الحالية جميع المعلمات، ثم استدعاء الأسلوب.

أمثلة على استخدام أسلوب URL GET

هنا هو عنوان بسيط، وذلك باستخدام طريقة GET لتمرير قيمتين لبرنامج HelloForm.

HTTP: // المضيف المحلي: 8080 / TomcatTest / اسم HelloForm = هذا البرنامج التعليمي وURL = www.w3big.com؟

هنا هو التعامل مع مستعرض ويب دخلت برنامجHelloForm.java بريمج.سوف نستخدم طريقةgetParameter ()، يمكنك الوصول بسهولة نقل المعلومات:

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloForm
 */
@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloForm() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");

		PrintWriter out = response.getWriter();
		String title = "使用 GET 方法读取表单数据";
		// 处理中文
		String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
		String docType = "<!DOCTYPE html> \n";
		out.println(docType +
		    "<html>\n" +
		    "<head><title>" + title + "</title></head>\n" +
		    "<body bgcolor=\"#f0f0f0\">\n" +
		    "<h1 align=\"center\">" + title + "</h1>\n" +
		    "<ul>\n" +
		    "  <li><b>站点名</b>:"
		    + name + "\n" +
		    "  <li><b>网址</b>:"
		    + request.getParameter("url") + "\n" +
		    "</ul>\n" +
		    "</body></html>");
	}
	
	// 处理 POST 方法请求的方法
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
ثم نخلق الإدخال التالي في ملفweb.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>HelloForm</servlet-name>
    <servlet-class>com.w3big.test.HelloForm</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloForm</servlet-name>
    <url-pattern>/TomcatTest/HelloForm</url-pattern>
  </servlet-mapping>
</web-app>

أدخل الآن في المتصفح عنوان شريطHTTP: // المضيف المحلي: 8080 / TomcatTestاسم / HelloForm =هذا البرنامج التعليمي وURL = www.w3big.com،وقبل التسبب تم إطلاقها لضمانخادمقط الأمرأعلاه؟إذا سارت الامور بشكل جيد، سوف تحصل على النتائج التالية:


استخدام الأسلوب شكل GET من مثال

هنا مثال بسيط، وذلك باستخدام نماذج HTML وتقديم زر يمر القيمتين. سوف نستخدم نفس بريمج HelloForm لمعالجة المدخلات.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="HelloForm" method="GET">
网址名:<input type="text" name="name">
<br />
网址:<input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

حفظ ملف HTML إلى hello.html، بنية الدليل على النحو التالي:

حاول إدخال اسم URL وعنوان URL، وانقر على زر "إرسال" و GIF عرض على النحو التالي:


ومن الأمثلة على أسلوب POST النموذج

دعونا نقوم بريمج أعلى قليلا تعديل بحيث يمكن التعامل مع الحصول على وظيفة الأساليب. يستخدمHelloForm.java بريمج بعد GET و POST طريقة لمعالجة المدخلات المقدمة من مستعرض ويب.

ملاحظة: إذا كان مطلوبا من البيانات المقدمة بيانات النموذج في الشفرة الصيني:

String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloForm
 */
@WebServlet("/HelloForm")
public class HelloForm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloForm() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");

		PrintWriter out = response.getWriter();
		String title = "使用 POST 方法读取表单数据";
		// 处理中文
		String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
		String docType = "<!DOCTYPE html> \n";
		out.println(docType +
		    "<html>\n" +
		    "<head><title>" + title + "</title></head>\n" +
		    "<body bgcolor=\"#f0f0f0\">\n" +
		    "<h1 align=\"center\">" + title + "</h1>\n" +
		    "<ul>\n" +
		    "  <li><b>站点名</b>:"
		    + name + "\n" +
		    "  <li><b>网址</b>:"
		    + request.getParameter("url") + "\n" +
		    "</ul>\n" +
		    "</body></html>");
	}
	
	// 处理 POST 方法请求的方法
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

الآن، ترجمة نشر بريمج أعلاه، واستخدام hello.html مع أساليب ما بعد تم اختبارها، على النحو التالي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="HelloForm" method="POST">
网址名:<input type="text" name="name">
<br />
网址:<input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

هنا هو شكل الانتاج الفعلي فوق، في محاولة لإدخال اسم URL وعنوان URL، وانقر فوق الزر "إرسال"، المتحركة عرض على النحو التالي:


لتمرير البيانات إلى برنامج مربع بريمج

عندما تحتاج إلى تحديد أكثر من خيار واحد لاستخدام مربع.

هنا هو HTML أمثلة التعليمات البرمجية checkbox.html، وهو شكل مع اثنين من خانات.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>
<form action="CheckBox" method="POST" target="_blank">
<input type="checkbox" name="w3big" checked="checked" /> 本教程
<input type="checkbox" name="google"  /> Google
<input type="checkbox" name="taobao" checked="checked" /> 淘宝
<input type="submit" value="选择站点" />
</form>
</body>
</html>

هنا هو إجراءات CheckBox.java بريمج للتعامل مع متصفح الويب يعطي مربع الإدخال.

package com.w3big.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CheckBox
 */
@WebServlet("/CheckBox")
public class CheckBox extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");

		PrintWriter out = response.getWriter();
		String title = "读取复选框数据";
		String docType = "<!DOCTYPE html> \n";
			out.println(docType +
	            "<html>\n" +
	            "<head><title>" + title + "</title></head>\n" +
	            "<body bgcolor=\"#f0f0f0\">\n" +
	            "<h1 align=\"center\">" + title + "</h1>\n" +
	            "<ul>\n" +
	            "  <li><b>本按教程标识:</b>: "
	            + request.getParameter("w3big") + "\n" +
	            "  <li><b>Google 标识:</b>: "
	            + request.getParameter("google") + "\n" +
	            "  <li><b>淘宝标识:</b>: "
	            + request.getParameter("taobao") + "\n" +
	            "</ul>\n" +
	            "</body></html>");
	}
	
	// 处理 POST 方法请求的方法
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

تعيين web.xml المقابلة:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>CheckBox</servlet-name>
    <servlet-class>com.w3big.test.CheckBox</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CheckBox</servlet-name>
    <url-pattern>/TomcatTest/CheckBox</url-pattern>
  </servlet-mapping>
</web-app>

والمثال أعلاه تظهر النتائج التالية:


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

ما يلي هو مثال عام لاستخدام طريقة HttpServletRequestgetParameterNames () لقراءة جميع المعلمات المتاحة من النموذج.هذا الأسلوب بإرجاع تعداد تحتوي على اسم المعلمة لم يتم تحديد النظام.

مرة واحدة لدينا تعداد، يمكننا أن نعدد المتداولة بطريقة قياسية، وذلك باستخدامhasMoreElements ()طريقة لتحديد متى يتم التوقف عن استخدام طريقةnextElement ()للحصول على اسم كل معلمة.

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ReadParams
 */
@WebServlet("/ReadParams")
public class ReadParams extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ReadParams() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 设置响应内容类型
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		String title = "读取所有的表单数据";
		String docType =
			"<!doctype html public \"-//w3c//dtd html 4.0 " +
			"transitional//en\">\n";
			out.println(docType +
			"<html>\n" +
			"<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n" +
			"<body bgcolor=\"#f0f0f0\">\n" +
			"<h1 align=\"center\">" + title + "</h1>\n" +
			"<table width=\"100%\" border=\"1\" align=\"center\">\n" +
			"<tr bgcolor=\"#949494\">\n" +
			"<th>参数名称</th><th>参数值</th>\n"+
			"</tr>\n");

		Enumeration paramNames = request.getParameterNames();

		while(paramNames.hasMoreElements()) {
			String paramName = (String)paramNames.nextElement();
			out.print("<tr><td>" + paramName + "</td>\n");
			String[] paramValues =
			request.getParameterValues(paramName);
			// 读取单个值的数据
			if (paramValues.length == 1) {
				String paramValue = paramValues[0];
				if (paramValue.length() == 0)
					out.println("<td><i>没有值</i></td>");
				else
					out.println("<td>" + paramValue + "</td>");
			} else {
				// 读取多个值的数据
				out.println("<td><ul>");
				for(int i=0; i < paramValues.length; i++) {
				out.println("<li>" + paramValues[i]);
			}
				out.println("</ul></td>");
			}
			out.print("</tr>");
		}
		out.println("\n</table>\n</body></html>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

الآن، في محاولة لبريمج أعلاه من خلال النموذج التالي:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>本教程(w3big.com)</title>
</head>
<body>

<form action="ReadParams" method="POST" target="_blank">
<input type="checkbox" name="maths" checked="checked" /> 数学
<input type="checkbox" name="physics"  /> 物理
<input type="checkbox" name="chemistry" checked="checked" /> 化学
<input type="submit" value="选择学科" />
</form>

</body>
</html>

تعيين web.xml المقابلة:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>ReadParams</servlet-name>
    <servlet-class>com.w3big.test.ReadParams</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ReadParams</servlet-name>
    <url-pattern>/TomcatTest/ReadParams</url-pattern>
  </servlet-mapping>
</web-app>

الآن استخدام النموذج أعلاه للاتصال بريمج، وتنتج النتائج التالية:

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