【问题标题】:Adding the functionality to the servlet将功能添加到 servlet
【发布时间】:2012-07-22 15:58:23
【问题描述】:

我已经开发了一个 servlet,用户在其中输入名称,并在单击提交按钮时向用户致意,我还想添加它应该显示当前登录的用户数量的功能,例如如果我点击来自一个浏览器的 servlet 它应该显示登录的用户数是 1,因为我是第一个用户,如果其他人从下一个浏览器中点击 servlet,它应该显示他是第 2 个访问者,所以它会显示他当前登录的用户数,请告知如何实现..

项目的 web.xml 是 ..

   <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>FirstDemo</display-name>


  <servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.saral.MyServlet</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>

<welcome-file>home.html</welcome-file>
</welcome-file-list> 

</web-app>

HTML 是 ...

<html>
<head>
<title> A Simple web Application</title>
</head>
<body>
<form method="get" action="helloServlet">
Name<input type="text" name="txtName">
<br><input type="submit" value="Login">
</form>
</body>
</html>

请告知如何添加登录用户数的功能。 下面是我的项目结构的快照是..enter link description here

我已经添加了如下所示的计数器类...

package com.saral;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


public class SessionCounter implements HttpSessionListener
{
        private static int count;

        public SessionCounter()
        {
        }

        public void sessionCreated(HttpSessionEvent arg0)
        {
                count++;
                ServletContext sContext = arg0.getSession().getServletContext();
                synchronized (sContext)
                {
                        sContext.setAttribute("sessionCount", new Integer(count));
                }
        }

        public void sessionDestroyed(HttpSessionEvent arg0)
        {
                count--;
                ServletContext sContext = arg0.getSession().getServletContext();
                synchronized (sContext)
                {
                        sContext.setAttribute("sessionCount", new Integer(count));
                }
        }
}

我也将我的 servlet 修改为这个..

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class First
 */
//@WebServlet("/First")
public class MyServlet extends HttpServlet
{
    private static final long serialVersionUID = 1L;


    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name=request.getParameter("txtName");
        response.setContentType("text/html");
        request.getAttribute("sessionCount");
        PrintWriter out=response.getWriter();
        out.println("Hello,"+name);
        out.println("<br> this output is generated by a simple servlet.");
        out.println("--->"+(request.getAttribute("sessionCount")));
        out.close();


    }

}

但是我得到的会话是空的……在输出中……http://imageshack.us/photo/my-images/405/sessionoutput.jpg/output of session

请告知我如何获得那里的价值我现在得到空仪式,我希望我首先请求它应该显示 1,如果我打开第二个它应该显示 2,请告诉我如何实现这一点,因为我被卡住了到此为止。

【问题讨论】:

    标签: jakarta-ee servlets


    【解决方案1】:

    您可以在应用程序范围内存储一个简单的 POJO,您可以在其中维护计数。

    【讨论】:

    • ..你能把代码贴在这里让理解更清楚吗
    • 非常感谢我已经这样做了,基于它我也创建了 sessioncounter 类,但是在主 servlet 中如何检索它请告知并查看我更新的帖子。谢谢
    • 您需要通过以下方式访问request.getSession().getServletContext().getAttribute("sessionCount")request.getAttribute("sessionCount") 是完全不同的范围,您不会在请求范围内拥有该变量。
    猜你喜欢
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2020-06-09
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多