diff options
author | elmot <elmot@vaadin.com> | 2015-09-25 16:40:44 +0300 |
---|---|---|
committer | elmot <elmot@vaadin.com> | 2015-09-25 16:40:44 +0300 |
commit | a1b265c318dbda4a213cec930785b81e4c0f7d2b (patch) | |
tree | b149daf5a4f50b4f6446c906047cf86495fe0433 /documentation/advanced/advanced-requesthandler.asciidoc | |
parent | b9743a48a1bd0394f19c54ee938c6395a80f3cd8 (diff) | |
download | vaadin-framework-a1b265c318dbda4a213cec930785b81e4c0f7d2b.tar.gz vaadin-framework-a1b265c318dbda4a213cec930785b81e4c0f7d2b.zip |
Framework documentation IN
Change-Id: I767477c1fc3745f9e1f58075fe30c9ac8da63581
Diffstat (limited to 'documentation/advanced/advanced-requesthandler.asciidoc')
-rw-r--r-- | documentation/advanced/advanced-requesthandler.asciidoc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/documentation/advanced/advanced-requesthandler.asciidoc b/documentation/advanced/advanced-requesthandler.asciidoc new file mode 100644 index 0000000000..df991bc5cd --- /dev/null +++ b/documentation/advanced/advanced-requesthandler.asciidoc @@ -0,0 +1,96 @@ +--- +title: Request Handlers +order: 4 +layout: page +--- + +[[advanced.requesthandler]] += Request Handlers + +Request handlers are useful for catching request parameters or generating +dynamic content, such as HTML, images, PDF, or other content. You can provide +HTTP content also with stream resources, as described in +<<dummy/../../../framework/application/application-resources#application.resources.stream,"Stream +Resources">>. The stream resources, however, are only usable from within a +Vaadin application, such as in an [classname]#Image# component. Request handlers +allow responding to HTTP requests made with the application URL, including GET +or POST parameters. You could also use a separate servlet to generate dynamic +content, but a request handler is associated with the user session and it can +easily access data associated with the session and the user. + +To handle requests, you need to implement the [interfacename]#RequestHandler# +interface. The [methodname]#handleRequest()# method gets the session, request, +and response objects as parameters. + +If the handler writes a response, it must return [literal]#++true++#. This stops +running other possible request handlers. Otherwise, it should return +[literal]#++false++# so that another handler could return a response. +Eventually, if no other handler writes a response, a UI will be created and +initialized. + +In the following example, we catch requests for a sub-path in the URL for the +servlet and write a plain text response. The servlet path consists of the +context path and the servlet (sub-)path. Any additional path is passed to the +request handler in the [parameter]#pathInfo# of the request. For example, if the +full path is [filename]#/myapp/myui/rhexample#, the path info will be +[filename]#/rhexample#. Also, request parameters are available. + + +[source, java] +---- +// A request handler for generating some content +VaadinSession.getCurrent().addRequestHandler( + new RequestHandler() { + @Override + public boolean handleRequest(VaadinSession session, + VaadinRequest request, + VaadinResponse response) + throws IOException { + if ("/rhexample".equals(request.getPathInfo())) { + // Generate a plain text document + response.setContentType("text/plain"); + response.getWriter().append( + "Here's some dynamically generated content.\n"); + response.getWriter().format(Locale.ENGLISH, + "Time: %Tc\n", new Date()); + + // Use shared session data + response.getWriter().format("Session data: %s\n", + session.getAttribute("mydata")); + + return true; // We wrote a response + } else + return false; // No response was written + } +}); +---- + +A request handler can be used by embedding it in a page or opening a new page +with a link or a button. In the following example, we pass some data to the +handler through a session attribute. + + +[source, java] +---- +// Input some shared data in the session +TextField dataInput = new TextField("Some data"); +dataInput.addValueChangeListener(event -> + VaadinSession.getCurrent().setAttribute("mydata", + event.getProperty().getValue())); +dataInput.setValue("Here's some"); + +// Determine the base path for the servlet +String servletPath = VaadinServlet.getCurrent() + .getServletContext().getContextPath() + + "/book"; // Servlet + +// Display the page in a pop-up window +Link open = new Link("Click to Show the Page", + new ExternalResource(servletPath + "/rhexample"), + "_blank", 500, 350, BorderStyle.DEFAULT); + +layout.addComponents(dataInput, open); +---- + + + |