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

Javascript 将web浏览器客户端输入传递到服务器Java源代码,javascript,java,servlets,web-applications,Javascript,Java,Servlets,Web Applications,我正在用Java开发一个web应用程序,它获取一个包含网站URL的字符串,解析网站HTML以收集信息,然后使用该信息查询postgresql数据库。这已经是使用Java、HTML、JS和CSS编写的 在我的HTML中,我有一个文本输入框,用户可以在其中粘贴URL并使用按钮提交。我想做的是,将这个URL作为我在Java代码中提到的字符串,而不是自己硬编码。最后,在解析URL HTML文件并在数据库上运行我需要的任何查询之后,我会将查询结果返回到浏览器,供用户查看 我知道JavaScript在浏览器

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

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

我知道JavaScript在浏览器中运行,而我的Java源代码在不同的时间在服务器端运行。我认为一个可能的解决方案是在我的Java源代码中提交一个与JavaScript通信的HTTPServletRequest;然而,我不确定实现这一目标的正确步骤。XmlHTTPRequest是我见过的另一个被使用的东西

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

这似乎是正确的决定吗

我希望我的措辞清楚,这是一个有效的问题!谢谢大家!

更新/编辑

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

错误: html:91 POST 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>

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

您还可以在Java服务器中创建一个简单的HTTP端点,并使用JavaScript与之通信。(您使用XmlHTTPRequest将字符串作为http负载发送到服务器,然后以XML、JSON或任何您喜欢的格式(原始字符串?)接收响应。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

谢谢你,莫伊斯!实际上,我需要学习更多的JavaScript,所以我想我将采用后一种方法,在我的Javaservlet中创建一个RESTfulHTTP端点,正如您所提到的。我将使用XmlHTTPRequest,并有望在Java中以原始字符串的形式返回它,因为它只是一个属性。我假设我可以进行查询,使用Jackson项目以JSON格式构造结果,然后将其作为响应发送回JavaScript,以便在浏览器端进行用户可见的输出?这似乎正确吗?再次感谢!是的,没错!响应甚至不需要使用JSON格式和Jackson。只需将属性作为字符串发送回来!我为客户端javascript代码添加了一个示例。您是否可以帮助我确定.open()调用的url?我已经用当前代码编辑了我的原始帖子。当我使用submit按钮时,inspector中出现404错误。非常感谢你!
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);
    }
}
// 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