Java 如何使用servlet映射显示在线用户
我想向使用此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
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的回答包含了我正在谈论的这些细节