Servlet表單隱藏字段

在隱藏表單字段的情況下,一般使用隱藏(不可見)文本字段來維護用戶的狀態。

在這種情況下,我們將信息存儲在隱藏字段中,並從另一個servlet獲取信息。 如果必須在所有頁面中提交表單,但不想依賴瀏覽器,這種方法會更好。

下面來看看看在隱藏字段中存儲值的代碼。

<input type="hidden" name="uname" value="maxsu">

這裏,必須指定input控件的type屬性爲:type="hidden"uname是隱藏的字段名稱,maxsu是隱藏字段uname的值。

應用隱藏表單字段

它廣泛用於網站的評論形式。 在這種情況下,我們將頁面ID或頁面名稱存儲在隱藏字段中,以便可以唯一標識每個頁面。

隱藏表單字段的優勢

  • Cookie是否被禁用隱藏表單字段都會始終有效。

隱藏表單字段的缺點:

  • 它在服務器端維護。
  • 每個頁面需要額外提交表單和字段。
  • 只能使用文本信息。

使用隱藏表單字段的示例

在本示例中,我們將用戶名稱存儲在隱藏的文本字段中,並從另一個servlet獲取該值。

Servlet表單隱藏字段

打開Eclipse,創建一個動態Web項目:HiddenFormField,其完整的目錄結構如下所示 -

Servlet表單隱藏字段

以下是幾個主要的代碼文件。

文件:index.html -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>隱藏表單字段</title>
</head>
<body>
    <div style="text-algin: center; padding-top: 12px;">
        <form action="servlet1" method="post">
            名字:<input type="text" name="username" /><input type="submit"
                value="提交" />
        </form>
    </div>
</body>
</html>

文件:FirstServlet.java -

package com.yiibai;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();

            String n = request.getParameter("username");
            out.print("Welcome " + n);

            // creating form that have invisible textfield
            out.print("<form action='servlet2' method='post'>");
            out.print("<input type='hidden' name='username' value='" + n + "'>");
            out.print("<input type='submit' value='提交'>");
            out.print("</form>");
            out.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

文件:SecondServlet.java -

package com.yiibai;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SecondServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();

            // Getting the value from the hidden field
            String n = request.getParameter("username");
            out.print("Hello " + n);

            out.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

文件:web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>HiddenFormField</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>s1</servlet-name>
        <servlet-class>com.yiibai.FirstServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>s1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>s2</servlet-name>
        <servlet-class>com.yiibai.SecondServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>s2</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
</web-app>

在編寫上面代碼後,部署此Web應用程序,打開瀏覽器訪問URL: http://localhost:8080/HiddenFormField/ ,如果沒有錯誤,應該會看到以下結果 -

Servlet表單隱藏字段

在上面輸入框中輸入:maxsu,提交應該會看到以下結果 -

Servlet表單隱藏字段

然後使用表單隱藏字段,再次提交,應該會看到以下結果 -

Servlet表單隱藏字段