X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=accelerator-examples%2Fspring%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Faccelerator%2Fexamples%2Fspring%2FSpringController.java;fp=accelerator-examples%2Fspring%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Faccelerator%2Fexamples%2Fspring%2FSpringController.java;h=667165877b73420c929f374c33f8257d548692e7;hp=0000000000000000000000000000000000000000;hb=a6e0e65cce68acb20abc6ca935471611a740c342;hpb=1d395c6002486d485bde0d5dc713886d70bd3f8a diff --git a/accelerator-examples/spring/src/main/java/de/juplo/accelerator/examples/spring/SpringController.java b/accelerator-examples/spring/src/main/java/de/juplo/accelerator/examples/spring/SpringController.java new file mode 100644 index 00000000..66716587 --- /dev/null +++ b/accelerator-examples/spring/src/main/java/de/juplo/accelerator/examples/spring/SpringController.java @@ -0,0 +1,65 @@ +package de.juplo.accelerator.examples.spring; + +import de.juplo.accelerator.annotations.CacheSeconds; +import de.juplo.accelerator.annotations.Cacheable; +import de.juplo.accelerator.annotations.LastModified; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; +import javax.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + + +/** + * Simple Spring-MVC Controller + * @author kai + */ +@Controller +@Cacheable(eager=true) +public class SpringController +{ + public static final String ACCESS_TIME = SpringController.class.getCanonicalName() + ".ACCESS_TIME"; + public static final Integer DEFAULT_MAX_AGE = 60; + + private Date lastModified = new Date(); + private Map requests = new TreeMap(); + private Map accessTimes = new HashMap(); + + + @CacheSeconds + public int cacheSeconds(HttpServletRequest request) { + String maxAge = request.getParameter("max-age"); + if (maxAge != null && maxAge.matches("^\\s*\\d+\\s*$")) + return Integer.parseInt(maxAge); + else + return DEFAULT_MAX_AGE; + } + + @LastModified + public long lastModified(HttpServletRequest request) { + String query = request.getQueryString(); + query = query == null ? "" : query; + Date accessTime = accessTimes.get(query); + if (accessTime == null || !accessTime.equals(lastModified)) + /** Neuer Zugriff! */ + accessTime = new Date(); + request.setAttribute(ACCESS_TIME, accessTime); + return accessTime.getTime(); + } + + @RequestMapping("/spring-controller.html") + public ModelAndView process(HttpServletRequest request) + { + lastModified = (Date)request.getAttribute(ACCESS_TIME); + String query = request.getQueryString(); + query = query == null ? "" : query; + requests.put(lastModified, query); + accessTimes.put(query, lastModified); + ModelAndView mav = new ModelAndView("controller-view"); + mav.addObject("requests", requests); + return mav; + } +} \ No newline at end of file