📜  Servlet-表单数据

📅  最后修改于: 2020-11-12 05:37:03             🧑  作者: Mango


当您需要将一些信息从浏览器传递到Web服务器以及最终传递到后端程序时,您肯定遇到过许多情况。浏览器使用两种方法将此信息传递到Web服务器。这些方法是GET方法和POST方法。

GET方法

GET方法发送附加到页面请求的已编码用户信息。页面和编码信息由?分隔 (问号)符号如下-

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

GET方法是将信息从浏览器传递到Web服务器的默认方法,它会生成一个长字符串,该字符串出现在浏览器的Location:框中。如果您有密码或其他敏感信息要传递到服务器,请不要使用GET方法。 GET方法具有大小限制:请求字符串只能使用1024个字符。

此信息使用QUERY_STRING标头传递,并且可以通过QUERY_STRING环境变量进行访问,并且Servlet使用doGet()方法处理此类请求。

开机自检方法

将信息传递到后端程序的通常更可靠的方法是POST方法。这将以与GET方法完全相同的方式打包信息,但不是在?之后将其作为文本字符串发送。 (问号)在URL中作为单独的消息发送。此消息以标准输入的形式到达后端程序,您可以解析该标准输入并将其用于处理。 Servlet使用doPost()方法处理这种类型的请求。

使用Servlet读取表单数据

Servlet根据情况使用以下方法自动处理表单数据解析-

  • getParameter() -您调用request.getParameter()方法以获取表单参数的值。

  • getParameterValues() -如果参数出现多次并返回多个值(例如复选框) ,则调用此方法。

  • getParameterNames() -如果要获取当前请求中所有参数的完整列表,请调用此方法。

使用URL的GET方法示例

这是一个简单的URL,它将使用GET方法将两个值传递给HelloForm程序。

http:// localhost:8080 / HelloForm?first_name = ZARA&last_name = ALI

下面给出的是HelloForm.java Servlet程序,用于处理Web浏览器给出的输入。我们将使用getParameter()方法,这使得访问传递的信息非常容易-

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         ""-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "\n" +
            "" + title + "\n" +
            "\n" +
               "

" + title + "

\n" + "
    \n" + "
  • First Name: " + request.getParameter("first_name") + "\n" + "
  • Last Name: " + request.getParameter("last_name") + "\n" + "
\n" + "" + "" ); } }

假设您的环境设置正确,请按如下所示编译HelloForm.java-

$ javac HelloForm.java

如果一切顺利,上面的编译将产生HelloForm.class文件。接下来,您必须复制 / webapps / ROOT / WEB-INF / classes中的此类文件,并在 / webapps / ROOT / WEB-中的web.xml文件中创建以下条目。 INF /


   HelloForm
   HelloForm



   HelloForm
   /HelloForm

现在,在浏览器的“位置:”框中键入http:// localhost:8080 / HelloForm?first_name = ZARA&last_name = ALI ,并确保在启动浏览器中的上述命令之前已启动tomcat服务器。这将产生以下结果-

Using GET Method to Read Form Data
  • :ZARA
  • 姓氏:ALI

使用表单的GET方法示例

这是一个简单的示例,该示例使用HTML FORM和Submit按钮传递两个值。我们将使用相同的Servlet HelloForm来处理此输入。

First Name:
Last Name:

将此HTML保留在Hello.htm文件中,并将其放在 / webapps / ROOT目录中。当您访问http:// localhost:8080 / Hello.htm时,这是上述形式的实际输出。

名字:姓:

尝试输入名和姓,然后单击提交按钮以在运行tomcat的本地计算机上查看结果。根据提供的输入,它将生成与以上示例中提到的结果类似的结果。

使用表单的POST方法示例

让我们在上面的servlet中进行少量修改,以便它可以处理GET和POST方法。下面是HelloForm.java Servlet程序,用于处理Web浏览器使用GET或POST方法给出的输入。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         ""-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "\n" +
            "" + title + "\n" +
            "\n" +
               "

" + title + "

\n" + "
    \n" + "
  • First Name: " + request.getParameter("first_name") + "\n" + "
  • Last Name: " + request.getParameter("last_name") + "\n" + "
\n" + "" "" ); } // Method to handle POST method request. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

现在编译并部署上述Servlet,并使用Hello.htm和POST方法对其进行测试,如下所示:

First Name:
Last Name:

这是上面表格的实际输出,请尝试输入名和姓,然后单击提交按钮以在运行tomcat的本地计算机上查看结果。

名字:姓:

根据提供的输入,它将生成与以上示例中提到的结果类似的结果。

将复选框数据传递到Servlet程序

当需要选择多个选项时,将使用复选框。

这是带有两个复选框的表单的示例HTML代码CheckBox.htm

Maths Physics Chemistry

该代码的结果如下表所示

数学物理化学

下面提供的CheckBox.java servlet程序可以处理Web浏览器为复选框按钮提供的输入。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class CheckBox extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Checkbox Data";
      String docType =
         ""-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "\n" +
            "" + title + "\n" +
            "\n" +
               "

" + title + "

\n" + "
    \n" + "
  • Maths Flag : : " + request.getParameter("maths") + "\n" + "
  • Physics Flag: : " + request.getParameter("physics") + "\n" + "
  • Chemistry Flag: : " + request.getParameter("chemistry") + "\n" + "
\n" + "" "" ); } // Method to handle POST method request. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

对于上面的示例,它将显示以下结果-

Reading Checkbox Data
  • 数学标志::开
  • 物理标志:: null
  • 化学标志::开

读取所有表格参数

以下是使用HttpServletRequest的getParameterNames()方法读取所有可用表单参数的通用示例。此方法返回一个Enumeration,其中包含未指定顺序的参数名称

有了枚举后,我们可以使用hasMoreElements()方法确定何时停止并使用nextElement()方法获取每个参数名称,从而以标准方式循环枚举。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ReadParams extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading All Form Parameters";
      String docType =
         ""-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "\n" +
         "" + title + "\n" +
         "\n" +
         "

" + title + "

\n" + "
Param Name Param Value(s)
maths on
chemistry on

现在,以以下形式尝试上述servlet-

Maths Physics Chem

现在使用上述形式调用servlet将产生以下结果-

Reading All Form Parameters
参数名称 参数值
数学
化学

您可以尝试上述servlet读取具有其他对象(例如文本框,单选按钮或下拉框等)的任何其他表单的数据。