2012-09-17 2 views
6

Iam пытается использовать websockets в моем уже работающем сервлете. Моя проблема заключается в том, что я использовал класс «writer» для отправки HTML на broswer, но я не могу найти аналогичный класс для WebSockets.Внедрить веб-узлы в моем сервлете Tomcat?

Мой сервлет выглядит следующим образом:

@WebServlet("/TestServlet") 

public class TestServlet extends HttpServlet { 
private List<ISort> sortierListe = new ArrayList<ISort>(); 
private File file1; 
private PrintWriter writer2; 
private boolean sortFinished; 
boolean bSubmitForFilenamePressedCopy; 
BufferedReader in; 
// private String sEingabe; 
private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public TestServlet() { 
    super();  
    this.initSortierverfahren(); 
} 

private void initSortierverfahren() { 
    sortierListe.add(new BubbleSort()); 
    sortierListe.add(new QuickSort()); 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
*  response) 
*/ 
protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

[...] 

PrintWriter writer = response.getWriter(); 
    writer2 = writer; 
    writer.println("<html>"); 
    writer.println("<head><title>Text Sortieren!</title>"); 
    writer.println("</head>"); 

    writer.println("<body marginwidth='40' leftmargin='40' bgcolor='#E5E5E5'>"); 

    writer.println("<table bgcolor='#FFFFFF' height='100%' width='57%' border='0' cellpadding=10>"); 
    writer.println("<tr height='10%'>"); 
    writer.println(" 
[...] 

код слишком долго, чтобы получить возможность отправлять все, но Servlet основно создает форму, где я могу ввести путь к .txt. Затем txt-файл будет сортироваться либо с помощью bubblesort, либо с помощью quicksort.

Вопрос: Как я могу использовать этот код в WebSocket без переписывания всего в javascript? Просто какая-то базовая помощь для начала мне очень поможет. Заранее спасибо.

ответ

3

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

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

Если вы все еще хотите это сделать, просто создайте простой javascript, который будет писать ваш html в тело. Что-то вдоль линий с:

websocket = new WebSocket(wsUri); 
websocket.onmessage = function(evt) { 
    document.body.innerHtml += evt.data 
}; 

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

+0

Спасибо за asnwer. Мне нужно использовать WebSockets, потому что я должен сделать это как задачу, чтобы узнать больше о них. (В конце концов, я хочу, чтобы во время процесса сортировки загружался счетчик). Теперь я получил thejavascritp, который вы опубликовали, но как отправить данные HTML с сервера на страницу? В моем сервлете я использовал writer.println, но это больше не работает. И с outbound.writeTextData я могу отправлять только данные char? Я очень новичок в java, кстати, извиняюсь за многие вопросы. – registaid

+0

@ user1677568 вы должны отправить HTML как данные char, т. Е. Преобразовать строку в CharBuffer. Здесь вы можете найти пример: http://www.tomcatexpert.com/blog/2012/05/01/how-apache-tomcat-implemented-websocket –

0

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

  1. Используйте последнюю версию Tomacat Apache. Версия Plder не поддерживает веб-порты. (Я использовал версию 7.0.42 в моем случае)
  2. Вы не можете просто заменить свой сервлет на WebSocket. Цель обоих совершенно другая. Google это для более подробной информации.

Это sample code for WebSocket обеспечивает на стороне сервера, а также на стороне клиента образец кода. Вы должны направить его для начала.

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