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

时间:2016-04-29 04:43:12

标签: javascript java servlets web-applications

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

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

我知道JavaScript在浏览器中运行,而我的Java源代码在不同时间是服务器端。我已经收集到一个可能的解决方案是在我的Java源代码中提交一个HTTPServletRequest,它与我的JavaScript进行通信;但我不确定实现这一目标的正确步骤。 XmlHTTPRequest是我见过的其他东西。

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

这似乎是正确的决定吗?

我希望我能清楚地说明这一点,这是一个有效的问题!谢谢!

UPDATE /修改

这是我在考虑Mois44的答案后到目前为止所做的代码。我不确定在我的xmlHttp.send()请求中为URL添加了什么。在浏览器中,有一个文本框,并按照我的说法为用户提交了按钮。

错误: url.html:91 POST http://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);
    }
}

1 个答案:

答案 0 :(得分:1)

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

您还可以在Java Server中创建一个简单的HTTP端点,并使用JavaScript与之通信。 (您使用XmlHTTPRequest将String作为http有效负载发送到服务器,然后以XML,JSON或您喜欢的任何格式(原始字符串?)接收响应.JSON将是一个不错的选择,因为JavaScript非常支持它。对于JSON在Java中我推荐Jackson项目)

编辑:JavaScript部分示例:

B (8-1)