Spring Boot的Controller控制层和页面
一.项目实例
1.项目结构
2.项目代码
1).actioncontroller.java:
package com.example.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 @requestmapping("/action") public class actioncontroller { // 从 application.properties 中读取配置,如取不到application.properties定义的值,则取默认值为hello shanhy @value("${application.hello:hello shanhy}") private string hello; /** * 默认页<br/> * @requestmapping("/") 和 @requestmapping 是有区别的 * 如果不写参数,则为全局默认页。 * 如果加了参数“/”,则只认为是根页面。 */ @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 */ @requestmapping("/page1") public modelandview page1(){ // 页面位置 /web-inf/jsp/page/page1.jsp //page/page1:页面路径地址/页面名称 modelandview mav = new modelandview("page/page1"); mav.addobject("content", hello); return mav; } /** * 响应到jsp页面page1(可以直接使用model封装内容,直接返回页面字符串) */ @requestmapping("/page2") public string page2(model model){ // 页面位置 /web-inf/jsp/page/page1.jsp model.addattribute("content", hello + "(第二种)"); return "page/page1"; } }
2).application.properties:
spring.mvc.view.prefix=/web-inf/jsp/ spring.mvc.view.suffix=.jsp application.hello=hello tom
3).index.jsp:
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>spring boot sample</title> </head> <body> time: ${time} <br> message: ${message} </body> </html>
4).page1.jsp:
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>spring boot sample</title> </head> <body> <h1>${content }</h1>: ${message} </body> </html>
5).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>com.example</groupid> <artifactid>spring-boot-simple</artifactid> <version>0.0.1-snapshot</version> <!-- <packaging>jar</packaging> --> <packaging>war</packaging> <name>spring-boot-simple</name> <description>demo project for spring boot</description> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.5.2.release</version> <relativepath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputencoding>utf-8</project.reporting.outputencoding> <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-test</artifactid> <scope>test</scope> </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> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
3.运行启动项目
访问web地址: ,如下所示:
二.代码解析说明
1.关于在spring4.x中,@restcontroller和@controller的区别
@restcontroller注解相当于@responsebody + @controller合在一起的作用。所以,以后定义controller的时候,可以直接使用@controller,如果需要返回json可以直接在方法中添加@responsebody即可。
a).如果只是使用@restcontroller注解controller,则controller中的方法无法返回jsp页面,配置的视图解析器internalresourceviewresolver则不起作用,返回的内容就是return 里的内容(string/json)。
例如:本来应该到success.jsp页面的,则其显示success.
public string test(httpservletrequest request, httpservletresponse response){ return "success"; }
b).如果使用@restcontroller注解controller,需要返回到指定页面,则需要配置视图解析器internalresourceviewresolver,可以利用modelandview返回试图。
@requestmapping(value = "/test") public string test(httpservletrequest request, httpservletresponse response){ return newmodelandview("success"); } c).如果使用@controller注解controller,如果需要返回json,xml或自定义mediatype内容到页面,则需要在对应的方法上加上@responsebody注解。 @responsebody @requestmapping(value = "/test") public string test(httpservletrequest request, httpservletresponse response){ return "success"; }
2.spring-boot 支持多种模版引擎包括:
a,freemarker
b,groovy
c,thymeleaf (spring 官网使用这个)
d,velocity
e,jsp (貌似spring boot官方不推荐,sts创建的项目会在src/main/resources 下有个templates 目录,这里就是让我们放模版文件的,然后并没有生成诸如 springmvc 中的webapp目录)
以上所述是小编给大家介绍的spring boot的controller控制层和页面,希望对大家有所帮助
上一篇: MySQL的表分区详解