2012-01-03 2 views
2

Я пытаюсь получить параметры формы из запроса GET. Ниже приведен код html.Параметры сервлета Java HttpServletRequest, отображающиеся как null

<!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> 

Вот код сервлета. Значения параметров, которые я получаю в doPost, равны нулю. Я попытался изменить все запросы на отправку в html, и это не помогло. Функция doGet перенаправляется только на doPost. Два основных параметра, которые меня интересуют прямо сейчас, - это параметры «contact_form» и «name_form» в конце html. Еще раз спасибо!

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"); 

} 
+0

Почему у вас так много

тегов? Вы должны просто иметь все поля ввода внутри одного тега формы. – Manish

+0

Большое спасибо. Кто-то еще сделал передний конец, поэтому я пытался подключить его к задней части, поэтому я просто предположил, что в html ничего плохого не было. Я собираюсь изменить его на одну форму и посмотреть, работает ли она –

ответ

3

Прежде всего, я думаю, вы должны оставить doPost и doGet как 2 различными способами. doPost будет автоматически активирован, если вы установите атрибут method вашей формы на post.

Кроме того, ваша форма должна выглядеть так:

<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_form и contact_form. Вот почему вы получили значения null.

+0

. Большое спасибо за ваш быстрый ответ. Я сделаю эти изменения в форме –

+0

@TimnitGebru, пожалуйста! :) –

0

Я думаю, вы недооцениваете элемент <form>. Чтобы отправить данные со страницы на сервлет, вы можете использовать method="get" или method="post" - оба по-прежнему отправляют данные в одну сторону (от клиента к серверу). Для разности см When do you use POST and when do you use GET?

<form> может включать в себя множество <input> с и, но основная часть, которая отсутствует из вашего кода является то, что <form>, что представление (один с <input type="submit"/>) не содержит какой-либо из <input> элементов вы ожидают. Они находятся в других <form> с, которые не отправляются. Только <form>, который содержит отправить кнопка отправлена.

Вы должны использовать один <form> вокруг всех своих полей и кнопку отправки.

Смежные вопросы