0

我正在开发一个从某些端点读取响应、处理信息并在 Excel 工作簿中创建报告的应用程序。因此,该应用程序的目的是创建此 .xlsx 报告。由于应用程序只是从 2 个端点读取 json,我没有使用 Spring 或其他一些 Web 框架,因此我只是创建了一个方法,该方法使用 Apache HttpClient 从相应网站的端点请求响应并创建报告。

一开始,应用程序会在控制台中向用户请求所需的输入数据(例如,应创建报告的期间的开始和结束日期)。

然而,现在给我任务的人希望我创建一个 wb 页面,应该从中获取初始输入。

我的问题是是否可以在不使用 tomcat 或将应用程序重构为 Spring Boot 应用程序的情况下处理此 html 或 jsp 页面的输入。我已经在使用 Apache HttpClient,那么如何使用它来处理页面呢?

这是我尝试使用 http 客户端的方法:

public InputBean getRequiredDetails() throws IOException {
        String urlString = "http://localhost:8081/index.html";
        HttpPost request = new HttpPost(urlString);
        CloseableHttpResponse response = httpClient.execute(request);

        return Utils.MAPPER.readValue(EntityUtils.toString(response.getEntity()), InputBean.class);
    }

这是我创建的jsp页面:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Forecast Report</title>
</head>

<body>
    <h1>Forecast Report</h1>
    <form action="<%=request.getContextPath()%>/getInput" method="post">
        <table style="with: 50%">
            <tr>
                <td>Username</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="text" name="password" /></td>
            </tr>
            <tr>
                <td>Start date</td>
                <td><input type="text" name="start_date" /></td>
            </tr>
            <tr>
                <td>End date</td>
                <td><input type="password" name="end_date" /></td>
            </tr>
        </table>
        <br/>
        <input type="submit" value="Submit" />
    </form>
</body>

</html>

这是我创建的输入 bean:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class InputBean {

    private String username;

    private String password;

    private String startDate;

    private String endDate;

}

我在互联网上阅读了有关提出请求的可能方法,但我得到了 ConnectException:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.connect0(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:608)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:605)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:440)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
at com.dataart.forecasts.http.HttpConnector.getRequiredDetails(HttpConnector.java:74)
at com.dataart.forecasts.ForecastReportApplication.main(ForecastReportApplication.java:56)

所以我想这是因为我有一个客户端但没有服务器。我将tomcat作为我的项目中的依赖项,但仍然不知道如何处理它。到目前为止,我已经将 Spring Boot 用于 Web 应用程序,其中嵌入了 Tomcat,我对 HttpClient 没有太多经验。请帮忙!

4

0 回答 0