Java 在servlet中添加用户计数器的功能

Java 在servlet中添加用户计数器的功能,java,jakarta-ee,tomcat,servlets,Java,Jakarta Ee,Tomcat,Servlets,我在下面开发了一个servlet,其中的逻辑是,如果name等于saral saxena,那么它会移动到下一页,否则,我也会在代码下面发布,我想做的一个改变是,它还应该显示你是访问者编号,这样,如果来自不同浏览器的两个不同用户点击相同的url,那么对于第二个,它应该显示你是访问者编号2。下面是我当前的一段代码 package trial; import java.io.IOException; import java.io.PrintWriter; import javax.servle

我在下面开发了一个servlet,其中的逻辑是,如果name等于saral saxena,那么它会移动到下一页,否则,我也会在代码下面发布,我想做的一个改变是,它还应该显示你是访问者编号,这样,如果来自不同浏览器的两个不同用户点击相同的url,那么对于第二个,它应该显示你是访问者编号2。下面是我当前的一段代码

  package trial;

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

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

/**
 * Servlet implementation class SendRedirectServlet
 */
public class SendRedirectServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse
            response)throws ServletException, IOException {
        //System.out.println("*************");

        response.setContentType("text/html");
          PrintWriter pw = response.getWriter();
          String name = request.getParameter("username");
          pw.println("<br> this output is generated by a simple servlet.");
         String password = request.getParameter("password");
          if(name.equals("saral")&& password.equals("saxena")){
              response.sendRedirect("/ValidUserServlet");
          }
          else{
          pw.println("u r not a valid user");
          }

        }
}
现在我的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_2_5.xsd" id="WebApp_ID" version="2.5">

  <servlet>
   <servlet-name>s1</servlet-name>
   <servlet-class>trial.SendRedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>s1</servlet-name>
   <url-pattern>/SendRedirectServlet</url-pattern>
  </servlet-mapping>

    <servlet>
   <servlet-name>s2</servlet-name>
   <servlet-class>trial.ValidUserServlet</servlet-class>
    </servlet>
  <servlet-mapping>
    <servlet-name>s2</servlet-name>
    <url-pattern>/ValidUserServlet</url-pattern>
  </servlet-mapping>
    <welcome-file-list>
<welcome-file>home.html</welcome-file>
</welcome-file-list>

</web-app>

s1
trial.SendRedirectServlet
s1
/发送重定向servlet
s2
trial.ValidUserServlet
s2
/ValidUserServlet
home.html
最后,我的html页面是

    <html>

<head>
<title>New Page 1</title>
</head>

<body>

<form method="post" action="/SendRedirectServlet">
  <p>Enter your name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
   <input type="text" name="username" size="20"/></p>
  <p>Enter your password&nbsp; <input type="text" name="password"
   size="20"/></p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  &nbsp;&nbsp;
  <input type="submit" value="Submit" name="B1"/></p>
</form>

</body>

</html>

新的第1页
输入您的姓名

输入您的密码

项目结构的快照为

请告知如何添加you is visitor No.的功能


伙计们请建议。

1。点击容器的请求不是每个用户的请求,而是每个请求的请求,即使来自同一个浏览器。

2.
service()
方法在每次请求到达容器时都会被调用,因此在service()方法中放置一个计数器来计算访问您站点的用户数。

///EDITED///strong>

现在,当我展示HttpServlet的示例时,方法将是
doGet
doPost
,而不是
service()
在这里
doGet()

下面是roseindia.com上的一个示例

