package org.springboot.sample.controller; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.EnvironmentAware; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; @Controller public class PageController implements EnvironmentAware{ private static final Logger log = LoggerFactory.getLogger(PageController.class); // 从 application.properties 中读取配置,如取不到默认值为Hello Shanhy @Value("${application.hell:Hello Shanhy}") private String hello = "Hello Shanhy"; /** * 默认页<br/> * @RequestMapping("/") 和 @RequestMapping 是有区别的 * 如果不写参数,则为全局默认页,加入输入404页面,也会自动访问到这个页面。 * 如果加了参数“/”,则只认为是根页面。 * * @return * @author SHANHY * @create 2016年1月5日 */ @RequestMapping(value = {"/","/index"}) public String index(Map<String, Object> model){ // 直接返回字符串,框架默认会去 spring.view.prefix 目录下的 (index拼接spring.view.suffix)页面 // 本例为 /WEB-INF/jsp/index.jsp model.put("time", new Date()); model.put("message", this.hello); return "index"; } /** * 响应到JSP页面page1 * * @return * @author SHANHY * @create 2016年1月5日 */ @RequestMapping("/page1") public ModelAndView page1(){ log.info(">>>>>>>> PageController.page1"); // 页面位置 /WEB-INF/jsp/page/page.jsp ModelAndView mav = new ModelAndView("page/page1"); mav.addObject("content", hello); return mav; } /** * 响应到JSP页面comet * * @return * @author SHANHY */ @RequestMapping("/comet") public ModelAndView comet(){ ModelAndView mav = new ModelAndView("comet"); return mav; } @RequestMapping("/async/test") @ResponseBody public Callable<String> callable() { // 这么做的好处避免web server的连接池被长期占用而引起性能问题, // 调用后生成一个非web的服务线程来处理,增加web服务器的吞吐量。 return new Callable<String>() { @Override public String call() throws Exception { Thread.sleep(3 * 1000L); return "小单 - " + System.currentTimeMillis(); } }; } @RequestMapping("/testJson") @ResponseBody public Map<String, String> getInfo(@RequestParam(required=false) String name, @RequestParam(required=false) String name1) { Map<String, String> map = new HashMap<>(); map.put("name", name); map.put("name1", name1); return map; } /** * 输入 和输出为JSON格式的数据的方式 HttpEntity<?> ResponseEntity<?> * * @param u * @return */ @ResponseBody @RequestMapping(value = "/testJson2", method = RequestMethod.GET) public ResponseEntity<Map<String, String>> jsonTest4(@RequestParam(required=false) String name, @RequestParam(required=false) String name1, HttpServletRequest request, HttpServletResponse response) { Map<String, String> map = new HashMap<>(); map.put("name", name); map.put("name1", name1); // 这里直接new一个对象(HttpHeaders headers = new HttpHeaders();) HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.add("MyHeaderName", "SHANHY"); List<String> domainList = new ArrayList<>(); domainList.add("http://www.domain1.com"); domainList.add("http://www.domain2.com"); domainList.add("http://localhost:8088"); String requestDomain = request.getHeader("origin"); log.info("requestDomain = " + requestDomain); if(domainList.contains(requestDomain)){ response.addHeader("Access-Control-Allow-Origin", requestDomain); response.addHeader("Access-Control-Allow-Methods", "GET"); response.addHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); } ResponseEntity<Map<String, String>> responseResult = new ResponseEntity<Map<String, String>>( map, responseHeaders, HttpStatus.OK); return responseResult; } /** * 响应到JSP页面page1(可以直接使用Model封装内容,直接返回页面字符串) * * @return * @author SHANHY * @create 2016年1月5日 */ @RequestMapping("/page2") public String page2(Model model){ // 页面位置 /WEB-INF/jsp/page/page.jsp model.addAttribute("content", hello + "(第二种)"); // 下面是测试EhCache的 String cacheContent = ""; CacheManager cacheManager = CacheManager.getInstance(); Cache cache = cacheManager.getCache("testCache"); Element element = cache.get("key"); if(element == null){ element = new Element("key", "你好,缓存内容!" + System.currentTimeMillis()); cache.put(element); } cacheContent = element.getValue().toString(); model.addAttribute("content", hello + "(第二种)" + cacheContent); return "page/page1"; } @Override public void setEnvironment(Environment environment) { String s = environment.getProperty("JAVA_HOME"); System.out.println(s); } }