как отображать данные с контроллера на страницу jsp [дубликат]

Другой вопрос был назван дубликатом этого:

В C ++ почему результат cout << x отличается от значения, которое показывает отладчик для x ?

x в вопросе - это переменная float.

Одним из примеров может быть

float x = 9.9F;

Отладчик показывает 9.89999962, вывод работы cout - 9.9.

Ответ оказывается, что точность cout по умолчанию для float равна 6, поэтому она округляется до шести десятичных цифры

См. здесь для справки

45
задан BalusC 13 February 2016 в 09:22
поделиться

5 ответов

Вы можете использовать тег <c:forEach >

, вы можете найти подробный пример в следующей ссылке example use

-1
ответ дан Aba Dov 26 August 2018 в 02:09
поделиться

В хорошо разработанном подходе MVC файл JSP не должен содержать строку Java-кода, и класс сервлета не должен содержать строку JDBC-кода.

Предполагая, что вы хотите показать список в веб-магазине должен быть создан следующий код.

  • Класс Product, представляющий объект реального мира продукта, должен быть просто Javabean ,
    public class Product {
    
        private Long id; 
        private String name;
        private String description;
        private BigDecimal price;
    
        // Add/generate getters/setters/c'tors/equals/hashcode boilerplate.
    }
    
  • Класс DAO , который выполняет всю неприятную работу JDBC и возвращает приятный List<Product>.
    public class ProductDAO {
    
        private DataSource dataSource;
    
        public ProductDAO(DataSource dataSource) {
            this.dataSource = dataSource;
        }
    
        public List<Product> list() throws SQLException {
            List<Product> products = new ArrayList<Product>();
    
            try (
                Connection connection = dataSource.getConnection();
                PreparedStatement statement = connection.prepareStatement("SELECT id, name, description, price FROM product");
                ResultSet resultSet = statement.executeQuery();
            ) {
                while (resultSet.next()) {
                    Product product = new Product();
                    product.setId(resultSet.getLong("id"));
                    product.setName(resultSet.getString("name"));
                    product.setDescription(resultSet.getString("description"));
                    product.setPrice(resultSet.getBigDecimal("price"));
                    products.add(product);
                }
            }
    
            return products;
        }
    
    }
    
  • Класс сервл , который получает список и помещает его в область запроса.
    @WebServlet("/products")
    public class ProductsServlet extends HttpServlet {
    
        @Resource(name="jdbc/YourDB") // For Tomcat, define as <Resource> in context.xml and declare as <resource-ref> in web.xml.
        private DataSource dataSource;
        private ProductDAO productDAO;
    
        @Override
        public void init() {
            productDAO = new ProductDAO(dataSource);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                List<Product> products = productDAO.list();
                request.setAttribute("products", products); // Will be available as ${products} in JSP
                request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
            } catch (SQLException e) {
                throw new ServletException("Cannot obtain products from DB", e);
            }
        }
    
    }
    
  • Наконец, файл JSP в /WEB-INF/products.jsp, который использует JSTL <c:forEach> для итерации по List<Product>, который доступен в EL на ${products} и использует JSTL <c:out>, чтобы избежать свойств строки, чтобы избежать отверстий XSS , когда речь идет о входном сигнале, управляемом пользователем.
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/format" prefix="fmt" %>
    ...
    <table>
        <c:forEach items="${products}" var="product">
            <tr>
                <td>${product.id}</td>
                <td><c:out value="${product.name}" /></td>
                <td><c:out value="${product.description}" /></td>
                <td><fmt:formatNumber value="${product.price}" type="currency" currencyCode="USD" /></td>
            </tr>
        </c:forEach>
    </table>
    

Чтобы заставить его работать, просто вызовите сервлет по его URL-адресу. При условии, что сервлет аннотируется @WebServlet("/products") или отображается в web.xml с помощью <url-pattern>/products</url-pattern>, вы можете называть его http://example.com/contextname/products

См. Также:

113
ответ дан BalusC 26 August 2018 в 02:09
поделиться

MVC в контексте веб-приложения не состоит в использовании класса из JSP. Он состоит в использовании следующей модели:

  1. браузер отправляет запрос на веб-сервер
  2. , веб-сервер настроен так, что запрос обрабатывается сервлетом или фильтром (контроллер: код Java, а не JSP-код)
  3. Сервлет / фильтр обычно отправляет запрос определенному классу (называемому действием, определенной частью контроллера) на основе конфигурации / аннотации
  4. Действие выполняет бизнес-логику (т. е. извлекает данные из базы данных в вашем примере: модель)
  5. Действие пересылает запрос в JSP. Роль JSP заключается только в том, чтобы генерировать HTML-код (т. Е. Отображать ваши данные: представление)

Поскольку JSP обычно использует JSP-теги (например, JSTL) и язык выражения JSP , и поскольку JSP-теги и EL предназначены для получения информации от JavaBeans, вам лучше иметь ваши данные в форме JavaBeans или коллекций JavaBeans.

Роль контроллера (класса действия) заключается в том, чтобы извлечь данные, создать экземпляры JavaBean, содержащие данные, в подходящем формате для JSP, чтобы поместить их в атрибуты запроса, а затем отправка в JSP. Затем JSP перебирает экземпляры JavaBean и показывает, что они содержат.

Вы не должны сами реализовать структуру MVC. Используйте существующие (Stripes, Struts и т. Д.)

10
ответ дан JB Nizet 26 August 2018 в 02:09
поделиться

Я не знаю, как мне вернуть ResultSet из файла класса на страницу JSP

Ну, вы этого не сделаете.

Точка MVC заключается в том, чтобы отделить вашу модель (в этом случае от M-информации в БД) от вашего вида (V a jsp, в данном случае) таким образом, вы можете изменить представление без торможения в приложении ,

Для этого вы можете использовать промежуточный объект для представления ваших данных (обычно называемый DTO - после объекта передачи данных - не знаю, как они его называют в наши дни) и другого объекта для его извлечения ( обычно DAO).

Итак, у вас есть свой JSP-файл, получите параметры запроса, а затем вызовите метод из DAO. Дао, внутренне имеет средства для подключения к db и выборки данных и сборки коллекций DTO, которые возвращаются в JSP для рендеринга.

Что-то вроде этого чрезвычайно упрощенного (и небезопасного) кода:

Employee.java

class Employee {
   String name;
   int emplid;
}

EmployeeDAO.java

class EmployeeDAO { 
   ... method to connect 
   etc. 
   List<Employee> getAllNamed( String name ) { 
       String query = "SELECT name, emplid FROM employee where name like ?";
       ResultSet rs = preparedStatement.executeQuery etc etc.
       List<Employee> results = ....
       while( rs.hasNext() ) { 
          results.add( new Employee( rs.getString("name"), rs.getInt("emplid")));
       }
       // close resources etc 
       return results;
    }
}

employee.jsp

<%
   request.setAttribute("employees", dao.getAllNamed( request.getParameter("name") );
%>
<table>
<c:forEach items="${employees}" var="employee">
<tr><td>${employee.emplid}</td><td>${employee.name}</td></tr>
</c:forEach>
</table>

Надеюсь, это даст вам лучшую идею.

4
ответ дан OscarRyz 26 August 2018 в 02:09
поделиться

Я думаю, вам будет лучше содержать данные таблицы в коллекции, такой как список, и вернуть список из класса Java и повторно использовать эту коллекцию в JSP.

-1
ответ дан Sonoo Jaiswal 26 August 2018 в 02:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: