在我的 Tomcat Servlet 中实现 Websockets?
Posted
技术标签:
【中文标题】在我的 Tomcat Servlet 中实现 Websockets?【英文标题】:Implement Websockets into my Tomcat Servlet? 【发布时间】:2012-09-17 12:33:14 【问题描述】:我正在尝试在我已经工作的 servlet 中使用 websocket。我的问题是我使用“writer”类将 html 发布到浏览器上,但我找不到类似的 WebSockets 类。
我的 servlet 如下所示:
@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 文件将通过冒泡排序或快速排序进行排序。
我的问题是:如何在 WebSocket 中使用此代码而不用 javascript 重写所有内容?我认为只是一些基本的帮助会帮助我很多。提前致谢。
【问题讨论】:
【参考方案1】:首先,如果你想使用tomcat的websockets,你应该从相应的基类WebSocketServlet扩展。
其次,我认为在您的情况下使用 websocket 不值得。 Websockets 适用于需要实时交互的应用程序。你的显然不需要它。
如果您仍然想这样做,只需创建一些简单的 javascript,它将您的 html 写入正文。类似的东西:
websocket = new WebSocket(wsUri);
websocket.onmessage = function(evt)
document.body.innerHtml += evt.data
;
但正如我所说,我认为这样的代码没有用处。
【讨论】:
感谢您的回答。我需要使用 WebSockets,因为我必须将其作为一项任务来了解更多关于它们的信息。 (最后我想要在排序过程中加载微调器) 现在我得到了你发布的 javascritp,但是我如何将 HTML 数据从服务器发送到页面?在我的 servlet 中,我使用了 writer.println,但这不再起作用。而使用 outbound.writeTextData 我只能发送 char 数据?顺便说一句,我对 java 很陌生,很抱歉有很多问题。 @user1677568 您应该将 HTML 作为 char 数据发送,即将字符串转换为 CharBuffer。你可以在这里找到一个例子:tomcatexpert.com/blog/2012/05/01/…【参考方案2】:在从普通 servlet 迁移到 websocket 之前,请记住几件事。
-
使用最新的 apache tomcat 版本。 Plder 版本不支持 websockets。 (我使用的是 7.0.42 版本)
您不能简单地将 Servlet 替换为 WebSocket。两者的目的完全不同。谷歌一下了解更多详情。
此sample code for WebSocket 提供服务器端和客户端示例代码。您应该参考它来开始使用。
【讨论】:
以上是关于在我的 Tomcat Servlet 中实现 Websockets?的主要内容,如果未能解决你的问题,请参考以下文章
ServletDispatcher 无法在我的 spring 项目中强制转换为 Javax.servlet.Servlet 异常