【问题标题】:Can i make a doPost and then doGet on the same submit button?我可以在同一个提交按钮上创建一个 doPost 然后 doGet 吗?
【发布时间】:2017-05-17 12:46:42
【问题描述】:

我有一个带有按钮提交的表单,我希望在单击按钮提交时通过 servlet 向数据库 (mariadb) 进行 POST,然后通过同一个 servlet 将值再次发布到同一事件的 HTML 页面(点击的按钮)。

当运行 servlet 时,它会通过 HTML 上的提交按钮获取新值。但只有当我自己运行 servlet 时(在 Netbeans 上右键单击代码并运行..)。它单独工作。

这里是doPost方法:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
  Gson convertir = new Gson();

    PrintWriter out = response.getWriter(); // PrintWriter imprime texto en un objeto. getWriter() devuelve un objeto PrintWriter.

    String texto = request.getReader().readLine();//getReader() devuelve el contenido de la respuesta. readLine() lee el contenido de la variable "texto" y lo retorna.

    TreeMap<String, String> objetoSabor = convertir.fromJson(texto, TreeMap.class);// Crea una lista treemap y convierte la respuesta de JSON a treemap..

    Class.forName("com.mysql.jdbc.Driver").newInstance();

        Connection conMDB = DriverManager.getConnection("jdbc:mysql://localhost/cremo", "root", "root");
        PreparedStatement sentencia = conMDB.prepareStatement("insert into inventarios (inv_hel_id, inv_sab_id, inv_cantidad  ) values (?,?,?)");
        sentencia.setString(1, objetoSabor.get("heladerias"));//"nombre" lo saca del objeto "sabor" en AJAX (sabor.nombre)
        sentencia.setString(2, objetoSabor.get("sabor"));//"calorias" lo saca del objeto "calorias" en AJAX (sabor.calorias)
        sentencia.setString(3, objetoSabor.get("calorias"));//"calorias" lo saca del objeto "calorias" en AJAX (sabor.calorias)
        sentencia.execute();

这里是 doGet 方法:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    PrintWriter out = response.getWriter();


    try {

        Class.forName("com.mysql.jdbc.Driver").newInstance();

        Connection conMDB = DriverManager.getConnection("jdbc:mysql://localhost/cremo", "root", "root");


        PreparedStatement sentencia = conMDB.prepareStatement( "select * from inventarios");


        ResultSet resultado = sentencia.executeQuery();//ResulSet pone el puntero en la primera fila de la tabla de la Base de datos.


        while( resultado.next() ){
          out.println("[OK] "  + request.getParameter("heladerias") + ", " + resultado.getString(2) + ", " + resultado.getString(3));
        }

html表单:

<form>
            <fieldset>
                <p>


                    <select id="heladerias" name="heladerias">
                        <option value="1">Palermo</option>
                        <option value="2">Recoleta</option>
                        <option value="3">Belgrano</option>
                    </select>

                    <select id="sabores" name="sabores" >
                        <option value="1">Sambayon italiano</option>
                        <option value="3">Sambayon Frances</option>
                        <option value="5">Mousse de Limon</option>
                        <option value="6">Pistacho</option>
                    </select>

                    <input id="sabor_calorias"   type="number" name="quantity" min="1" max="6000">

                </p>


                <input id="fecha" type="date" name="fecha" step="1" min="2016-01-01" max="2016-12-31">


                <input type="submit"  value="Submit" onclick="envioCorrecto()"/>

            </fieldset>
        </form>

【问题讨论】:

    标签: javascript java html servlets restful-architecture


    【解决方案1】:

    您只能在 doPost 方法中发送响应。无需单独编写 doGet 方法。将数据插入DB后,只在doPost方法中编写获取数据的逻辑。

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多