📜  Servlet – 表单数据

📅  最后修改于: 2022-05-13 01:55:11.668000             🧑  作者: Mango

Servlet – 表单数据

Servlet 是在支持Java的 Web 服务器或应用程序服务器上运行的 Java 程序。它们用于处理从网络服务器获得的请求,处理请求,产生响应,然后将响应发送回网络服务器。 Servlet 的属性如下:

  • Servlet 在服务器端工作。
  • Servlet 能够处理从网络服务器获得的复杂请求。

那么,“处理客户数据”是什么意思?

我们一定遇到过许多需要用数据填写表格才能访问某些应用程序的情况。在这种情况下,作为开发人员,您需要处理从浏览器传递到 Web/应用程序服务器并最终传递到后端程序以处理该请求的数据或信息。在本章中,我们将学习如何使用 Servlet 处理这种形式的数据。

HttpServlet 类

Java提供了 HttpServlet 类,它扩展了 GenericServlet 类来处理网站的特定于 HTTP 的请求/响应。它提供了 HTTP 特定的方法,例如 doGet()、doPost()、doPut()、doDelete() 等。如果我们在类中扩展 HttpServlet,我们必须至少覆盖这些方法中的一个来处理请求并发送回复。我们需要使用 servlet 类中的 doGet() 或 doPost() 方法,根据表单中指定的方法从浏览器获取信息。

GET方法类型和doGet()方法

servlet 中的 doGet() 方法用于处理 HTTP GET 请求。因此,基本上,应该使用 HTTP GET 方法将数据从服务器获取到浏览器。尽管在某些请求中,GET 方法也用于将数据从浏览器发送到服务器。在这种情况下,您需要了解以下有关 GET 方法如何工作的要点。

  • 正在提交给服务器的数据将在 URL 中使用查询参数可见,例如“ http://localhost:8080/HelloServlet/hello?myParam=myValue ”。
  • 因此,如果您要发送任何敏感信息(如密码),则不应使用 GET 方法,因为输入的数据可以在浏览器 URL 中清晰可见。

POST 方法类型和 doPost() 方法

servlet 中的 doPost() 方法用于处理 HTTP POST 请求。它用于将数据从浏览器提交到服务器进行处理。使用 POST 方法类型提交的数据是在消息体中发送的,因此它是安全的,在 URL 中是看不到的。并且可以通过 POST 方法发送的数据没有限制。理想情况下,我们需要使用 POST 方法,将表单数据发送到网络服务器。因此,我们将在此示例中使用 doPost() 方法。并且我们将学习如何处理servlet中的一些常见的HTML字段数据,例如Text field、Checkbox、Radio button、Dropdown等,值。

为此, Java提供了ServletRequest接口。

HttpServlet请求(一):

  • HttpServletRequest 接口扩展了 ServletRequest 接口,为 Servlet 提供特定于 Http 的请求信息。
  • servlet 容器创建一个 HttpServletRequest 对象并将其作为参数传递给 servlet 的服务方法——doPost()、doGet() 等,
  • 该对象提供参数名称和值、属性和输入流等数据。它有多种方法来处理客户端数据。
  • 在本例中,我们将使用getParameter () 和getParameterValues () 来读取表单字段的值。

getParameter() 方法:

  • 该方法从给定名称指定的请求中返回字段/参数的值,作为字符串。如果指定的参数名称不存在,则返回 null。
  • 此方法应该用于只有一个值的参数。如果有多个值,那么它只返回第一个值。

句法:

Java
// String type specifying the parameter 
// name of which the value to be returned as String
java.lang.String getParameter(java.lang.String name)


Java
// String type specifying the parameter name
// of which the values to be returned in array
java.lang.String[] getParameterValues(java.lang.String name)


HTML




User Details


    

Fill in the Form

       
                                                                                                                                                                                                                                                                                                                                                                                               
Full Name:
Phone Number:
Gender:Male                      Female
Select Programming Languages to learn:Java                     Python                     SQL                     PHP
Select Course duration:
Anything else you want to share:
                   
  


Java
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 FormDataHandle
  
// Annotation to map the Servlet URL
@WebServlet("/FormData")
public class FormDataHandle extends HttpServlet {
    private static final long serialVersionUID = 1L;
  
    // Auto-generated constructor stub
    public FormDataHandle() {
        super();
    }
  
    // HttpServlet doPost(HttpServletRequest request, HttpServletResponse response) method
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
        // Get the values from the request using 'getParameter'
        String name = request.getParameter("name");
        String phNum = request.getParameter("phone");
        String gender = request.getParameter("gender");
          
        // To get all the values selected for 
        // programming language, use 'getParameterValues'
        String progLang[] = request.getParameterValues("language");
        
