与HTML表单结合
时间:2018-11-15 12:08:03 来源:igfitidea点击:
HTML表单用于从用户处获取数据, 当表单提交后, 在服务端获取这些数据进行进一步处理,比如业务逻辑验证、将数据保存到数据库中等。
表单和JSP处理脚本分离
创建一个HTML表单用于获取用户的信息:
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>JSP Form Demo</title> <style type="text/css"> label{ margin-right:20px;} input{ margin-top:5px;} </style> </head> <body> <form action="handleUserInfo.jsp" method="post"> <fieldset> <legend>用户信息</legend> <label for="name">名字</label> <input type="text" name="name" /> <br/> <label for="email">邮箱</label> <input type="text" name="email" /> <br/> <input type="submit" value="submit"> </fieldset> </form> </body> </html>
在form标签中,可以看到使用post方法将表单数据发送到服务器。我们需要创建一个负责获取表单数据并进行处理的JSP文件handleUserInfo.jsp
。
handleUserInfo.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>JSP 表单演示</title> </head> <body> <% String name = request.getParameter("name"); String email = request.getParameter("email"); %> <p>Hi <%=name%>! 你提交的邮箱地址是: <%=email%>.</p> </body> </html>
在处理脚本Servelet的中,我们使用了request对象的getParameter()方法来获取表单数据, 它返回名称对应的表单字段的值。getParameter()
方法的返回值总是字符串类型的,因此,如果表单字段的值是数字,则必须对getParameter()返回值进行转换。如果字段不存在,则返回null
。
单个JSP页面中处理HTML表单
之前的HTML表单的代码和处理表单的JSP代码分别位于不同的文件中。
现在让我们看一下如何在单个JSP页面中处理HTML表单。
首先,我们需要在HTML表单中添加一个额外的隐藏字段。当用户提交表单数据时,我们通过这个隐藏字段的值来判断是否提交了表单。
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <title>JSP 处理表单</title> <style type="text/css"> label{ margin-right:20px;} input{ margin-top:5px;} </style> </head> <body> <% String val = request.getParameter("isSubmitted"); int isSubmitted = 0; if (val != null) { isSubmitted = Integer.parseInt(val); if (isSubmitted == 1) { String name = request.getParameter("name"); String email = request.getParameter("email"); out.println("<p>Hi " + name + "!你提交的邮箱地址是:" + email +".</p>"); } } %> <% if (isSubmitted == 0) {%> <form action="index.jsp" method="post"> <fieldset> <legend>用户信息</legend> <label for="name">名字</label> <input type="text" name="name" /> <br/> <label for="email">邮箱</label> <input type="text" name="email" /> <br/> <input type="hidden" name="isSubmitted" value="1" /> <input type="submit" value="submit"> </fieldset> </form> <%}%> </body> </html>
注意,在action中的文件名必须和文件一致,或者留空。
当不是提交表单时,request.getParameter("isSubmitted")
返回为空, 转换后isSubmitted
值为0。 所以将显示表单。
当提交表单后,isSubmitted
值为1。 JSP页面将继续获取name 和email的值并进行显示。
在这里,为了演示,我们是把用户提交的数据未经过处理直接就进行显示了。但是为了系统安全,
处理表单时要记住的最重要的一点是:永远不要信任从客户端提交的数据。
- 不仅需要在客户端进行简单验证,比如使用JavaScript检查必填字段是否填写,电子邮件格式是否正确。
- 更需要在服务器端,对收集的数据进行简单验证,业务验证后才可以进行显示或者存储到数据库中。
诊断
如果你遇到这样的问题:
descriptionThe server encountered an internal error that prevented it from fulfilling this request. exception java.lang.UnsupportedClassVersionError: Class org.mypackage.hello.NameHandler has unsupported major or minor version numbers, which are greater than those found in the Java Runtime Environment version 1.8.0_221 note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 5.0 logs.
在Libraries中选择Properties
: