2014-06-04 3 views
0

Я изучаю сервлеты Java и пытаюсь написать программу, которая просит пользователя ввести имя, и перечисляет все строки с соответствующим именем в db. Моя проблема заключается в том, что я сохраняю заданное пользователем значение в методе setter класса bean из моего класса контроллера. Однако я не могу получить его из класса dao. Не получая никаких исключений или ошибок, код не дает никаких результатов. Любая помощь будет оценена по достоинству.Поиск в базе данных с использованием сервлета и jsps

Controller Класс:

protected void doPost(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException { 
response.setContentType("text/html"); 
SearchDataHolder sch = new SearchDataHolder(); 
String fname = (String) request.getParameter("fname"); 
String lname = (String) request.getParameter("lname"); 
String email = (String) request.getParameter("email"); 
sch.setFname(request.getParameter("fname")); 
sch.setLname((String) request.getParameter("lname")); 
sch.setEmail((String) request.getParameter("email")); 
if (((fname).isEmpty()) && ((lname).isEmpty()) && (((email).isEmpty()))) { 
    response.sendRedirect("BlankError.jsp"); 
    return; 
} else { 
    RequestDispatcher rd = request 
      .getRequestDispatcher("SearchList.jsp"); 
    rd.forward(request, response); 
    return; 
} 

Dao Класс:

Connection con = ConnectionUtils.createConnection(); 
PreparedStatement ps; 
List<SearchDataHolder> users = new ArrayList<SearchDataHolder>(); 
SearchDataHolder sdh = new SearchDataHolder(); 
String firstName = sdh.getFname(); 
String lastName = sdh.getLname(); 
String email = sdh.getEmail(); 
try { 

    String userList = "select * from Personal_Info where Fname='" 
      + firstName + "' or Lname='" + lastName + "' or Email='" 
      + email + "'"; 
    ps = con.prepareStatement(userList); 
    ResultSet rs = ps.executeQuery(); 
    while (rs.next()) { 
     sdh.setFname((String) rs.getString("Fname")); 
     sdh.setLname((String) rs.getString("Lname")); 
     sdh.setMname((String) rs.getString("Mname")); 
     sdh.setSex(rs.getString("Sex")); 
     sdh.setDob((String) rs.getString("Date")); 
     sdh.setEmail((String) rs.getString("Email")); 
     sdh.setPtype((String) rs.getString("PhoneType")); 
     sdh.setPhone((String) rs.getString("Phone")); 
     sdh.setStreet((String) rs.getString("Street")); 
     sdh.setCity((String) rs.getString("City")); 
     sdh.setCity((String) rs.getString("State")); 
     sdh.setZip((String) rs.getString("ZipCOde")); 
     sdh.setCountry((String) rs.getString("Country")); 
     users.add(sdh); 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
return users; 
+0

Я вижу кучу звонков setter на 'sch', но ничего, что выглядит как вызов' execute'. Кроме того, ваш 'DAO', вероятно, не может вызвать' SearchDataHolder sdh = new SearchDataHolder(); 'и получить переданные значения. –

+0

Не могли бы вы объяснить, что вы подразумеваете под вызовом execute. – user3681240

+0

Какой метод указан в вашем DAO? –

ответ

0

я предполагаю, что вы пытаетесь применить "Model 2" образец для того, чтобы выделить в разных слоях, 3 различных компонентов.

One, где все, что вы поместите код для обработки запроса пользователя (знают как controller) и построить другой, другой компонент, то есть Bean/DTO, где вы положили данные, участвующие обычно ответ. И, наконец, архив jsp (view), где вы указываете, как писать ответ, используя ранее загруженный Bean.

ключ абстракции, которые позволяют отделить представление и контроллер является bean, и зная, куда месту боб, чтобы сделать его видимым для обоих Controller и для View. В вашем случае, я вижу, что вы используете контроллер, который строит Bean, что, я думаю, вы забыли передать это bean в view, а затем используйте этот компонент в некоторых тегах с точками .

Внутри контроллера должна быть строка, как это:

request.setAttribute("nameOfTheBeanToUseInsideTheJSPScriptlet",bean) 

А потом СПЯ (в вашем случае в «SearchList.jsp»), вы, вероятно, положить что-то вроде этого:

Это базовая модель 2, которая представляет собой составной узор (образец, выполненный из других узоров), который, в конце концов, является основой основания всех различных более сложных фреймворков, которые используются для создания веб-приложений java (Spring MVC, Struts, остальная часть всех известных фреймворков, размещаются поверх этого components, потому что это всего лишь часть спецификации JSEE для создания веб-приложений).

Предлагаю прочитать книгу «Head First Servlets и JSP, 2nd Edition», идеально подходит для работы с обычными сервлетами, jsp и обычными классами, которые являются серверами как бобы.

Я думаю, что это самая основная информация, необходимая для запуска некоторых сервлетов, которые порождают! Продолжайте практиковать!

Поздравления!

И надеюсь, что это поможет!

+0

I Do not, если ваш DAO работает хорошо, но я думаю, что да. DAO - это еще один уровень абстракции, в который вы помещаете код, связанный с проблемами сохранения сущности. Цель DAO - вернуть объекты, которые играют роль «beans», как я объясняю выше. Постарайтесь не усложнять себе проблемы с подключением к базе данных, вместо этого я предлагаю начать с локальных жестко кодированных данных, чтобы проверить, хорошо ли вы «подключили» все компоненты (контроллер, bean и jsp). – Victor

Смежные вопросы