得到Null值+可能查询不起作用

实际上我正在遵循mvc-3层架构到我的应用程序。这是我的搜索选项的实现。 在我的servlet(控制器)中,我这样做:

String select = request.getParameter("select"); // getting value String search = request.getParameter("search"); // getting value request.setAttribute("select", select); request.setAttribute("search", search); System.out.println("Select : "+select+" Search : "+search); int page = 1; int recordsPerPage = 20; if(request.getParameter("page") != null) page = Integer.parseInt(request.getParameter("page")); SearchDAO searchDAO=new SearchDAO(); List list1=searchDAO.searchAllUsers((page-1)*recordsPerPage,recordsPerPage,select,search); //getting null value,doing SOP of list1 int noOfRecords = searchDAO.getNoOfRecords(); //getting null value,doing SOP int noOfPages = (int) Math.ceil(noOfRecords * 1.0 / recordsPerPage); //getting null value,doing SOP session.setAttribute("noOfRecords", noOfRecords); request.setAttribute("searchList", list1); request.setAttribute("noOfPages", noOfPages); request.setAttribute("currentPage", page); 

在SearchDAO中是:

 public class SearchDAO { private int noOfRecords; Connection connection; Statement stmt; public List searchAllUsers(int offset ,int noOfRecords,String select,String search){ private static Connection getConnection() throws SQLException,ClassNotFoundException{ Connection con = ConnectionFactory.getInstance().getConnection(); return con; //ConnectionFactory is class for making the connection to DB. } String query="select SQL_CALC_FOUND_ROWS * from info where '"+select+ "' like '%"+search+"%' order by serialNo asc limit " + offset + " , " + noOfRecords; List list1 = new ArrayList(); User user1=null; try { connection = getConnection(); stmt = connection.createStatement(); ResultSet rs=stmt.executeQuery(query); while(rs.next()){ user1=new User(); user1.setSerial(rs.getInt(1)); user1.setName(rs.getString(2)); user1.setEmail(rs.getString(3)); list1.add(user1); } rs.close(); rs = stmt.executeQuery("SELECT FOUND_ROWS()"); if(rs.next()) this.noOfRecords = rs.getInt(1); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally { try { if(stmt != null) stmt.close(); if(connection != null) connection.close(); } catch (SQLException e) { e.printStackTrace(); } } return list1; } public int getNoOfRecords() { return noOfRecords; } } 
  • 编辑随意评论,如果我没有遵循正确的mvc架构,请纠正我。

  • 检查您是否能够在request.getParameter()中检索参数; 调用你的servlet

  • 检查您是否能够在请求范围中存储参数
    request.setAttribute()调用

你的顾虑是对的,:

 '%"+request.getParameter("search)+"%' 
  1. 首先,您从未在SearchDAO中初始化请求,并且您在其实例上调用了getParameter,因此NullPointerException
  2. 其次,你的seachDAO将如何得到请求??,它不是一个servlet,它只是一个普通的POJO

AFAIK,创建一个bean类,在类的帮助下,你可以在控制器和DAO之间进行通信,你不能通过使用request.getAttribute(在你的DAO中)来实现。