Servlet中使用表单隐藏域
表单隐藏域也是一种会话跟踪技术。
如果使用了“表单隐藏域”,将使用一个隐藏(不可见)文本域来维护用户的状态。
在这种情况下,我们将信息存储在表单的隐藏域中,并从另一个Servlet获取该隐藏域信息。如果我们必须在所有页面中都需要提交表单,并且我们不想依赖浏览器(如Cookie),那么可以使用这种方式。
以下代码是表单隐藏域示例。
<input type="hidden" name="uname" value="yiidian">
以上示例中,uname是隐藏域的名称,而yiidian是隐藏域的值。
1 表单隐藏域的应用
这种方式在网站的评论功能中广泛被使用。在评论功能中,我们可以将页面ID或页面名称存储在隐藏字段中,以便可以唯一地标识每个评论页面。
2 表单隐藏域的优势
无论浏览器是否禁用Cookie,表单隐藏域都可以使用。
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 运行测试
提交后,效果如下:
热门文章
优秀文章