当前位置: 首页 > 知识库问答 >
问题:

如何将用户对jsp页面两个不同部分的点击存储到mysql数据库中

郤仰岳
2023-03-14

我的jsp页面有两个部分,左边和右边。用户登录后,他们的名字将被显示,如果他们点击左边或右边,也将被显示。

在左侧,如果没有用户交互,数据应显示在表格中,在右侧,通过从下拉列表中选择名称并单击按钮,数据将显示在表格中。我想存储他们关闭浏览器后的点击次数。

你能提供一些指导吗,我应该把每个变量传递给一个新的servlet并更新MySQL表吗?另一个问题是,当用户点击按钮(因为它将被发布到servlet类)时,他们的名字和左边部分的计数将被删除。我想我应该改变编程的风格,但是我不知道该怎么做。

这就是我所做的:

指数jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Example</title>
</head>
<body>
    <form method="post" action="second.jsp">
        <center>
         <table border="1" width="30%" cellpadding="3">
            <tbody>
                <tr>
                    <td>User id</td>
                    <td><input type="text" name="uname" value="" /></td>
                </tr>
        </tbody>
        </table>
        <input type="submit" value="login" />
        </center>
    </form>
</body>

第二jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"         "http://www.w3.org/TR/html4/loose.dtd">
   <html>
    <%@ page import="java.util.ArrayList" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Title</title>
</head>
<body>
<% 
String user = request.getParameter("uname"); 

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db",
        "root", "pass");
Statement st = con.createStatement();
ResultSet rs;
rs = st.executeQuery("select * from users where uemail='" + user + "' ");
if (rs.next()) {
    session.setAttribute("uname", user);
    out.println("welcome " + user);
} else {

     int i = st.executeUpdate("insert into users (uemail) values ('" + user + "')");
        if (i > 0) {
            session.setAttribute("uname", user);
            out.println("welcome " + user);
        }
 }
%>

<div style="width:100%;" >
<div style="float:left; width:60%;" >

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/db"
 user="root"  password="pass"/>

 <sql:query dataSource="${snapshot}" var="resultt">
 SELECT a,b,c,d from table;
 </sql:query>
 <table  width="70%" onclick='lcounters()'>
 <c:forEach var="row" items="${resultt.rows}">
 <tr>
 <td><a href="${row.a}" target="blank"><font  size="5">${row.d}</font> </a></td>
 </tr>
 <tr>
  <td ><font color="green" size="4"><c:out value=" ${row.b}"/></font></td>
 </tr>
 <tr>
 <td ><c:out value=" ${row.c}"/></td>
 </tr>
 <tr>
 <td>
 &nbsp;
 </td>
 </tr>
 </c:forEach>
 <script> var lclicks = 0;
 function lcounters() {
 clicks += 1;
 document.getElementById("lclicks").innerHTML = lclicks;

 };</script>

 <p>Clicks: <a id="lclicks">0</a></p>
 </table>
 </div>

 <div style="float:right; width:40%; ">

 <form action="ActionServlet" method="post">
 <table >   
 <tr> <td> Names:</td>
 <td>   
 <select name="names">
<option value=""> </option>
<option value="aaa">aaa</option>
<option value="bbb">bbb</option>
</select>
</td>
<td> <input type="submit"  name="jdbc_query"  value="Show" />  </td>
</tr>
<script> var rclicks = 0;
function rcounters() {
 rclicks += 1;
 document.getElementById("rclicks").innerHTML = rclicks ;

};</script>
<p>Clicks: <a id="rclicks">0</a></p> 
</table>
<c:if test="${result != null}">

<table border="1" width="100%"  onclick='rcounter()'>
          <tr>
          <th>first</th> 
          <th>second</th>
          <th>third</th>

        </tr>
  <c:forEach var="row" items="${result.rows}">
 <tr>
<td><c:out value="${row.u}"/></td>
<td><c:out value="${row.v}"/></td>
<td>  <a href="${row.w}"> <font color="green"> ${row.x} </font>    </a><br>${row.y}   </td>
</tr>
</c:forEach> 
</table>
</c:if>
</div>
 </form>
