JavaWebApp不断返回相同的结果

JavaWebApp不断返回相同的结果,java,json,servlets,Java,Json,Servlets,我编写了这个web应用程序,输入一个城市的坐标(纬度、经度)(来源:)后,返回美国发生的10次最近地震的列表。现在,我有两个问题: 问题1。 我输入所选城市(如西雅图)的坐标,然后得到正确的结果 我输入第二个城市(例如华盛顿特区)的坐标,得到不同的(正确的)结果 我在第一个城市(如西雅图)输入相同的坐标,结果与前一次第二次搜索相同 我输入了第三、第四、第六等城市的坐标,并不断得到相同的结果 这就像应用程序被卡住了一样(经过2-3次正确的查询?)。有时我会连续得到三个不同的结果,有时是四个,有时只

我编写了这个web应用程序,输入一个城市的坐标(纬度、经度)(来源:)后,返回美国发生的10次最近地震的列表。现在,我有两个问题:

问题1。

  • 我输入所选城市(如西雅图)的坐标,然后得到正确的结果
  • 我输入第二个城市(例如华盛顿特区)的坐标,得到不同的(正确的)结果
  • 我在第一个城市(如西雅图)输入相同的坐标,结果与前一次第二次搜索相同
  • 我输入了第三、第四、第六等城市的坐标,并不断得到相同的结果
  • 这就像应用程序被卡住了一样(经过2-3次正确的查询?)。有时我会连续得到三个不同的结果,有时是四个,有时只是两个,然后打印相同的结果。如果我将坐标硬编码到Servlet到Java方法中,每次的结果都是不同的,因此我猜想将输入字段传递到Java方法中会出现一些问题。 不管我是从列表中选择城市还是自己输入坐标

    问题2。

  • 我从下拉列表中选择一个城市
  • 坐标正在输入到输入html表单中,例如堪萨斯城:纬度:39.099728经度-94.578568
  • 我向纬度添加字母/符号,例如39.099728sdjfhjsdf,经度:-94.578568,然后按submit
  • 我得到的信息是,该字段的格式不正确(直到现在还可以)
  • 我从下拉列表中选择了另一个城市,输入字段被新的坐标填充,我按下submit,,但我一直收到警告,数字格式不正确(就像程序一样,即使输入是新的,仍然会读取39.099728sdjfhjsdf
  • 下面是最简单的工作示例。这个项目是用Eclipse编写的

    ReadLongitudeAndLatitudeServlet.java

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.dominikazb.earthquakes.engine.ReadJsonFile;
    
    @WebServlet("/read")
    public class ReadLongitudeAndLatitudeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String latitudeOfSearchedCityString = request.getParameter("latitudeOfSearchedCity");
        String longitudeOfSearchedCityString = request.getParameter("longitudeOfSearchedCity");
        ReadJsonFile.getReadJson().convertJsonToJavaObjects(latitudeOfSearchedCityString, longitudeOfSearchedCityString);
        response.sendRedirect("list");
    }
    }
    
    import java.io.IOException;
    import java.util.TreeMap;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.dominikazb.earthquakes.engine.ReadJsonFile;
    
    @WebServlet("/list")
    public class PrintEarthquakesServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        TreeMap<Double, String> outputMap = ReadJsonFile.getReadJson().read10closestCities();
        request.setAttribute("outputMap", outputMap);
        request.getRequestDispatcher("/earthquakesList.jsp").forward(request, response);
    }
    }
    
    PrintEarthquakesServlet.java

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.dominikazb.earthquakes.engine.ReadJsonFile;
    
    @WebServlet("/read")
    public class ReadLongitudeAndLatitudeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String latitudeOfSearchedCityString = request.getParameter("latitudeOfSearchedCity");
        String longitudeOfSearchedCityString = request.getParameter("longitudeOfSearchedCity");
        ReadJsonFile.getReadJson().convertJsonToJavaObjects(latitudeOfSearchedCityString, longitudeOfSearchedCityString);
        response.sendRedirect("list");
    }
    }
    
    import java.io.IOException;
    import java.util.TreeMap;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.dominikazb.earthquakes.engine.ReadJsonFile;
    
    @WebServlet("/list")
    public class PrintEarthquakesServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        TreeMap<Double, String> outputMap = ReadJsonFile.getReadJson().read10closestCities();
        request.setAttribute("outputMap", outputMap);
        request.getRequestDispatcher("/earthquakesList.jsp").forward(request, response);
    }
    }
    
    earthquakesList.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    
    <html>
    <head>
    <%@ page isELIgnored="false" %>
    <meta charset="UTF-8">
    </head>
    <body>
    
    
            <div>
                <form action="/read" method="post">
                    <label>Latitude</label> 
                    <fieldset>
                        <input type="text" 
                        name="latitudeOfSearchedCity" 
                        id="latitudeOfSearchedCity" 
                        class="form-control" 
                        oninvalid="this.setCustomValidity('Type in latitude in a format 00.000')"
                        onchange="try{setCustomValidity('')}catch(e){}"
                        oninput="setCustomValidity(' ')"
                        pattern="^[-]?(\d+|\d*\.\d+)$"
                        required="required" />
                    </fieldset>
    
                    <label>Longitude</label> 
                    <fieldset>
                        <input type="text" 
                        name="longitudeOfSearchedCity" 
                        id="longitudeOfSearchedCity" 
                        class="form-control" 
                        oninvalid="this.setCustomValidity('Type in longitude in a format 00.000')"
                        onchange="try{setCustomValidity('')}catch(e){}"
                        oninput="setCustomValidity(' ')"            
                        pattern="^[-]?(\d+|\d*\.\d+)$" 
                        required="required" />
                    </fieldset>
    
                    <fieldset>
                    <label>Select a city</label> 
                    <select id="countrySelect">
                        <option>None</option>
                        <option value="35.084385_-106.650421">Albuquerque</option>                              
                        <option value="33.748997_-84.387985">Atlanta</option>
                        <option value="41.878113_-87.629799">Chicago</option>                           
                        <option value="32.776665_-96.796989">Dallas</option>
                        <option value="39.739235_-104.990250">Denver</option>   
                        <option value="31.761877_-106.485023">El Paso</option>                                                          
                        <option value="29.760427_-95.369804">Houston</option>                                                       
                        <option value="30.332184_-81.655647">Jacksonville</option>
                        <option value="39.099728_-94.578568">Kansas City</option>   
                        <option value="36.169941_-115.139832">Las Vegas</option>                                
                        <option value="34.052235_-118.243683">Los Angeles</option>                                                      
                        <option value="35.149532_-90.048981">Memphis</option>   
                        <option value="43.038902_-87.906471">Milwaukee</option>         
                        <option value="44.977753_-93.265015">Minneapolis</option>                                                       
                        <option value="29.951065_-90.071533">New Orleans</option>                                                                                   
                        <option value="40.712776_-74.005974">New York City</option>
                        <option value="28.538336_-81.379234">Orlando</option>                       
                        <option value="39.952583_-75.165222">Philadelphia</option>
                        <option value="33.448376_-112.074036">Phoenix</option>                              
                        <option value="40.440624_-79.995888">Pittsburgh</option>
                        <option value="45.512230_-122.658722">Portland</option>                                 
                        <option value="38.581573_-121.494400">Sacramento</option>                                   
                        <option value="29.424122_-98.493629">San Antonio</option>   
                        <option value="32.715736_-117.161087">San Diego</option>                                        
                        <option value="37.338207_-121.886330">San Jose</option>                                                                                                 
                        <option value="47.606209_-122.33206">Seattle</option>
                        <option value="38.627003_-90.199402">St. Louis</option> 
                        <option value="32.222607_-110.974709">Tucson</option>                           
                        <option value="38.907192_-77.036873">Washington D.C.</option>                                                                                           
                    </select>
                    </fieldset>
    
                    <br />
    
                    <button type="submit">Submit</button>
                </form>
            </div>
    
            <div class="resultsTable2">
                <table>
                    <thead>
                        <tr>
                            <th>Distance</th>
                            <th>Location</th>
    
                        </tr>
                    </thead>
    
                    <tbody>
                        <c:forEach items="${outputMap}" var="entry">
                            <tr>
                                <td><fmt:formatNumber type="number" maxFractionDigits="1"
                                        value="${entry.key}" /> KM</td>
                                <td><c:out value="${entry.value}" /></td>
                            </tr>
                        </c:forEach>
                    </tbody>
                </table>
            </div>
    
    
    <script src="webjars/jquery/1.9.1/jquery.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <script>
    $('#countrySelect').on('change', function () {
        var val = this.value;
        var parts = val.split("_");
        $('#latitudeOfSearchedCity').val(parts[0]);
        $('#longitudeOfSearchedCity').val(parts[1]);
    });
    </script>
    
    </body>
    </html>
    
    
    纬度
    经度
    选择一个城市
    没有一个
    阿尔伯克基
    亚特兰大
    芝加哥
    达拉斯
    丹佛
    埃尔帕索
    休斯敦
    杰克逊维尔
    堪萨斯城
    拉斯维加斯
    洛杉矶
    孟菲斯
    密尔沃基
    明尼阿波利斯
    新奥尔良
    纽约市
    奥兰多
    费城
    凤凰
    匹兹堡
    波特兰
    萨克拉门托
    圣安东尼奥
    圣地亚哥
    圣何塞
    西雅图
    圣路易斯
    图森
    华盛顿特区。
    
    提交 距离 位置 公里 $('#countrySelect')。在('change',函数(){ var val=该值; var parts=val.split(“”); $('#latitudeOfSearchedCity').val(部分[0]); $(#longitudeOfSearchedCity').val(第[1]部分); });
    web.xml

        <web-app 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" version="3.1">
    
        <display-name>Archetype Created Web Application</display-name>
          <servlet>
          <servlet-name>PrintEarthquakesServlet</servlet-name>
          <servlet-class>com.dominikazb.earthquakes.servlets.PrintEarthquakesServlet</servlet-class>
          </servlet>
          <servlet>
          <servlet-name>ReadLongitudeAndLatitudeServlet</servlet-name>
            <servlet-class>com.dominikazb.earthquakes.servlets.ReadLongitudeAndLatitudeServlet</servlet-class>
          </servlet>
          <servlet-mapping>
            <servlet-name>PrintEarthquakesServlet</servlet-name>
            <url-pattern>/PrintEarthquakesServlet</url-pattern>
          </servlet-mapping>
          <servlet-mapping>
            <servlet-name>ReadLongitudeAndLatitudeServlet</servlet-name>
            <url-pattern>/ReadLongitudeAndLatitudeServlet</url-pattern>
          </servlet-mapping>
    
          <welcome-file-list>
            <welcome-file>earthquakesList.jsp</welcome-file>
          </welcome-file-list>
        </web-app>
    
    
    Web应用程序创建的原型
    打印地震servlet
    com.dominikazb.sequences.servlets.PrintEarthquakesServlet
    ReadLongitudeAndLatitudeServlet
    com.dominikazb.seventures.servlets.ReadLongitudeAndLatitudeServlet
    打印地震servlet
    /打印地震servlet
    ReadLongitudeAndLatitudeServlet
    /ReadLongitudeAndLatitudeServlet
    earthquakesList.jsp
    
    pom.xml

        <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dominikazb</groupId>
    <artifactId>10closestEarthquakes</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>10closestEarthquakes Maven Webapp</name>
    <url>http://maven.apache.org</url>
    
    <properties>
        <tomcat.version>7.0.50</tomcat.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.github.jsimone/webapp-runner -->
        <dependency>
            <groupId>com.github.jsimone</groupId>
            <artifactId>webapp-runner</artifactId>
            <version>9.0.27.1</version>
            <scope>provided</scope>
        </dependency>
    
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.6</version>
        </dependency>
    
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>1.9.1</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.10</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
    </dependencies>
    
    <build>
        <finalName>10closestEarthquakes</finalName>
    
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <wtpversion>2.0</wtpversion>
                    <wtpContextName>todo</wtpContextName>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <source>1.8</source>
                    <target>1.8</target>
                    <showWarnings>true</showWarnings>
                </configuration>
            </plugin>
    
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <contextReloadable>true</contextReloadable>
                </configuration>
            </plugin>
    
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <webappDirectory>${project.build.directory}/${project.artifactId}
                    </webappDirectory>
                    <warName>${project.artifactId}</warName>
                </configuration>
            </plugin>
    
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.github.jsimone</groupId>
                                    <artifactId>webapp-runner</artifactId>
                                    <version>9.0.27.0</version>
                                    <destFileName>webapp-runner.jar</destFileName>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    
        </plugins>
    
    </build>
    </project>
    
    
    4.0.0
    com.dominikazb
    
    . 请提供帮助???

    主要的逻辑错误如下:

    distanceAndPlaceMapForAllCities.put(distanceBetweenTheCityAndEarthquakes, place);
    
    因为那张地图永远在增长

    将这一行添加到您的方法中

    distanceAndPlaceMapForAllCities = new TreeMap<>();
    ObjectMapper om = new ObjectMapper();           
    ...
    
    distance和placeMapforallcities=newtreemap();
    ObjectMapper om=新的ObjectMapper();
    ...
    
    您会得到正确的答案,因为对于方法的每次调用,您都会“重置”映射

    总之,我在你的代码中看到了一些其他的“错误想法”,比如

    • 使用似乎不是很有用的静态字段
    • 在两个不同的函数调用之间共享“位置”(在多线程环境中,您可能会遇到问题)
    无论如何,我希望能帮助你。

    第一期,t