Получить значения из JDBC и использовать теги JSTL для вызова методов

Ниже приведен код, который я написал для извлечения значений из базы данных (я добавил весь код, чтобы вам было легче понять, что я пытаюсь здесь сказать):

package ipscheme;

import java.sql.*;

public class AddRecords {

Connection con = new DBConnection().getConnection();
ResultSet  resultSet = null;  

public String [] populateSelect() throws SQLException {

    Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

    resultSet = statement.executeQuery("SELECT * FROM ipsections");

    resultSet.last();
    int size = resultSet.getRow();
    resultSet.beforeFirst();

    String [] sectionName = new String[size];

    int j = 0;
    while (resultSet.next()){
        sectionName[j] = resultSet.getString("section_name");
        j = j + 1;
    }

    resultSet.close();
    statement.close();
    con.close();

    return sectionName;

}

}

А вот код JSP, который я использовал для заполнения значений из базы данных в поле выбора.

<select name="sltSection">
 <% 
    AddRecords added = new AddRecords();
    String sectionNm  [] = added.populateSelect();
        for(int i=0; i<sectionNm.length; i++){ %>   
    <option>
        <% out.print(sectionNm[i]); %>
    </option>
 <% } %>
</select>

Приведенный выше код отлично работает без каких-либо ошибок компиляции. Как вы можете видеть, я использовал Java-код на своей странице.jsp для выполнения этой задачи, что неправильно.

Мне нужно реализовать этот код в соответствии с MVC, и поэтому я должен использовать теги JSTL для реализации кода в.jsp? если да, то как мне это сделать? Как мне создать экземпляр Object из класса AddRecords и называть его методами? Может кто-нибудь, пожалуйста, помогите мне. Заранее спасибо!

3 ответа

Решение

Поскольку кажется, что вы новичок в Java Web Programming, вы можете реализовать полный сценарий MVC, используя JSP (View), Servlet (Controller) и Entities, DAOs и Service layer (Model). Это то, что у вас есть:

Модель:

  • DBConnection как класс доступа к базе данных (слой доступа к данным)
  • AddRecords как ваш класс DAO (уровень доступа к данным)
  • Нет класса как класса обслуживания (уровень бизнес-логики). Для этого примера давайте RecordService класс для этого:

    public class RecordService {
        public RecordService() {
        }
        //since it has no real business logic, it will serve as facade
        public String[] getRecords() {
            AddRecords addRecords = new AddRecords();
            return addRecords.populateSelect();
        }
    }
    

контроллер:

  • Нет класса для контроллера еще. Так как я предполагаю, что вы используете простую Java EE, вы должны использовать Servlet (реализация на основе Servlets Stackru wiki):

    @WebServlet("/RecordServlet")
    public class RecordsServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            //it will fire on a GET request (like accessing directly to the URL
            //from the browser)
            //here you should load the data for the View (JSP)
            loadData(request);
            //forward to show the view
            request.getRequestDispatcher("hello.jsp").forward(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            //it will fire on a POST request (like submitting the form using POST method)
            String selectedRecord = request.getParameter("selectedRecord");
            System.out.println(selectedRecord);
            request.setAttribute("selectedRecord", selectedRecord);
            loadData(request);
            //forward to show the view
            request.getRequestDispatcher("hello.jsp").forward(request, response);
        }
    
        //method to load the data available to select
        private void loadData(HttpServletRequest request) {
            RecordService recordService = new RecordService();
            String[] records = recordService.getRecords();
            //set the data as attribute on the request to be available on the View
            request.setAttribute("records", records);
        }
    }
    

Посмотреть:

  • У вас уже есть файл JSP. Поскольку вы не опубликовали имя, давайте назовем его hello.jsp, Я просто адаптирую ваш фактический код JSP с помощью JSTL:

    <!-- at the beginning of the JSP, call the JSTL library -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <form action="RecordServlet" method="POST">
        Please select an element:
        <select id="selectedRecord" name="selectedRecord">
            <c:forEach items="${records}" var="record">
            <option value="${record}">${record}</option>
            </c:forEach>
        </select>
        <br />
        <input type="submit" value="Show selected record" />
        <c:if test="${not empty selectedRecord}">
            <br />
            You've selected ${selectedRecord}!
        </c:if>
    </form>
    

Теперь для запуска примера создайте проект и получите к нему доступ, используя http://localhost:8080/YourWebProjectName/RecordServlet, Кроме того, вы можете установить в web.xml файл:

<welcome-file-list>
    <welcome-file>RecordServlet</welcome-file>
</welcome-file-list>

И просто запустите веб-проект.

Некоторые заметки:

  • Используйте соответствующие имена для класса / методов, которые я использовал RecordXXX так как у вас было это AddRecord класс (должно быть RecordDAO или что-то более полезное для читателей кода, таких как UserDAO или же YourEntityDAO).
  • Распределите ваши классы через различные пакеты. Каждый пакет должен содержать только соответствующие классы, т.е. edu.home.dao для занятий DAO, edu.home.service для классов обслуживания / бизнес-логики и...

Используйте список в классе в качестве возвращаемого значения,

 List<String> sectionName = new ArrayList<String>();

while (resultSet.next())
   sectionName.add(resultSet.getString("section_name"));

тогда делай

 <select name='name'>
 <c:forEach var="parameter" items="${sectionName }"> 
  <option value="${parameter}">${parameter}</option> 
  </c:forEach> 
</select>

Здесь параметр - переменная meadiator для доступа к значению переменной списка. Вы также можете использовать массив String.

Прежде всего, если вы пытаетесь что-то сделать с MVC, вы должны отделить свой код. JSP файл только доступ к запросу без кода Java вообще.

Таким образом, ваш контроллер должен сделать что-то вроде этого.

 request.setAttribute("ipsections",added.populateSelect());

а затем, в вашем файле JSP

<select name='anything'>
     <c:forEach items="${ipsections}" var="ipsection">
          <option value="${ipsection}">${ipsection}</option>
    </c:forEach>
</select>
Другие вопросы по тегам