        // Iterate through the String array to 
        // store the selected values in form of String
        String langSelect = "";
        if(progLang!=null){
            for(int i=0;i");
        out.print("

Details Entered


");                    out.print("Full Name: "+ name + "
");         out.print("Phone Number: "+ phNum +"
");         out.print("Gender: "+ gender +"
");         out.print("Programming languages selected: "+ langSelect +"
");         out.print("Duration of course: "+ courseDur+"
");         out.print("Comments: "+ comment);                    out.print("");                }    }


getParameterValues() 方法:

该方法返回一个字符串对象数组,其中包含请求中给定字段/参数的所有值。如果指定的参数名称不存在,则返回 null。

句法:

Java

// String type specifying the parameter name
// of which the values to be returned in array
java.lang.String[] getParameterValues(java.lang.String name)

例子

我们将创建一个简单的表单来从客户那里获取详细信息,如下所示,

申请表

创建应用程序的步骤:

  • 创建一个 HTML 以从客户端获取输入数据。
  • 创建一个 Servlet 来处理数据、处理请求并生成响应。
  • 运行应用程序。

创建 Details.html 页面:

HTML





User Details


    

Fill in the Form

       
                                                                                                                                                                                                                                                                                                                                                                                               
Full Name:
Phone Number:
Gender:Male                      Female
Select Programming Languages to learn:Java                     Python                     SQL                     PHP
Select Course duration:
Anything else you want to share:
                   
  
  • 使用常见的 HTML 标记创建表单页面。
  • 为了以结构化的方式显示表单域,我们使用了 标签。
  • 我们有“全名”“电话号码”作为输入文本字段,“性别”作为单选按钮,“编程语言”作为复选框,下拉值中的“课程持续时间”和“评论”的文本区域。
  • 我们提到了' FormData '的表单动作和' post '的方法。所以,当表单提交时,页面会映射到URL——'/ FormData '特定的Servlet并执行' doPost() '方法。
  • 创建表单数据句柄。 Java小服务程序:

    Java

    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 FormDataHandle
      
    // Annotation to map the Servlet URL
    @WebServlet("/FormData")
    public class FormDataHandle extends HttpServlet {
        private static final long serialVersionUID = 1L;
      
        // Auto-generated constructor stub
        public FormDataHandle() {
            super();
        }
      
        // HttpServlet doPost(HttpServletRequest request, HttpServletResponse response) method
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              
            // Get the values from the request using 'getParameter'
            String name = request.getParameter("name");
            String phNum = request.getParameter("phone");
            String gender = request.getParameter("gender");
              
            // To get all the values selected for 
            // programming language, use 'getParameterValues'
            String progLang[] = request.getParameterValues("language");
            
            // Iterate through the String array to 
            // store the selected values in form of String
            String langSelect = "";
            if(progLang!=null){
                for(int i=0;i");
            out.print("

    Details Entered


    ");                    out.print("Full Name: "+ name + "
    ");         out.print("Phone Number: "+ phNum +"
    ");         out.print("Gender: "+ gender +"
    ");         out.print("Programming languages selected: "+ langSelect +"
    ");         out.print("Duration of course: "+ courseDur+"
    ");         out.print("Comments: "+ comment);                    out.print("");                }    }
    • 我们不使用 web.xml 将 URL 请求映射到 servlet,而是使用“ @WebServlet() ”注释将 URL 映射到 servlet。
    • 提交表单页面后,将调用 Servlet 类的“ doPost() ”方法。
    • 字段值在 HTTP servlet 请求中以参数的形式提交给 servlet。因此,我们可以在请求对象上使用“ getParameter() ”和“ getParameterValues() ”方法获取这些参数值。

    解释:

    正如我们所了解的,要获取只有一个值的字段值,使用了“ getParameter() ”。所以对于田野,

    • 电话号码
    • 性别
    • 课程时间
    • 评论

    ' getParameter() ' 以字符串形式返回相应的参数值。但是“编程语言”字段是复选框类型,我们可以为该复选框选择多个值。因此,“ getParameterValues() ”方法将所有选定的值作为数组返回。这样,在浏览器中输入的所有输入数据都将通过请求正文传递到相应的 servlet。获取参数值后,我们可以执行自己的逻辑来处理信息,例如,

    • 可以对数据进行验证
    • 可以使用 JDBC 将这些值存储到数据库中
    • 可以将数据传递给另一个资源,如 Servlet 或 JSP 等,

    在这个例子中,我们只是简单地将我们从请求对象中得到的输入数据通过响应对象写入浏览器。为此,我们使用Java.io 包中的 PrintWriter 类对象。

    • 将响应的内容类型设置为“ text/html ”,以便响应处理通过 PrintWriter 对象提供的 html 标签。
    • 要打印数据,请使用“打印”语句并传递相应的变量。

    输出:

    • 要运行应用程序,请右键单击项目,运行方式 -> 在服务器上运行
    • 在浏览器中运行 URL: http://localhost:8080/JavaServletFormData/Details.html以获取初始表单页面。

    详细信息.html 页面

    • HTML 表单页面将显示所有字段。

    • 在各个字段中输入所有值,然后单击“提交详细信息”。
    • 详细信息将提交给 servlet,并将数据写入浏览器上显示的响应中。

    输出细节

    • 您可以检查映射到 servlet 的 URL 中的更改。

    这样,我们可以使用 HttpServletRequest 接口中的方法处理 Servlet 类中的 HTML 表单数据。