Spring Boot Controller
接上篇文章。HelloWorld程序中我们已经创建了一个HellController,里面包括了响应JSON的方法。本文针对Controller再做一下解说。
回想上篇文章,我们在Controller中使用 @RestController 注解,该注解是Spring 4.0引入的。查看源代码可知其包括了 @Controller 和 @ResponseBody 注解。
我们能够理解为 @Controller的增强版。专门为响应内容式的 Controller 而设计的,能够直接响应对象为JSON。
而 @Controller 用来响应页面,spring-boot 支持多种模版引擎包括:
1,FreeMarker
2,Groovy
3。Thymeleaf (Spring 官网使用这个)
4,Velocity
5,JSP (貌似Spring Boot官方不推荐,STS创建的项目会在src/main/resources 下有个templates 文件夹,这里就是让我们放模版文件的,然后并没有生成诸如 SpringMVC 中的webapp文件夹)
只是本文还是选择大家都熟悉的JSP来举例,由于使用JSP与默认支持的模版须要特殊处理,所以拿来举例更好。
关于Controller 方法能够接收參数使用@RequestBody、@RequestParam、@ModelAttribute、JSONObject、HttpEntity 等方式,皆与Spring的使用一样,这里不做赘述。
以下我们来说一下怎样使用 @Controller 实现响应JSP页面(与SpringMVC也是一样使用)。
创建PageController。编码例如以下:
package org.springboot.sample.controller; import java.util.Date; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class PageController { // 从 application.properties 中读取配置,如取不到默认值为Hello Shanhy @Value("${application.hell:Hello Shanhy}") private String hello = "Hello Shanhy"; /** * 默认页<br/> * @RequestMapping("/") 和 @RequestMapping 是有差别的 * 假设不写參数。则为全局默认页,加入输入404页面。也会自己主动訪问到这个页面。pom.xml加入依赖:* 假设加了參数“/”,则仅仅觉得是根页面。
* * @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(){ // 页面位置 /WEB-INF/jsp/page/page.jsp ModelAndView mav = new ModelAndView("page/page1"); mav.addObject("content", hello); return mav; } /** * 响应到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 + "(另外一种)"); return "page/page1"; } }
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
上面说了spring-boot 不推荐JSP,想使用JSP须要配置application.properties。
加入src/main/resources/application.properties内容:
# 页面默认前缀文件夹 spring.mvc.view.prefix=/WEB-INF/jsp/ # 响应页面默认后缀 spring.mvc.view.suffix=.jsp # 自己定义属性,能够在Controller中读取 application.hello=Hello Shanhy
在 src/main 以下创建 webapp/WEB-INF/jsp 文件夹用来存放我们的jsp页面。
index.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Spring Boot Sample</title> </head> <body> Time: ${time} <br> Message: ${message} </body> </html>
page1.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Spring Boot Sample</title> </head> <body> <h1>${content }</h1> </body> </html>
要想让spring-boot支持JSP。须要将项目打成war包。
我们做最后一点改动,改动pom.xml文件。将 jar 中的 jar 改动为 war
然后启动spring-boot服务。
訪问页面查看结果:
http://localhost:8080
http://localhost:8080/page1
http://localhost:8080/page2
最后附上工程结构:
假设须要使用 FreeMarker 的同学,请按以下的方法说明改动:
1、去掉 application.properties 中的 spring.mvc.view.prefix 和 spring.mvc.view.suffix 配置。
2、将 .ftl 模版页面放到 resources/templates 中(如上面工程截图所看到的)
当中 error.ftl 是系统默认的错误页,内容自定。
3、改动 pom.xml ,例如以下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springboot.sample</groupId> <artifactId>spring-boot-sample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <!-- <packaging>war</packaging> --> <name>spring-boot-sample</name> <description>Spring Boot Sample Web Application</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!-- <dependency> --> <!-- <groupId>org.springframework.boot</groupId> --> <!-- <artifactId>spring-boot-starter-web</artifactId> --> <!-- </dependency> --> <!-- <dependency> --> <!-- <groupId>org.springframework.boot</groupId> --> <!-- <artifactId>spring-boot-starter-tomcat</artifactId> --> <!-- </dependency> --> <!-- <dependency> --> <!-- <groupId>org.apache.tomcat.embed</groupId> --> <!-- <artifactId>tomcat-embed-jasper</artifactId> --> <!-- <scope>provided</scope> --> <!-- </dependency> --> <!-- <dependency> --> <!-- <groupId>javax.servlet</groupId> --> <!-- <artifactId>jstl</artifactId> --> <!-- </dependency> --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
- SpringBoot第2小节:Controller(控制器)的使用
- SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍
- springboot controller
- SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍(转)
- springboot-controller的使用详解
- spring-boot restcontroller filter
- Spring Boot的Controller控制层和页面
- SpringBoot的Controller使用
- SpringBoot笔记2---如何将Controller与main函数所在的类分类
- spring boot的Bean,Controller以及Repository的创建
- SpringBoot Controller找不到视图路径
- SpringBoot Controller转发重定向问题
- spring boot 自定义Controller,不能被扫描
- 使用MockMvc编写spring boot的controller的测试用例
- springboot使用aop拦截controller干一些事导致service们@Autowired全部注入失败
- spring boot controller设置 @Transactional 不回滚的解决办法
- spring boot 自定义controller不能扫描到的问题
- spring boot 扫描不到controller
- Spring Boot项目@RestController使用重定向redirect
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json