【问题标题】:Java Servlet HttpServletRequest parameters showing up as nullJava Servlet HttpServletRequest 参数显示为空
【发布时间】:2012-01-03 10:02:57
【问题描述】:

我正在尝试从 GET 请求中获取表单参数。 html代码如下。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>DesignMatch. Matching the best clients and best designers.</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript" src="jquery.backstretch.js"></script>
        <script type="text/javascript" src="design_match.js"></script>
        <link rel="stylesheet" type="text/css" media="all" href="design_match.css" />
    </head>
    <body>
        <div id="matte_bg"></div>
        <div id="entire_wrapper">
            <div class="divModule" id="section_head_1">
                <p class="primaryPageText">
                    Clients
                </p>
                <div class="url-bar">
                    <form name="clientUrls" action="SaveDatabase2" target="_blank" method="get">
                        <input type="text" class="url-box" id="url-box1" name="name1" size="20" value="Paste a link to a website that has the design qualities you want.">
                        <a id="add-url" href="#">Add</a>
                        <a id="del-url" href="#">Remove</a>
                    </form>
                </div>
            </div>
            <div class="divModule" id="section_head_2">
                <p class="primaryPageText">
                    Designers
                </p>
                <div class="portfolio-bar">
                    <form name="designerUrls" action="SaveDatabase2" target="_blank" method="get">
                        <input type="text" class="portfolio-box" id="portfolio-box1" name="name1" size="20" value="Paste a link to a website you designed.">
                        <a id="add-portfolio" href="#">Add</a>
                        <a id="del-portfolio" href="#">Remove</a>
                    </form>
                </div>
            </div>
            <div class="divModule">
                <div class="filterSentence">
                    <ul class="primaryPageText">
                        <li>
                            &nbsp; To me, &nbsp;
                        </li>
                        <li class="budgetTypeFilter">
                            <a href="#" id="budgetToggle">[what price]</a>
                            <div id='budgetFilter' style="display:none" class="budgetTypeMenu">
                                <a href="/500-under">$500 and under</a>
                                <a href="/500-to-1000">$500-$1,000</a>
                                <a href="/1000-to-2500">$1,000-$2,500</a>
                                <a href="/2500-to-5000">$2,500-$5,000</a>
                                <a href="/5000-to-7500">$5,000-$7,500</a>
                                <a href="/7500-to-10000">$7,500-$10,000</a>
                                <a href="/10000-above">Over $10,000</a>
                            </div>
                        </li>
                        <li>
                            &nbsp; seems fair to pay for &nbsp;
                        </li>
                        <li class="budgetTypeFilter">
                            <a href="#" id="typeToggle">[what type of]</a>
                            <div id='typeFilter' style="display:none" class="budgetTypeMenu">
                                <a href="/basic">a basic (e.g., front-end only)</a>
                                <a href="/dynamic">a dynamic (e.g., a little back-end)</a>
                                <a href="/sophisticated">a sophisticated (e.g., lots of back-end)</a>
                            </div>
                        </li>
                        <li>
                            &nbsp; website. &nbsp;
                        </li>
                    </ul>
                </div>
            </div>
            <div class="divModule contact-bar" id="contact">
                <form name="nameForm" action="SaveDatabase2" target="_blank" method="get">
                    <input type="text" id="name_form" name="name_form" size="20" value="Tell us your name.">
                </form>
                <form name="contactForm" action="SaveDatabase2" target="_blank" method="get">
                    <input type="text" id="contact_form" name="contact_form" size="20" value="Enter your e-mail (no spam, ever).">
                </form>
            </div>
            <div id="submit">
                <form accept-charset="UTF-8" action="SaveDatabase2" method="get">
                    <input class="btn primary large" id="submit-button" name="submit" type="submit" value="✔" />
                </form>
            </div>
        </div>
    </body>
</html>

这里是 Servlet 代码。我在 doPost 中得到的参数值为空。我尝试将所有获取请求更改为在 html 中发布,但没有帮助。 doGet 函数只是重新路由到 doPost。我现在感兴趣的两个主要参数是 html 末尾的“contact_form”和“name_form”参数。再次感谢!

package web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.StringUtils;
import java.sql.*;
import java.io.*;
import java.util.*;

/**
 * Servlet implementation class SaveDatabase2
 */
public class SaveDatabase2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public SaveDatabase2() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1> Thank You </h1>");

        //Get Info for Database     
        int designer=0;
        String clientType="";
        String name= "";
        String email="";
        //Get parameters to put into database
        Enumeration parameterNames = request.getParameterNames();
        if ((request.getParameter("designerUrls")!=null) && !request.getParameter("designerUrls").matches(".*\\w.*") ){
            designer=1;
        }
        if (designer==1){
            clientType="designer";
        }else clientType="client";

        name= request.getParameter("name_form");
        email=request.getParameter("contact_form");

}

【问题讨论】:

  • 为什么有这么多
    标签?您应该只在一个表单标签中包含所有输入字段。
  • 非常感谢。其他人做了前端,所以我试图将它连接到后端,所以我只是假设 html 没有任何问题。我要把它改成一种形式,看看能不能用

标签: java servlets


【解决方案1】:

首先,我认为您应该将doPostdoGet 保留为两种不同的方法。如果您将表单的属性method 设置为post,则会自动触发doPost

另外,你的表单应该是这样的:

<form name="myForm" accept-charset="UTF-8" action="SaveDatabase2" target="_blank" method="post">
   <input type="text" id="name_form" name="name_form" size="20" value="Tell us your name.">
   <input type="text" id="contact_form" name="contact_form" size="20" value="Enter your e-mail (no spam, ever).">
   <input class="btn primary large" id="submit-button" name="submit" type="submit" value="✔" />
</form>

在您的问题中,提交按钮采用自己的形式,不包含 2 个输入文本字段:name_formcontact_form。这就是您获得 null 值的原因。

【讨论】:

  • 非常感谢您的及时回复。我将在表单上进行这些更改
【解决方案2】:

我认为您误解了&lt;form&gt; 元素。要将数据从页面发送到 servlet,您可以使用 method="get"method="post" - 两者仍然以一种方式发送数据(客户端到服务器)。区别见When do you use POST and when do you use GET?

&lt;form&gt; 可以包含许多&lt;input&gt;s,但是您的代码中缺少的关键部分是正在提交的&lt;form&gt;(带有&lt;input type="submit"/&gt; 的那个)不包含任何@ 987654329@ 您期望的元素。它们在其他未提交的&lt;form&gt;s 中。仅提交包含 submit 按钮的&lt;form&gt;

您应该在所有字段和提交按钮周围使用一个&lt;form&gt;

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 2019-06-13
    • 1970-01-01
    • 2012-04-19
    • 2012-01-22
    • 2021-11-04
    • 2016-09-26
    • 2023-04-08
    • 2014-02-09
    相关资源
    最近更新 更多