как выгрузить инфу в jsp без запросов к cервлетам

281
09 апреля 2017, 01:30

Помогите плиз!!!

Есть какая-нибудь страница (допустим index.jsp), на которой должны выводить блоки с информацией. Конкретнее - нужно сделать комбо бокс со списком -все возможные значения одного поля базы данных. Я знаю как эту информацию выгрузить с помощью запроса из БД, через Java Servlet. Но как сделать, чтобы просто при запуске tomcata на первой же странице был этот комбо бокс не понимаю. Т.е. хотелось бы чтобы когда заходишь на страницу, инфа сама вытаскивалась из БД и выводилась в jsp.

Answer 1

Это очень плохая идея, так как нарушает принцип разделения кода и данных, но это возможно:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
    <head>
        <title>Hello, SQL!</title>
    </head>
    <body>
        <sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"
          url="jdbc:postgresql://localhost/some_database"
          user="username" password="password"/>
        <sql:query dataSource="${dataSource}" var="resultSet">
            select id, name from some_table;
        </sql:query>
        <select>
          <c:forEach var="row" items="${resultSet.rows}">
            <option value="${row.id}">${row.name}</option>
          </c:forEach>
        </select>
    </body>
</html>

Более разумный способ - использование вспомогательного объекта:

package com.example;
public class OptionsBean implements Serializable {
    private static final String SQL_QUERY = "select name from some_table;";
    private List<String> options;
    public OptionsBean() {
        options = new ArrayList<>();
        try (Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost/some_database","username","password")) {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(SQL_QUERY);
            while (rs.next()) {
                options.add(rs.getString("name"));
            }
        }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public String getOptions(){
        return options;
    }
}

И тогда в коде страницы:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <head>
        <title>Hello, SQL!</title>
    </head>
    <body>
        <jsp:useBean id="optionsBean" class="com.example.OptionsBean" /> 
        <select>
          <c:forEach var="option" items="${optionsBean.options}">
            <option>${option}</option>
          </c:forEach>
        </select>
    </body>
</html>
READ ALSO
Cгенерировать таблицу TableView

Cгенерировать таблицу TableView

Как сгенерировать таблицу, с необходимым количеством столбцов, равным количеству элементов массива?

223
JPA/Hibernate @OneToOne(fetch = FetchType.LAZY) не работает

JPA/Hibernate @OneToOne(fetch = FetchType.LAZY) не работает

ЗдравствуйтеПишу дипломный проект, после проверки получил замечание что в моём случае lazy не будет работать

240
Как изменить свойство primaryStage.setTitle

Как изменить свойство primaryStage.setTitle

Необходимо при нажатии кнопки на форме изменять значение primaryStagesetTitle();

235
XML - Как использовать фрагменты

XML - Как использовать фрагменты

Как в активити подгружать один из фрагментов? Имеется три LinearLayout ,каждый из которых содержит несколько элементов, мне необходимо из активити...

220