2013-12-18 3 views
0

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

Для записи алгоритм для извлечения информации был протестирован и работает должным образом, если выполняется через сервлет с помощью 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

'Как бы я вызвал метод service() и заполнил текстовое поле в моем jsp желаемыми значениями из моего запроса?' Вы думаете об этом назад. «Servlet» должен быть точкой входа, должен подготовить информацию, поместить ее в атрибуты request/session и переслать в jsp. Затем jsp может взять его из атрибутов request/session для его отображения. –

+0

Sotirios Delimanolis верен. Также можно использовать Ajax для вызова сервлета и установки текста текстового поля, но, вероятно, не совсем того, что вы хотите сделать. – developerwjk

+0

Я пытаюсь прояснить мыслительный процесс здесь. Запрос выходит за страницу, и ответ отправляет сама страницу. Я хочу отправить текст/«атрибуты» для textarea с моим запросом, а затем ответ отправит страницу с атрибутами, которые я отправил на нее? –

ответ

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 вы можете использовать Expression Language для доступа к данным из запроса.

+0

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

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