将web浏览器客户端输入传递给服务器Java源代码

Passing web browser client input to server Java source code

本文关键字:服务器 Java 源代码 web 浏览器 客户端 输入      更新时间:2023-09-26

我正在用Java开发一个web应用程序,该应用程序获取包含网站URL的字符串,解析网站HTML以收集信息,然后使用该信息查询postgresql数据库。这已经使用Java、HTML、JS和CSS编写了。

在我的HTML中,我有一个文本输入框,用户可以在其中粘贴URL并使用按钮提交。我想做的是,将这个URL作为我上面在Java代码中提到的字符串,而不是自己硬编码。最终,在解析了URL HTML文件并在数据库中运行了我需要的任何查询之后,我将把查询结果返回到浏览器,供用户查看。

我知道JavaScript在浏览器中运行,而我的Java源代码在不同的时间都在服务器端。我收集到一个可能的解决方案是在我的Java源代码中提交一个HTTPServlet请求,该请求与我的JavaScript通信;然而,我不确定实现这一目标的正确步骤。XmlHTTPRequest是我看到的其他正在使用的东西。

编辑-在进一步阅读之后,我将决定是编写Javaservlet还是编写JSP来处理此问题。我倾向于servlet,因为我对Java比HTML更熟悉,并且将使用更多的逻辑(HTML解析、使用jdbc的RDBMS查询、返回数据)。

这似乎是正确的决定吗?

我希望我措辞清楚,这是一个合理的问题!非常感谢。

更新/编辑

以下是我在思考了Mois44的答案后编写的代码。我不确定在我的xmlHttp.send()请求中为URL放什么。在浏览器中,有一个文本框,正如我所说,还有用户的提交按钮。

错误:url.html:91 POSThttp://localhost:8080/myapplication/GetURL?url=http://mywebsite.com/category/123986/webpage/404(未找到)

这是这些文件的项目结构:

src/main/
|
|----java/
|   |
|   |----path/to/java/servlet/myServlet.java
|
|----webapp/
    |
    |----META-INF/
    |   |----web.xml
    |
    |----pages/
        |----url.html
    |
    index.html

web.xml:

<servlet>
   <servlet-name>GetURL</servlet-name>
   <servlet-class>path.to.java.servlet.myServlet</servlet-class>
   <init-param>
    <param-name>url</param-name>
    <param-value>www.testurl.com</param-value>  // don't I set this in my url.html from user?
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>myServlet</servlet-name>
  <url-pattern>/myServlet/*</url-pattern> // not sure about this...
</servlet-mapping>

url.html:

<div class="url-input">
    <input type="text" id="txtUrl" class="text-box" value="Paste recipe website URL here" align="middle">
    <button onclick="urlRequest()" id="myid" value="myvalue">Go!</button>
        <script>
            function getURL(xmlHttp) {
                document.getElementById("myid").value = xmlHttp.responseText;
                return document.getElementById("txtUrl").value
            }
        </script>
        <script>
            function urlRequest() {
                var xmlHttp = new XMLHttpRequest();
                var url = getURL(xmlHttp);
                xmlHttp.open('POST', 'http://localhost:8080/myapplication/GetURL?url='+url, true);
                xmlHttp.onreadystatechange = function () {
                    if (xmlHttp.readyState = 4 && xmlHttp.status == 200) {
                        alert(xmlHttp.responseText);
                    }
                };
                xmlHttp.send(url);
            }
        </script>
</div>

myServlet.java:

public class Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    handleRequest(request, response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        handleRequest(request, response);
    }
    protected void handleRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String p = request.getParameter("url");
        System.out.println("test");
        System.out.println(p);
    }
}

如果您想使用您已经知道的工具,请使用JSF。

您也可以在Java服务器中创建一个简单的HTTP端点,并使用JavaScript与之通信。JSON是一个不错的选择,因为JavaScript非常支持它。对于Java中的JSON,我推荐Jackson项目)

编辑:JavaScript部分示例:

// get user input from input field..
var userInput = document.getElementById("#my-input").value;
xmlHttp = new XMLHttpRequest();
//         HTTP Method, URL, async
xmlHttp.open('POST', '/myJavaEndPoint', true);
// create onreadystatechange callback function,
// it gets called everytime the readyState changes..
xmlHttp.onreadystatechange = function () {
    // readyState 4 means "DONE" - request is complete, responseText now contains the full response..
    if (xmlHttp.readyState == 4) {
        alert(xmlHttp.responseText); // Show the result to the user. 
    }
};
xmlHttp.send(userInput); // Start Request, send the user input as post-payload