【问题标题】:Java Servlet Validation ConfusedJava Servlet 验证困惑
【发布时间】:2013-05-06 12:04:46
【问题描述】:

我在执行服务器端 servlet 验证时发现了一些问题 给定表格,我需要验证名字文本字段

     <form action="Test" method="POST">
        <input type="text" name="firstname" />
        <input type="submit" value="submit" />
    </form>

对我不起作用的 Servlet 验证代码。它总是看到 firstname 的 length=0 而不是 null

if(request.getParameter("firstname")==null)
    {
        out.println("Error");
    }`

但在修改表单后添加 enctype="multipart/form-data" 为

<form action="Test" method="POST" enctype="multipart/form-data" >
        <input type="text" name="firstname" />
        <input type="submit" value="submit" />
    </form>

验证码有效,,,

这里的问题是 enctype="multipart/form-data" 的功能是什么? 还 为什么 request.getParameter("firstname") 不为空字段返回 null ?它返回空字符串

【问题讨论】:

  • 我很困惑,因为所有教程我都用上述方式进行了验证,没有 enctype="multipart/form-data" 为什么它不起作用?
  • 如果要进行验证,请添加 onsubmit="return functionName();"在像
    In script
  • @Rujvendra 是的,你的方法是正确的,但它是使用 javaScrip 进行客户端验证,但我正在谈论服务器端验证以避免在客户端浏览器上禁用 javaScript 的情况

标签: jsp servlets


【解决方案1】:
if(request.getParameter("firstname")==null)

这会检查字符串的引用是否指向 null,我猜这不是您想要做的。如果要检查空字符串,请执行以下操作:

if(request.getParameter("firstname")==null 
     || request.getParameter("firstname").isEmpty())

使用enctype="multipart/form-data" 时,所有参数都在请求正文中编码。这意味着 request.getParameter(...) 将为所有发布的参数返回 null

【讨论】:

  • 检查 request.getParameter("firstname").isEmpty() 将给出具有 enctype="multipart/form-data" 的第二种形式的空指针异常
  • @ahmedab​​obakr 不,不会。只有当 request.getParameter("firstname")==null 评估为 false 时才会评估它。
  • 为什么 request.getParameter("firstname") 不为空字段返回 null ?它返回空字符串
  • 因为输入字段被提交为空值。如果输入字段根本没有提交,则返回null。这也完全解释了以getParameter()不再起作用的方式更改表单编码时的行为(尝试填写输入值,您会看到它仍然返回null!)
  • @w4rumy:至于最后一段,您将 POST 方法与编码混淆/混合。即使没有明确指定编码类型,参数仍然在请求正文中。顺便说一句,我也不明白您为什么将“参考”一词加粗。这在这里无关紧要。
猜你喜欢
  • 1970-01-01
  • 2016-06-06
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多