没有从 JSP 调用 doGet() Servlet 方法

doGet() Servlet method not being invoked from JSP

我想通过调用从 SQL 数据库检索数据的 servlet 的 doGet() 方法来预填充一些复选框。我在 SO 上看到,添加链接到 servlet 的按钮或 href 应该调用 doGet() 方法,但它不起作用(而且调用该方法的方式似乎很混乱)。

出于某种原因,下面的代码没有调用 doGet 方法,并且由于 LenderLoanTypes 对象为空(doGet 方法填充它)而失败并返回 NPE。

知道为什么 JSP 没有调用 doGet() 吗?从 JSP 调用 doGet 方法有没有更优雅的方法?谢谢你。

这是 lenderLoanTypes.jsp

的 JSP 代码
<%@page import="com.jexel.util.LenderLoanTypes"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Lender Loan Types</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/LenderLoanType" class="button">Projeler</a> 
<form action="/LenderLoanType"><button type="submit">Projeler</button></form><br>

    <div>Indicate the types of loans that you make by checking the boxes below: </div>
    <div>Then press submit  </div>

    <% LenderLoanTypes data=(LenderLoanTypes)request.getAttribute("loanTypes"); %>

    <form method="get">
        <input type="checkbox" name="loanTypes" value="equipmentFinance"     <%= (data.isEquipmentFinance() ? "checked=checked" : "") %> >equipment Finance<br>
        <input type="checkbox" name="loanTypes" value="inventoryFinance" <%= (data.isInventoryFinance() ? "checked=checked" : "") %> >inventory Finance<br>
        <input type="checkbox" name="loanTypes" value="supplyChainFinance" <%= (data.isSupplyChainFinance() ? "checked=checked" : "") %> >supply Chain Finance<br>
        <input type="submit" value="Update">
    </form>
</body>
</html>

这里是 servlet LenderLoanType.java

的 servlet 代码 doGet 方法
@WebServlet(name = "LenderLoanType", urlPatterns = {"/LenderLoanType"})
public class LenderLoanType extends HttpServlet {

/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println(" in do get ");
    HttpSession session = request.getSession();
    User user = (User) session.getAttribute("User");
    String company = user.getcompany();

    System.out.println("company = " + company);
    Connection con = (Connection) getServletContext().getAttribute("DBConnection");
    PreparedStatement ps = null;
    ResultSet rs = null;
    LoanTypes loanTypes = null;

    try {
        ps = con.prepareStatement("select equipmentFinance, inventoryFinance, supplyChainFinance from LenderLoanTypes where company=?  limit 1");
        ps.setString(1, company);
        rs = ps.executeQuery();

        if (rs != null && rs.next()) {

            loanTypes = new LoanTypes(company, rs.getBoolean("equipmentFinance"), rs.getBoolean("inventoryFinance"), rs.getBoolean("supplyChainFinance"));
        } else {
            loanTypes = new LoanTypes(company, false, false, false);
        }
    } catch (SQLException e) {
        e.printStackTrace();
        //    logger.error("Database connection problem");
        throw new ServletException("DB Connection problem.");
    } finally {
        try {
            rs.close();
            ps.close();
        } catch (SQLException e) {
            //   logger.error("SQLException in closing PreparedStatement or ResultSet");;
        }

    }
    System.out.println("loanTypes = " + loanTypes.toString());
    request.setAttribute("loanTypes", loanTypes);
    request.getRequestDispatcher("/lenderLoanTypes.jsp").forward(request, response);
}

在第二个 "form" 标签上添加 action="/LenderLoanType"