Latest web development tutorials

서블릿 폼 데이터

많은 경우에, 우리는 웹 서버에 브라우저에서 일부 정보를 전달하고, 궁극적으로 데몬에해야합니다. GET 및 POST 방법은 브라우저가 웹 서버에 정보를 전달하는 두 가지 방법입니다.

GET 메서드

페이지 요청에 인코딩 된 사용자 정보를 전송하는 방법을 얻는다. 페이지 및 다음과 같이 문자로 구분하여 인코딩 중간 정보?

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

GET은 긴 문자열을 생성합니다 웹 서버 프로세스에 브라우저에서 정보를 전달하는 기본 방법입니다, 그것은 브라우저의 주소 표시 줄에 나타납니다. 당신은 서버 암호 나 기타 민감한 정보를 전달하려면 GET 방식을 사용하지 마십시오. 방법 크기 제한을가 GET : 요청 문자열은 최대 1024 자까지 가능합니다.

이 정보는 QUERY_STRING 헤드를 이용하여 송신되고, QUERY_STRING 환경 변수를 통해 액세스 될 수 있으며, 서블릿은 요청이 유형의처리의 doGet () 메소드를 사용한다.

POST 방법

데몬에 정보를 전달하는 또 다른 더 신뢰할 수있는 방법은 POST 방법입니다. POST 방식은 GET, POST 메소드 아니지만 URL로 정보와 본질적으로 동일한 방식으로 정보를 패키지화? 문자 후의 텍스트 문자열 송신하지만, 별도의 메시지 등의 정보이다. 표준 출력의 형태로 메시지가 구문 분석하고 표준 출력에 사용할 수 있습니다, 데몬을했다. 사용 서블릿의 doPost () 메소드는 요청이 유형을 처리합니다.

폼 데이터를 읽어 서블릿을 사용

상황에 따라 서로 다른 방법을 사용하는 형태로 데이터를 처리하는 서블릿 자동 해결 :

  • 의 getParameter ()는 : 당신은 형식 매개 변수의 값을 얻을 수 request.getParameter () 메서드를 호출 할 수 있습니다.
  • 대해 getParameterValues () : 매개 변수가 두 번 이상 나타나는 경우, 다음 메소드를 호출과 같은 체크 박스로 여러 값을 반환합니다.
  • 대해 getParameterNames () : 사용자가 현재 요청 모든 매개 변수의 전체 목록을 얻고 싶은 경우에, 다음 메소드를 호출합니다.

는 URL GET 방법의 사용 예

여기 HelloForm 프로그램이 값을 전달하는 GET 메소드를 사용하여 간단한 URL입니다.

에 http : // localhost를 : 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를입력: // localhost를 : 8080 / TomcatTest/ HelloForm 이름 =이 튜토리얼 및 URL = www.w3big.com하고,Tomcat서버를보장하기 위해 시작되었습니다 위의 명령 트리거하기전에?모두가 잘된다면, 당신은 다음과 같은 결과를 얻을 것이다 :


예 형태의 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>

hello.html하는 HTML 파일을 저장 한 다음, 디렉토리 구조는 다음과 같다 :

URL 이름과 URL을 입력 해보십시오, 클릭 다음과 같이 버튼, GIF 데모를 "제출"


폼의 POST 방법의 예

이 GET과 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);
	}
}

다음과 같이 이제, 테스트되었습니다 위의 서블릿의 배포를 컴파일하고 POST 방법과 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을 입력하려고하고, 버튼을 클릭, GIF 데모를 "제출"입니다 :


서블릿 상자 프로그램에 데이터를 전달하려면

당신은 상자를 사용하는 하나 이상의 옵션을 선택해야합니다.

다음은 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>

위의 예는 다음과 같은 결과를 표시합니다 :


양식의 모든 매개 변수를 읽고

다음은 폼의 사용할 수있는 모든 매개 변수를 읽을 수있는 HttpServletRequest의대해 getParameterNames () 메소드의 사용의 일반적인 예이다.이 방법은 순서를 지정하지 않은 매개 변수 이름을 포함하는 열거를 돌려줍니다.

우리가 열거를 갖게되면, 우리는 각 매개 변수의 이름을 얻기 위해nextElement ()메소드를 사용 중지 할시기를 결정하는 데()메소드hasMoreElements를사용하여 표준 방식으로 순환 열거 할 수 있습니다.

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>

이제 서블릿을 호출 위의 양식을 사용하여, 다음과 같은 결과를

당신은 그래서 텍스트 상자, 라디오 버튼, 또는 드롭 다운 상자와 같은 다른 위의 서블릿 형태로 데이터를 읽으려고 시도 할 수 있습니다.