Заполните текстовое поле JSP методом Java-сервлета

0

Я искал четкий ответ или возглавлял весь стек и другие форумы, но все они связаны с заполнением текстовых полей с помощью ввода, форм и/или представлений. В моем случае я не нуждаюсь ни в одном из них. Мне просто нужна область для заполнения информацией, полученной запросом, который я написал в моем сервисе Servlet(). Я не хочу полагаться на скриптлеты. Я хочу иметь возможность поддерживать безопасность с моими частными экземплярами и поддерживать 2 разных файла, где я могу писать на одном языке для каждого. Для меня это проще и более организованно.

Для записи алгоритм для извлечения информации был протестирован и работает должным образом, если выполняется через сервлет с помощью printwriter, выполняющего весь код html. Теперь я хочу отделить html/jsp от java, чтобы поддерживать лучшую практику кодирования.

Как я могу вызвать метод service() и заполнить текстовое поле в моем jsp желаемыми значениями из моего запроса?

Спасибо.

Servlet:

/**
 * Servlet implementation class Homepage
 */
@WebServlet(urlPatterns = { "/Homepage" })

public class Homepage extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection connection;
private Statement stmt;
private ResultSet rs;

/**
 * @see HttpServlet#HttpServlet()
 */
public Homepage() {
    super();
}

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("driver found");
        connection = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;" +
                "instance=SQLEXPRESS;databaseName=Timecard_DB;user=Dan;password=12345;");

        try {
            stmt = connection.createStatement();
            String feedSelect = "SELECT ROLE_NAME from ROLES";
            rs = stmt.executeQuery(feedSelect);
            ResultSetMetaData metadata = rs.getMetaData();
            while(rs.next()) {
                for(int i = 1; i <= metadata.getColumnCount(); i++) {
                    String colValue = rs.getString(i);
                    out.println(colValue);
                }
            }
        }

        catch (SQLException e) {
            e.printStackTrace();
        }   
    } 
    catch (Exception e) {
        e.printStackTrace();
        e.getMessage();
    }
    response.setContentType("text/html");
}

JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Home</title>

<style>
body {
background-image: url(Images/whitebg.jpg);
background-repeat: no-repeat;
background-size: 100%;
}

#container {
width: 900px;
margin: 0 auto;
font-family: "Trebuchet MS", Helvetica, sans-serif;
}

#header img {
position: absolute;
top: 80px;
left: 72px;
width: 200px;
height: 50px;
}

#container a:visited {
color: blue;
}

#container a:hover {
color: red;
}

#welcome {
position: absolute;
top: 20px;
right: 100px;
}

#logout {
position: absolute;
top: 20px;
right: 20px;
width: 50px;
height:25px;
}

#links {
position: absolute;
top: 200px;
left: 72px;
}

#links ul {
list-style-type: none;
padding: 5px 10px 5px 10px;
border: 2px solid red;
border-radius: 10px;
}

#links li {
padding: 10px 0 25px 0;
}

#feed {
position: absolute;
top: 100px;
left: 400px;
width: 800px;
height: 400px;
}

#feedtext {
width:800px;
height:400px;
overflow: scroll;
}
</style>
</head>

<body>

<div id='container'>

<div id='header'>
    <img src='Images/mPowerlogo.jpg'/>
</div>

<div id='welcome'>
    Welcome, User1
</div>

<div id='logout'>
    <a href=''>Logout</a>
</div>

<div id='links'>
    <ul>
    <li><a href=''>Timecard Management</a></li>
    <li><a href=''>User Management</a></li>
    <li><a href=''>Customer Management</a></li>
    <li><a href=''>Admin</a></li>
    <li><a href=''>Reports</a></li>
    </ul>
</div>

<div id='feed'>
    <p>Recent Activity:</p>
        <textarea id='feedtext' readonly>
            ***WANT DB INFO HERE***
        </textarea>
</div>

</div>

</body>
</html>
  • 0
    How would I invoke my service() method and fill the textarea in my jsp with the desired values from my query? Вы думаете об этом задом наперед. Servlet должен быть точкой входа, должен подготовить информацию, поместить ее в атрибуты запроса / сеанса и переслать в jsp. Затем jsp может взять его из атрибутов запроса / сеанса для его отображения.
  • 0
    Сотириос Делиманолис прав. Также можно использовать Ajax для вызова сервлета и установки текста текстовой области, но, вероятно, не совсем то, что вы хотите сделать.
Показать ещё 2 комментария
Теги:
jsp
servlets
textarea

1 ответ

1
Лучший ответ

Сначала ваш класс должен переопределить метод doPost или doGet из HttpServlet.

Затем, когда вы перейдете на свою домашнюю страницу, сервлет получит запрос, обработает данные и добавит их в запрос. В вашем цикле вы бы сделали что-то вроде:

StringBuilder data = new StringBuilder();
while (rs.next()) {
    for (...) {
        data.append(rs.getString(i));
        data.append("|"); // Some separator
    }
    data.append("\n");
}

request.setAttribute("data", data);

После этого вам нужно перенаправить на JSP:

RequestDispatcher dispatcher = request.getRequestDispatcher("/pathToJsp");
dispatcher.forward(request, response);

И в последнее время вы получаете данные в своем JSP:

<textarea>
    ${data} <%-- This will grab data from the request attribute --%>
</textarea>

Вы должны быть обеспокоены введением HTML в случае, если кто-то сохранит HTML в вашей базе данных. Это будет отображаться в браузере.

В JSP вы можете использовать язык выражений для доступа к данным из запроса.

  • 0
    Так что это отличное решение. Я запустил свой сервлет с этими дополнениями, и он работал прекрасно. Это именно та головоломка, которую я не смог собрать, учитывая все фрагменты RDispatcher, $ {value}, req.setAttribute (), с которыми я постоянно сталкивался. Благодаря тонну.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню