一.项目实例
1.项目结构
2.项目代码
1).actioncontroller.java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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:
1
2
3
|
spring.mvc.view.prefix=/web-inf/jsp/
spring.mvc.view.suffix=.jsp
application.hello=hello tom
|
3).index.jsp:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ 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:
1
2
3
4
5
6
7
8
9
10
11
|
<%@ 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?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.
1
2
3
|
public string test(httpservletrequest request, httpservletresponse response){
return "success" ;
}
|
b).如果使用@restcontroller注解controller,需要返回到指定页面,则需要配置视图解析器internalresourceviewresolver,可以利用modelandview返回试图。
1
2
3
4
5
6
7
8
9
10
|
@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控制层和页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!