表单加载,但过程不会停止

时间:2013-02-14 13:53:07

标签: java javascript jsp servlets

我在JSP页面中从arraylist查看记录时遇到问题。每次我通过javascript onload事件自动加载我的JSP页面时,都会显示数据,但过程不会停止。

Categoria上课:

package proyecto.modelo;

public class Categoria {

    private int idcategoria;

    public int getIdcategoria() {
        return idcategoria;
    }

    public void setIdcategoria(int idcategoria) {       
        this.idcategoria = idcategoria;
    }
}

BaseDAO上课:

package proyecto.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BaseDAO {

    protected void cerrarConexion(Connection con) throws RuntimeException {
        try {
            if (con != null && !con.isClosed()) {
                con.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarConexion: " + se);
        }
    }

    protected void cerrarResultSet(ResultSet rs) throws RuntimeException {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarResultSet: " + se);
        }
    }

    protected void cerrarStatement(PreparedStatement stmt)
            throws RuntimeException {
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarStatement: " + se);
        }
    }

    protected void cerrarCallable(CallableStatement callstmt)
            throws RuntimeException {
        try {
            if (callstmt != null) {
                callstmt.close();
            }
        } catch (SQLException se) {
            System.err.println("Error: cerrarCallable: " + se);
        }
    }
}

CategoriaDAO上课:

package proyecto.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Categoria;
import proyecto.util.ConexionBD;

public class CategoriaDAO extends BaseDAO {

    public Collection<Categoria> listarIdCat() throws DAOExcepcion{

        Collection<Categoria> = new ArrayList<Categoria>();
        String query = "SELECT id_categoria from categoria ";
        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            con=ConexionBD.obtenerConexionDirecta();
            stmt=con.prepareStatement(query);
            rs=stmt.executeQuery();

            while(rs.next()) {
                Categoria vo=new Categoria();
                vo.setIdcategoria(rs.getInt("id_categoria"));
                c.add(vo);
            }

        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOExcepcion(e.getMessage());
        } finally {
            this.cerrarStatement(stmt);
            this.cerrarResultSet(rs);
            this.cerrarConexion(con);
        }

        return c;
    }

}

CategoriaNegocio上课:

package proyecto.negocio;

import java.util.Collection;
import java.util.List;

import proyecto.dao.CategoriaDAO;
import proyecto.excepcion.DAOExcepcion;
import proyecto.modelo.Categoria;

public class CategoriaNegocio {

    public Collection<Categoria> listarIdCat() throws DAOExcepcion {
        CategoriaDAO dao = new CategoriaDAO();
        Collection<Categoria> lista = dao.listarIdCat();
        return lista;
    }

}

Servlets doPost()方法:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    CategoriaNegocio negocio = new CategoriaNegocio();

    try {
        Collection<Categoria> lista = negocio.listarIdCat();
        request.setAttribute("IDCATEGORIA", lista);
    } catch (DAOExcepcion e) {
        System.out.println(e.getMessage());
    }

    RequestDispatcher rd = request.getRequestDispatcher("listar_idcat.jsp");
    rd.forward(request, response);
}

JSP:

<%@page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"   %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
    <head>
        <script type="text/javascript">
            window.onload = function() {
                document.formulario.submit()
            };
            document.close();
        </script>
    </head>
    <body>
        <form action="ListarIdCatServlet" method="post" name="formulario"></form>
        <table>
            <c:forEach items="${IDCATEGORIA}" var="c">
                <tr>
                    <td>${c.idcategoria}</td>
                </tr>
            </c:forEach>
        </table>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

您似乎想要在GET请求上调用servlet。你接近这个错误的方式。您不应该在加载页面时提交POST表单。您应该在servlet的doGet()方法中执行该作业,并直接调用它。

您需要进行以下更改:

  1. 将servlet的URL模式更改为/listar_idcat

  2. 将servlet的doPost方法重命名为doGet

  3. listar_idcat.jsp文件移至/WEB-INF文件夹(这会阻止最终用户直接访问)。

  4. 将servlet中的getRequestDispatcher("listar_idcat.jsp");调用更改为getRequestDispatcher("/WEB-INF/listar_idcat.jsp");

  5. 从JSP中删除整个<script>

  6. 从JSP中删除整个<form>

  7. 现在,通过http://localhost:8080/context/listar_idcat打开JSP(是的,没有.jsp扩展名!它将直接调用servlet的doGet()

    另见: