Глобальная переменная не обновляется функцией переопределения - PullRequest
0 голосов
/ 22 сентября 2019

У меня проблема с тем, что моя функция переопределения doGet обновила мою глобальную переменную arrayList "list", чтобы я мог затем перебрать ее внутри функции doPost.Я немного заржавел с Java, так как я не использовал его некоторое время, поэтому я не могу найти проблему, кроме как подозреваю, что это как-то связано с тем, что я использую функции переопределения.Любая помощь приветствуется, код ниже.

public class MembershipControllerServlet extends HttpServlet {

    public static ArrayList <String> list = new ArrayList();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String action=request.getParameter("action");
        String url="/index.html";

        if (action == null) {
            action="";
        }
        else if (action.equals("signup")) {
            url="/signup.jsp";
        }
        else{
            String m = "";
            String name = request.getParameter("name");
            String user = request.getParameter("userName");
            String password = request.getParameter("password");
            String address = request.getParameter("address");
            String countries[] = request.getParameterValues("countries");
            String zip = request.getParameter("zip");
            String email = request.getParameter("email");
            String male = request.getParameter("male");
            String female = request.getParameter("female");
            String langs[] = request.getParameterValues("lang");


         if (name.isEmpty() || user.isEmpty() || password.isEmpty() || address.isEmpty() || countries.length ==0 || zip.isEmpty() ||
                 email.isEmpty() || male == null || female == null || langs.length ==0) 
         {
            m = "Please enter all data";  
            list.add(m);
         }
         else
         {
           m = "name: " + name;
           list.add(m);
         }
        }


         processRequest(request, response);
        getServletContext().getRequestDispatcher(url).forward(request,response); 
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

     try (PrintWriter out = response.getWriter()) {
         /* TODO output your page here. You may use following sample code. */

         String newmsg= "";
         for (Object li : list) {
             newmsg += li;
         }
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet MembershipControllerServlet</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>" + newmsg + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }

и XML-файл:

<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <servlet>
        <servlet-name>MembershipControllerServlet</servlet-name>
        <servlet-class>edu.uncc.nbad.MembershipControllerServlet</servlet-class>
    </servlet>


     <servlet-mapping>
        <servlet-name>MembershipControllerServlet</servlet-name>
        <url-pattern>/membership</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
       <welcome-file>signup.jsp</welcome-file>
    </welcome-file-list>

</web-app>

окончательно signup.jsp:

<!DOCTYPE html>
<head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
        <link rel="stylesheet" href="style.css" />
    </head>
    <body>
        <h1>Registration Form</h1>

        <form method = "post" action = "/Lab3-Hitz-Herron/membership?action=signup">
            <label>Name</label><input class = 'box' type = 'text' name = "name"><br />
            <label>UserName:</label><input class = 'box' type = 'text' name =
            "userName"><br />
            <label>Password: </label><input class = 'box' type = 'text' name =
            "password"><br />
            <label>Address:</label><input class = 'box' type = 'text' name =
            "address"><br />
            <label>Country:</label>
            <select class= "box" name = 'countries'>
                <option value="USA">USA</option>
                <option value="OTHER">Other</option> </select
            ><br />
            <label>Zip Code:</label> <input class="box" type="text" name ="zip" /><br />
            <label>Email: </label> <input class="box" type="email" email namd ="email" /><br />
            <label>Sex: </label> <input type="radio" name="gender" value="male" name ="male" />Male
            <input type="radio" name="gender" value="female" name = "female"/>Female<br />
            <label>Language:</label>
            <input type="checkbox" name="language" value="English" name ="lang" />English
            <input type="checkbox" name="language" value="French" name ="lang"/>French
            <input type="checkbox" name="language" value="German" name ="lang" />German <br />
            About:
            <textarea name = "about"></textarea><br />
                        <button type="submit" >Submit</button>
        </form>
    </body>
</html>

1 Ответ

0 голосов
/ 22 сентября 2019

TL; DR

Никогда не делай этого!

У вас есть проблема параллелизма с этой реализацией, известной как условие гонки, поскольку список будет разделен между потоками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...