Created
January 16, 2012 16:32
-
-
Save keesun/1621658 to your computer and use it in GitHub Desktop.
Servlet 3.0's Asynchronous Support sample
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package me.whiteship.board.modules.servlet.async; | |
import javax.servlet.AsyncContext; | |
import javax.servlet.AsyncEvent; | |
import javax.servlet.AsyncListener; | |
import javax.servlet.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import java.io.IOException; | |
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.concurrent.*; | |
/** | |
* @author Keesun Baik | |
* To test this class, turn off all filters in web.xml. | |
*/ | |
@WebServlet(value = "/stocks", asyncSupported = true) | |
public class AsyncServlet extends HttpServlet { | |
@Override | |
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { | |
final AsyncContext asyncContext = req.startAsync(req, res); | |
asyncContext.getResponse().getWriter().println("Start"); | |
asyncContext.start(new StockPriceRunner(asyncContext)); | |
} | |
private class StockPriceRunner implements Runnable { | |
AsyncContext asyncContext; | |
public StockPriceRunner(AsyncContext asyncContext) { | |
this.asyncContext = asyncContext; | |
} | |
@Override | |
public void run() { | |
String ticker = "GOOG"; | |
Double price = YahooFinance.getPrice(ticker); | |
try { | |
asyncContext.getResponse().getWriter().printf("ticker: %s, price: %.2f", ticker, price); | |
} catch (IOException e) { | |
throw new RuntimeException(e); | |
} finally { | |
asyncContext.complete(); | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package me.whiteship.board.modules.servlet.async; | |
import javax.servlet.AsyncContext; | |
import javax.servlet.DispatcherType; | |
import javax.servlet.ServletException; | |
import javax.servlet.annotation.WebServlet; | |
import javax.servlet.http.HttpServlet; | |
import javax.servlet.http.HttpServletRequest; | |
import javax.servlet.http.HttpServletResponse; | |
import java.io.IOException; | |
/** | |
* @author Keesun Baik | |
* To test this class, turn off all filters in web.xml. | |
*/ | |
@WebServlet(value = "/stocks2", asyncSupported = true) | |
public class AsyncServlet2 extends HttpServlet { | |
@Override | |
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { | |
if(req.getDispatcherType() == DispatcherType.REQUEST) { | |
final AsyncContext asyncContext = req.startAsync(req, res); | |
asyncContext.getResponse().getWriter().println("Start"); | |
asyncContext.start(new StockPriceRunner(asyncContext)); | |
} else if(req.getDispatcherType() == DispatcherType.ASYNC) { | |
Double price = (Double) req.getAttribute("price"); | |
String ticker = (String) req.getAttribute("ticker"); | |
res.getWriter().printf("ticker: %s, price: %.2f", ticker, price); | |
} | |
} | |
private class StockPriceRunner implements Runnable { | |
AsyncContext asyncContext; | |
public StockPriceRunner(AsyncContext asyncContext) { | |
this.asyncContext = asyncContext; | |
} | |
@Override | |
public void run() { | |
String ticker = "GOOG"; | |
Double price = YahooFinance.getPrice(ticker); | |
asyncContext.getRequest().setAttribute("price", price); | |
asyncContext.getRequest().setAttribute("ticker", ticker); | |
asyncContext.dispatch(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package me.whiteship.board.modules.servlet.async; | |
import org.springframework.web.client.RestTemplate; | |
/** | |
* @author Keesun Baik | |
* Referenced from NFJS 2011 April | |
*/ | |
public class YahooFinance { | |
private static final String YAHOO_FINANCE_API = "http://download.finance.yahoo.com/d/quotes.csv?s="; | |
private static final String API_PARAMS = "&f=nsl1op&e=.csv"; | |
public static double getPrice(final String ticker) { | |
RestTemplate restTemplate = new RestTemplate(); | |
String data = restTemplate.getForObject(YAHOO_FINANCE_API + ticker + API_PARAMS, String.class); | |
final String[] dataItems = data.split(","); | |
return Double.parseDouble(dataItems[dataItems.length - 1]); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment