我正在用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);
}
}
答案 0 :(得分:1)
如果您想使用您已经知道的工具,请使用JSF。
您还可以在Java Server中创建一个简单的HTTP端点,并使用JavaScript与之通信。 (您使用XmlHTTPRequest将String作为http有效负载发送到服务器,然后以XML,JSON或您喜欢的任何格式(原始字符串?)接收响应.JSON将是一个不错的选择,因为JavaScript非常支持它。对于JSON在Java中我推荐Jackson项目)
编辑:JavaScript部分示例:
B (8-1)