Java 在servlet中添加用户计数器的功能
我在下面开发了一个servlet,其中的逻辑是,如果name等于saral saxena,那么它会移动到下一页,否则,我也会在代码下面发布,我想做的一个改变是,它还应该显示你是访问者编号,这样,如果来自不同浏览器的两个不同用户点击相同的url,那么对于第二个,它应该显示你是访问者编号2。下面是我当前的一段代码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
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
<input type="text" name="username" size="20"/></p>
<p>Enter your password <input type="text" name="password"
size="20"/></p>
<p>
<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?来吧,不要只是复制你在谷歌找到的过去的代码。。。。