【发布时间】:2016-11-01 15:10:35
【问题描述】:
我正在通过阅读一本书和一些在线教程来学习 JSP 和 Servlet。我对使用 JSP 和 Servlet 的 Web 编程完全陌生。
我遇到了一个我想理解的例子。
index.html
<form action="emailList" method="post">
<input type="hidden" name="action" value="add" />
<label>Email: </label>
<input type="email" name="email" required /> <br />
<label>First Name:</label>
<input type="text" name="firstName" required /> <br/>
<label>Last Name:</label>
<input type="text" name="lastName" required /> <br />
<label> </label>
<input type="submit" value="Join Now" id="submit" />
</form>
EmailServlet.java
public class EmailListServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String url = "/index.html";
//get the current action
String action = req.getParameter("action");
if(action == null){
action = "join"; //default action
}
//perform action and set URL to appropriate page
if(action.equals("join")){
url = "/index.html"; //the join page
}
else if(action.equals("add")){
//get parameters from the request
String firstName = req.getParameter("firstName");
String lastName = req.getParameter("lastName");
String email = req.getParameter("email");
//store data in User object and save User object in database
User user = new User(firstName, lastName, email);
UserDB.insert(user);
//set User object in request object and set URL
req.setAttribute("user", user);
url = "/thanks.jsp"; //the thanks page
}
//forward request and response objects to specified url
getServletContext().getRequestDispatcher(url).forward(req, resp);
}
我不明白的是IF-ELSE 部分。
我在某处读到,使用隐藏<input> 的主要目的是确定表单的状态。我的理解是,一种检查表单字段(或参数)是否为空的方法。
如果是这样,那么value="add" 属性的用途是什么?
因为在 else if(action.equals("add")) 上使用了 add。
req.getParameter() 会返回什么?
//get the current action
String action = req.getParameter("action");
我问是因为过去我在 PHP 上做过一些 CRUD 项目,它使用 ff 检查表单是否没有空参数。
if(isset($_POST['btnSave'])){
}
<form method ="POST" action="index.php">
<label>First Name<input type="text" name="firstname" required></label>
<br /><br />
<label>Last Name<input type="text" name="lastname" required></label>
<br /><br />
<input type = "submit" name="btnSave" value="Save" />
<input type = "submit" name="btnSearch" value="Search" />
</form>
相反,在最后一个表单示例中,它使用了btnSave(表单按钮)而不是hidden input。
我只是不明白使用value="add" 的意义以及req.getParameter("action") 可以返回什么。因为用在IF-ELSE上
我会很感激任何解释。
谢谢。
【问题讨论】:
-
req.getParameter("action") 返回action的值,即add
-
隐藏字段就像任何输入字段一样。不同的是它不会出现在屏幕上,用户也不能修改它的值。除此之外,它允许像任何其他字段一样提交请求参数。在这种情况下,它用于告诉服务器要做什么(添加或加入)。