</div>

</body>
</html>

servlet类:

import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.NamingException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;

@SuppressWarnings("serial")
public class ActionServlet extends HttpServlet {


@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    // HttpSession session = request.getSession();
    String out = "\n";
    String cname = request.getParameter("names");
    MysqlDataSource ds = null;
    Connection connect = null;
    Statement statement = null;

    try {

    ds = new MysqlDataSource();
    ds.setUrl("jdbc:mysql://localhost:3306/db");
    ds.setUser("root");
    ds.setPassword("pass");
    connect = ds.getConnection();
    statement = connect.createStatement();
    String query = "SELECT u,v,x,w,y FROM table2 where name= ? "  ;
    PreparedStatement ps1 = connect.prepareStatement(query);
    ps1.setString(1, cname);
    ResultSet resultSet = ps1.executeQuery();
    Result result = ResultSupport.toResult(resultSet);
    request.setAttribute("result", result);
    RequestDispatcher rd = request.getRequestDispatcher("second.jsp");
    rd.forward(request, response);

   } catch (SQLException e) {

        e.printStackTrace();
    }
    finally {

        try { statement.close(); } catch (SQLException e) { e.getErrorCode(); }
        try { connect.close(); } catch (SQLException e) { e.getErrorCode(); }
    }

}}

共有1个答案

翟修明
2023-03-14

非常不稳定的环境!

想知道为什么你需要计算点击次数,但如果这是一项业务,那么你需要考虑桌面应用程序,有了web,你就不能让它100%稳定和工作。

但是如果您坚持要解决这个问题,我建议您使用WebSocket,并每隔x秒将单击传递给服务器。

另外,请尝试使用连接池和准备好的语句,您的db连接状态目前是最差的。

 类似资料:
  • 需要根据特定环境从两个远程存储库部署工件。所以我尝试在pom.xml的分发管理中使用配置文件 尝试激活个人资料 我得到以下错误。 部署失败:存储库元素没有指定在POM内部分布管理元素或在-DaltDeploymentRepository=id::布局::url参数 似乎pom无法识别分发管理标签。 但它在没有单一分销管理的配置文件的情况下运行良好。 有谁能给点建议吗? 参考 设置Maven以允许轻

  • Evere:路径为[/EmployeeRegistrationForm]的上下文中servlet[dispatcher]的servlet.Service()引发异常[请求处理失败;嵌套异常为org.springframework.web.bind.annotation.support.handlerMethodInvocationException:未能调用处理程序方法[public java.u

  • 问题内容: 我有一个mysql数据库表,该表需要与ElasticSearch索引保持一致。我已经将表从表导出到es索引,但是现在我需要保持数据同步,否则搜索将很快变得过时。 我能想到的唯一方法是每隔X分钟导出一次表,然后将其与上次导入的表进行比较。这是不可行的,因为该表大约有1000万行,而且我不想整天每五分钟进行一次表导出。有什么好的解决方案?请注意,我仅具有对数据库的读取权限。 问题答案: 我

  • 我正在创建一个web应用程序,允许学生通过HTML表单注册(完成了这部分内容),并将他们的数据存储在数据库中(完成了)。我正在使用PHP/MySQL来编写这个。 我的想法是,我有一个‘后端’将允许管理员搜索一个学生的名字,最后,或全名(这是完成),并显示一个学生名单在下一页。(另已完成)。学生列表将是单独的超链接。 我的页面布局是: BackendHome.php 具有搜索栏和搜索按钮 searc

  • 我从PHP的API接收lan和lot数据,并用和从响应中提取它们。我如何将它们添加到我的MySQL列作为点值?

  • 我的MySQL数据库中有四个表。 订单 项目 Orders_Items 客户 订单表 订单ID客户ID 项目表 item_id item_name item_price item_quantity orders_items表 order_item_id order_id item_id 客户表 customer_id customer_name 我想显示一个表,该表列出订单表中的所有订单,并将所有