如果我在doGet或doPost中执行,请在servlet中获取,抓取和处理外部网站?

时间:2016-03-16 10:04:12

标签: java selenium servlets

我的服务架构存在一些问题。我的任务如下:

  1. 首先,我需要创建一个Servlet,并在调用 HTTP GET 请求时发送一​​些信息。这样的事情:
  2. http://localhost:8080/?startDate=05/15/2016&endDate=05/22/2016&origin=HKG&destination=LHR

    好的,我在servlet的方法doGet()中使用以下代码获取此信息:

    String startDate = req.getParameter("startDate").toString();
    String endDate = req.getParameter("endDate").toString();
    String origin = req.getParameter("origin").toString();
    String destination = req.getParameter("destination").toString();
    

    2.然后,使用此信息我需要在真实网站(不是我的)上填写表格,这个网站与我的Servlet没有任何关系。我是通过像HTMLUnit这样的Selenium库来完成的。所有这些都是由其他类中的某些方法执行的,但这些方法在servlet的 doGet()中调用。这些网站上的表格已经完成,我在新的网页上转移了结果

    3.然后,我需要以我必须的方式解析这些结果。不管这是什么方式。解析结果应出现在与我的Servlet链接的网页上

    问题是如何将所有这些步骤放在我的servlet中?我应该将什么传递给 doGet()方法?我应该传递给 doPost()?如何以这种方式调用 doPost()?因为现在我在doGet()中完成所有操作,我认为这不是最好的方法,因为 HTTP GET 应该是幂等的。

2 个答案:

答案 0 :(得分:0)

我认为你需要RequestDispatcher

http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html

  

定义一个从客户端接收请求并发送的对象   它们可以访问任何资源(例如servlet, HTML 文件或JSP文件)   服务器。 servlet容器创建RequestDispatcher   object,用作位于的服务器资源的包装器   特定路径或特定名称。

看看方法:

void forward(ServletRequest request, ServletResponse response)

尝试使用ServletRequest对象发送参数并获得响应。

答案 1 :(得分:0)

您不需要doPost方法,因为客户端会在get request中以uri或别名传递数据。 您只需从外部网站获取数据并构建您的回复:

public void doGet(HttpServletRequest request,
                    HttpServletResponse response){

        // your request parsing

        // Your Magic with Selenium

        PrintWriter out = response.getWriter();
        String data = //your data fetched from website by `Selenium` library 
        out.println(//**html with embedded  data **//)
}

一个注意事项: 它看起来很可疑。我不认为它会正常工作。据我所知,Selenium需要一些时间进行导航等,因此您很容易发现timeout错误代码