Java 如何使用servlet映射显示在线用户

Java 如何使用servlet映射显示在线用户,java,jsp,servlets,Java,Jsp,Servlets,我想向使用此servlet的在线用户展示 import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import

我想向使用此servlet的在线用户展示

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.chatapp.useroperation.Client;

@WebServlet(name = "onlineUsersServlet", urlPatterns = { "/getOnlineUsersList" })
public class ListOfOnlineUsers extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

        String commaSepeparatedStr ="";
        ServletContext appScope = request.getServletContext();
        String channel = request.getParameter("channel");
        final Map<String, List<Client>> clients = (Map<String, List<Client>>) appScope.getAttribute(LoginServlet.CLIENTS);
        System.out.println(clients);
        if(clients.size()> 0){
            final List<Client> onlineClients = clients.get(channel);
            if(onlineClients !=null){
                for (Client client : onlineClients) {
                    if(commaSepeparatedStr.equals("") ){
                        commaSepeparatedStr = client.getUserName();
                    }else{
                        commaSepeparatedStr =commaSepeparatedStr+","+ client.getUserName();

                    }
                }
            }
        }
        response.getWriter().write(commaSepeparatedStr);
        response.flushBuffer(); 

    }

}
import java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入javax.servlet.ServletContext;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.chatapp.useroperation.Client;
@WebServlet(name=“onlineUsersServlet”,urlPatterns={”/getOnlineUsersList})
公共类ListOfOnlineUsers扩展了HttpServlet{
public void doGet(HttpServletRequest请求、HttpServletResponse响应)引发IOException{
字符串COMMASEPARATEDSTR=“”;
ServletContext appScope=request.getServletContext();
字符串通道=request.getParameter(“通道”);
最终映射客户端=(Map)appScope.getAttribute(LoginServlet.clients);
System.out.println(客户端);
如果(clients.size()>0){
最终列表onlineClients=clients.get(通道);
if(onlineClients!=null){
用于(客户端:在线客户端){
if(逗号peparatedstr.equals(“”){
commaseparatedstr=client.getUserName();
}否则{
commaSepeparatedStr=commaSepeparatedStr+“,”+client.getUserName();
}
}
}
}
response.getWriter().write(commaseparatedstr);
response.flushBuffer();
}
}

如何从jsp向该servlet传递值,以便它将用户名存储在其列表中……是否可以从会话将值放入该servlet中。

如果要将会话中的值存储到servlet,只需将属性附加到会话即可

HttpSession sess = request.getSession();//Create new Session
//Get the username from login input
String username = request.getParameter("name");

//Attach the name to the Session.

sess.setAttribute("username", username);
登录时,获取用户名并将值存储到会话中

HttpSession sess = request.getSession();//Create new Session
//Get the username from login input
String username = request.getParameter("name");

//Attach the name to the Session.

sess.setAttribute("username", username);
只要会话处于活动状态,就可以随时获取该值

HttpSession sess = request.getSession(false);//Use the current Session
//Get the value fron the Session 
String username = (String) sess.getAttribute("username");//get the Attribute Username

您需要先将该属性附加到会话,然后才能以这种方式获取该属性。

在jsp中执行以下操作:

<form action="/YOURWEBAPPNAME/onlineUsersServlet/getOnlineUsersList" method="get">
    <input type="text" name="test" value="Hello World">
    <input type="submit" value="Send">
</form>
你可以随意使用这些东西

在课程中加入以下内容:

request.getSession(false).setAttribute("input",userInput);
并用以下文字阅读:

 String lInput = (String) request.getSession(false).getAttribute("input");

有些变量的作用域不同,您可以从代码中的不同位置访问,也可以不访问。在JavaEE中,存在具有请求、会话和应用程序范围的变量

请求范围意味着您可以为当前请求设置并在所有类中使用它,而这正是您现在需要的

很抱歉,我现在无法为您提供更多帮助,但有了这些信息,谷歌或SO搜索框应该是您的朋友。稍后我将添加详细信息

编辑-

Stefan beike的回答包含了我正在谈论的这些细节