public class CounterServlet extends HttpServlet{
  public void doGet(HttpServletRequest request, 
  HttpServletResponse response)
  throws ServletException, IOException {
  HttpSession session = request.getSession(true);
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  Integer count = new Integer(0);
  String head;
  if (session.isNew()) {
  head = "This is the New Session";
  } else {
  head = "This is the old Session";
  Integer oldcount =(Integer)session.getValue("count"); 
  if (oldcount != null) {
  count = new Integer(oldcount.intValue() + 1);
  }
  }
  session.putValue("count", count);
  out.println("<HTML><BODY BGCOLOR=\"#FDF5E6\">\n" +
  "<H2 ALIGN=\"CENTER\">" + head + "</H2>\n" + 
  "<TABLE BORDER=1 ALIGN=CENTER>\n"
  + "<TR BGCOLOR=\"#FFAD00\">\n" 
  +"  <TH>Information Type<TH>Session Count\n" 
  +"<TR>\n" +" <TD>Total Session Accesses\n" +
  "<TD>" + count + "\n" +
  "</TABLE>\n" 
  +"</BODY></HTML>" );
  }
}
public类CounterServlet扩展了HttpServlet{
公共无效数据集(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException、IOException{
HttpSession session=request.getSession(true);
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
整数计数=新整数(0);
线头;
if(session.isNew()){
head=“这是新的会话”;
}否则{
head=“这是旧会话”;
整数oldcount=(整数)session.getValue(“count”);
if(oldcount!=null){
count=新整数(oldcount.intValue()+1);
}
}
会话.putValue(“计数”,计数);
out.println(“\n”+
“+head+”\n“+
“\n”
+“\n”
+“信息类型会话计数\n”
+“\n”+“会话访问总数\n”+
“+count+”\n”+
“\n”
+"" );
}
}

1.命中容器的请求不是每个用户的请求,而是每个请求的请求,即使来自同一个浏览器。

2.
service()
方法在每次请求到达容器时都会被调用,因此在service()方法中放置一个计数器来计算访问您站点的用户数。

///EDITED///strong>

现在,当我展示HttpServlet的示例时,方法将是
doGet
doPost
,而不是
service()
在这里
doGet()

下面是roseindia.com上的一个示例

public class CounterServlet extends HttpServlet{
  public void doGet(HttpServletRequest request, 
  HttpServletResponse response)
  throws ServletException, IOException {
  HttpSession session = request.getSession(true);
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  Integer count = new Integer(0);
  String head;
  if (session.isNew()) {
  head = "This is the New Session";
  } else {
  head = "This is the old Session";
  Integer oldcount =(Integer)session.getValue("count"); 
  if (oldcount != null) {
  count = new Integer(oldcount.intValue() + 1);
  }
  }
  session.putValue("count", count);
  out.println("<HTML><BODY BGCOLOR=\"#FDF5E6\">\n" +
  "<H2 ALIGN=\"CENTER\">" + head + "</H2>\n" + 
  "<TABLE BORDER=1 ALIGN=CENTER>\n"
  + "<TR BGCOLOR=\"#FFAD00\">\n" 
  +"  <TH>Information Type<TH>Session Count\n" 
  +"<TR>\n" +" <TD>Total Session Accesses\n" +
  "<TD>" + count + "\n" +
  "</TABLE>\n" 
  +"</BODY></HTML>" );
  }
}
public类CounterServlet扩展了HttpServlet{
公共无效数据集(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException、IOException{
HttpSession session=request.getSession(true);
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
整数计数=新整数(0);
线头;
if(session.isNew()){
head=“这是新的会话”;
}否则{
head=“这是旧会话”;
整数oldcount=(整数)session.getValue(“count”);
if(oldcount!=null){
count=新整数(oldcount.intValue()+1);
}
}
会话.putValue(“计数”,计数);
out.println(“\n”+
“+head+”\n“+
“\n”
+“\n”
+“信息类型会话计数\n”
+“\n”+“会话访问总数\n”+
“+count+”\n”+
“\n”
+"" );
}
}

Vivek能否请您发布更新后的代码,这将使理解更加清晰。计数器部分不是同步的吗?@a.u.r.Ya我想您是对的。。。但正如我所说的,这段代码来自roseindia.com,它是一段工作代码,我没有编辑。它…+1,这是我感兴趣的:-)我将从代码中学到一些东西:-)Vivek你能发布更新的代码吗,这将使理解更加清晰如果计数器部分不同步的话?@a.u.r你是对的。。。但正如我所说的,这段代码来自roseindia.com,它是一段工作代码,我没有编辑。它…+1,这是我感兴趣的:-)我将从代码中学到一些东西:-)欢迎来到roseindia.net?来吧,不要只是复制你在谷歌找到的过去的代码……欢迎来到roseindia.net?来吧,不要只是复制你在谷歌找到的过去的代码。。。。