Как избежать одновременных запросов, использующих одни и те же глобальные переменные сервлета - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть веб-приложение jsp + servlet.У меня есть много сервлетов, у которых глобальные переменные объявлены как показано в примере нижеКогда я провел некоторое исследование, я обнаружил, что все глобальные переменные являются общими для всех одновременных запросов.Поэтому мое веб-приложение может работать некорректно.Теперь, как я могу сделать эти переменные разными для каждого запроса.

  import Utils.DBConnection;
    import Utils.IST;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.SQLIntegrityConstraintViolationException;
    import java.sql.Statement;
    import java.util.Properties;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.naming.NamingException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class Category extends HttpServlet {

        Connection connection = null;
        Statement statement = null;
        IST ist;
        PrintWriter out;

        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            out = response.getWriter();
        }

        public void connectToServer() throws SQLException, NamingException {
            connection = DBConnection.getDataSource().getConnection();
            statement = connection.createStatement();
            ist = new IST();
        }

        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
            try {
                connectToServer();
                switch (request.getParameter("mode")) {
                    case "checkAvailability": {
                        String category_name = request.getParameter("category_name");
                        String sql = "Select category_name from course_category where category_name='" + category_name + "'";
                        ResultSet resultset_val = statement.executeQuery(sql);
                        if (resultset_val.next()) {
                            out.print("exist");
                        }
                        break;
                    }
                    case "checkAvailability1": {
                        String category_id = request.getParameter("category_id");
                        String category_name = request.getParameter("category_name");
                        String sql = "Select category_name from course_category where category_name='" + category_name + "' and category_id!='" + category_id + "'";
                        ResultSet resultset_val = statement.executeQuery(sql);
                        if (resultset_val.next()) {
                            out.print("exist");
                        }
                        break;
                    }
                    case "checkwarning": {
                        String category_id = request.getParameter("category_id");
                        String warning = "";
                        String sql_query = "select * from course where category_id='" + category_id + "' and status='Active'";
                        ResultSet resultset_val = statement.executeQuery(sql_query);
                        if (resultset_val.next()) {
                            warning = "yes";
                        }
                        String sql_query1 = "select * from assessment where category_id='" + category_id + "' and status='Active'";
                        ResultSet resultset_val1 = statement.executeQuery(sql_query1);
                        if (resultset_val1.next()) {
                            warning = "yes";
                        }
                        if (warning.equals("yes")) {
                            throw new Exception();
                        }
                        break;
                    }
                    case "active_inactive": {
                        String category_id = request.getParameter("category_id");
                        String status = request.getParameter("status");
                        String sql = "Update course_category set status='" + status + "',last_updated_user='" + request.getSession(false).getAttribute("log_user_id") + "',last_updated_ts='" + ist.getLastUpdatedts() + "' where category_id='" + category_id + "'";
                        int i = statement.executeUpdate(sql);
                        if (i > 0) {
                        }
                        connection.commit();
                        break;
                    }
                    default:
                        break;
                }
            } catch (Exception ex) {
                Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex);
                try {
                    response.setStatus(400);
                    if (!connection.isClosed()) {
                        connection.rollback();
                    }
                } catch (SQLException ex1) {
                    Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex1);
                }
            } finally {
                try {
                    out.flush();
                    out.close();
                    if (!statement.isClosed()) {
                        statement.close();
                    }
                    if (!connection.isClosed()) {
                        connection.close();
                    }
                    statement=null;
                    connection = null;
                } catch (SQLException ex) {
                    Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            processRequest(request, response);
            try {
                connectToServer();
                switch (request.getParameter("mode")) {
                    case "add": {
                        String category_name = request.getParameter("category_name");
                        String category_desc = request.getParameter("category_desc");
                        String status = request.getParameter("status");
                        String sql = "INSERT INTO course_category(category_name,category_desc,status,created_user,created_ts,last_updated_user,last_updated_ts) VALUES ('" + category_name + "',  '" + category_desc + "','" + status + "','" + request.getSession(false).getAttribute("log_user_id") + "','" + ist.getLastUpdatedts() + "','" + request.getSession(false).getAttribute("log_user_id") + "','" + ist.getLastUpdatedts() + "')";
                        statement.executeUpdate(sql);
                        connection.commit();
                        break;
                    }
                    case "edit": {
                        String category_id = request.getParameter("category_id");
                        String category_name = request.getParameter("category_name");
                        String category_desc = request.getParameter("category_desc");
                        String sql = "update course_category set category_name='" + category_name + "',category_desc='" + category_desc + "',last_updated_user='" + request.getSession(false).getAttribute("log_user_id") + "',last_updated_ts='" + ist.getLastUpdatedts() + "' where category_id='" + category_id + "'";
                        statement.executeUpdate(sql);
                        connection.commit();
                        break;
                    }
                    default:
                        break;
                }
            } catch (Exception ex) {
                try {
                    Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex);
                    if (ex instanceof SQLIntegrityConstraintViolationException) {
                        response.setStatus(1);
                    } else {
                        response.setStatus(2);
                    }
                    if (!connection.isClosed()) {
                        connection.rollback();
                    }
                } catch (SQLException ex1) {
                    Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex1);
                }
            } finally {
                try {
                    out.flush();
                    out.close();
                    if (!statement.isClosed()) {
                        statement.close();
                    }
                    if (!connection.isClosed()) {
                        connection.close();
                    }
                    statement=null;
                    connection = null;
                } catch (SQLException ex) {
                    Logger.getLogger(Category.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        @Override
        public String getServletInfo() {
            return "Short description";
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...