2021-04-21 08:34  阅读(73)
文章分类:Servlet 简单教程 文章标签:Servlet
©  原文作者:一点教程 原文地址:http://www.yiidian.com/servlet/

表单隐藏域也是一种会话跟踪技术。

如果使用了“表单隐藏域”,将使用一个隐藏(不可见)文本域来维护用户的状态。

在这种情况下,我们将信息存储在表单的隐藏域中,并从另一个Servlet获取该隐藏域信息。如果我们必须在所有页面中都需要提交表单,并且我们不想依赖浏览器(如Cookie),那么可以使用这种方式。

以下代码是表单隐藏域示例。

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

以上示例中,uname是隐藏域的名称,而yiidian是隐藏域的值。

1 表单隐藏域的应用

这种方式在网站的评论功能中广泛被使用。在评论功能中,我们可以将页面ID或页面名称存储在隐藏字段中,以便可以唯一地标识每个评论页面。

2 表单隐藏域的优势

无论浏览器是否禁用Cookie,表单隐藏域都可以使用。

3 表单隐藏域的缺点

  1. 它在服务器端维护。
  2. 每页都需要提交额外的表单。
  3. 只能使用文字(字符串)信息。

4 表单隐藏域的案例

在下面示例中,我们将用户名存储在一个表单的隐藏域的文本字段中,并从另一个Servlet获取该值。

4.1 编写页面

index.jsp:

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>一点教程网-表单隐藏域的使用</title>
    </head>
    <body>
    <form action="servlet1" method="post">
        用户名:<input type="text" name="userName"/><br/>
        <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

4.2 编写FirstServlet

FirstServlet:

    
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class FirstServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
    
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                String n=request.getParameter("userName");
                out.print("欢迎 "+n);
    
                //creating form that have invisible textfield
                out.print("<form action='servlet2'>");
                out.print("<input type='hidden' name='uname' value='"+n+"'>");
                out.print("<input type='submit' value='提交'>");
                out.print("</form>");
                out.close();
    
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

4.3 编写SecondServlet

SecondServlet:

    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     */
    public class SecondServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            try{
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
    
                //获取表单隐藏域数据
                String n=request.getParameter("uname");
                out.print("你好 "+n);
    
                out.close();
            }catch(Exception e){
                System.out.println(e);
            }
        }
    }

4.4 配置web.xml

web.xml:

    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>FirstServlet</servlet-name>
            <servlet-class>FirstServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>FirstServlet</servlet-name>
            <url-pattern>/servlet1</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>SecondServlet</servlet-name>
            <servlet-class>SecondServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>SecondServlet</servlet-name>
            <url-pattern>/servlet2</url-pattern>
        </servlet-mapping>
    
    </web-app>

4.5 运行测试

20210421083111_1.png

提交后,效果如下:

2021042108317_2.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Servlet中使用表单隐藏域
上一篇
使用Cookie完成登录注销案例
下一篇
Servlet中实现URL重写