没有从 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"
我想通过调用从 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"