# 具有多个文件的模板

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

一些编程模式和框架需要一组相关文件，通常具有非常特定的结构。 例如，使用  model-view-controller （MVC）模式时，您需要为模型、视图和控制器准备单独的文件。

在 IntelliJ IDEA 中，您可以通过将子模板添加到文件模板来创建相关文件集。 当您从这样的模板创建文件时，还会从子模板创建文件。

Procedure: 创建包含多个文件的模板

1. 在   设置  对话框（ `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS))）中，选择  `编辑器 | 文件和代码模板` 。

2. 创建主文件模板。

请在   文件  选项卡上点击 ![创建模板按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.add.svg)并指定模板的名称、文件扩展名和正文。

3. 在列表中选择新的模板，然后点击工具栏上的 ![“创建子模板文件”按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.fileTypes.addAny.svg)。 指定子模板的名称、文件扩展名和主体。

> **Note:**
> 所有子模板共享主文件模板的 [变量](file-template-variables.html)。
>
>
>
> 您不能将子模板添加到默认文件模板中。

## 示例：MVC模式的模板

假设您想在您的应用程序中实现 [MVC](https://en.wikipedia.org/wiki/Model-view-controller) 模式。 这意味着您需要为数据层（模型）、表示层（视图）以及执行模型和视图之间所有交互的控制器准备单独的文件。 本教程展示了如何添加一个模板，能够同时创建所有三个文件。

Procedure:

1. 在   设置  对话框（ `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS))）中，选择  `编辑器 | 文件和代码模板` 。

2. 创建数据模型类模板。

请在   文件  选项卡上，点击 ![创建模板按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.general.add.svg)并指定以下内容：

* 名称 ： `Java MVC`

* 扩展 ： `java`

* 文件名 ： `${NAME}`

将以下代码添加到模板主体：

```VELOCITY
public class ${NAME} {
    // This is the data model
}

```

您提供的名称将与此类的名称匹配，例如：  `Counter` 。

> **Tip:**
> 此类实例可能会将数据存储在其字段中或访问数据库。 根据您的需求，您可以扩展此模板以包含样板方法（可能是getters和setters）或用于持久性框架的import语句。

3. 创建视图类模板。

在列表中选择新的   Java MVC   模板，然后点击工具栏上的 ![“创建子模板文件”按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.fileTypes.addAny.svg)。 请指定以下内容：

* 文件名 ： `${NAME}View`

* 扩展 ： `java`

将以下代码添加到模板主体：

```VELOCITY
public class ${NAME}View {
    // This is the user interface
}

```

此类的名称将由你提供的名称与单词  `视图`  组合而成，例如：  `CounterView` 。

> **Tip:**
> 如果这是一个 CLI 应用程序，您可以定义一些方法，通过标准系统输入和输出流打印应用程序的输出并扫描用户的输入。
>
>
>
> 如果是 GUI 应用程序，您可以使用 Swing、JavaFX 或其他一些 GUI 框架。 在这种情况下，您可以在模板中包含必要的 import 语句和样板代码。
>
>
>
> 对于 Web 应用程序，视图可以是一个 JSP 页面。 在这种情况下，您需要在  `webapp` 目录下创建它。 将   文件名   设置为  `webapp/${NAME}View` ，并将   扩展   设置为  `jsp` 。

4. 创建控制器类模板。

在列表中选择   Java MVC   模板，然后点击工具栏上的 ![“创建子模板文件”按钮](https://resources.jetbrains.com/help/img/idea/2026.3/app.fileTypes.addAny.svg)。 请指定以下内容：

* 文件名 ： `${NAME}Controller`

* 扩展 ： `java`

将以下代码添加到模板主体：

```VELOCITY
public class ${NAME}Controller {
    private ${NAME} model;
    private ${NAME}View view;

    public ${NAME}Controller(${NAME} m, ${NAME}View v) {
        this.model = m;
        this.view = v;
    }

    // This is the logic for interacting between the model and the view
}

```

此类的名称将由你提供的名称与单词  `控制器`  组合而成，例如：  `CounterController` 。

> **Tip:**
> 对于一个网络应用程序，控制器可能是一个 Servlet 类。 在这种情况下，将必要的  `javax.servlet`  导入添加到您的模板中，  `@WebServlet`  注解，扩展从  `HttpServlet`  的类，并提供必要的样板方法。

5. 点击   OK  以应用更改。

6. 要使用新的模板，请在   项目  工具窗口中右键点击目录或按 `Alt+Insert` (Windows), `⌘ N` (macOS), `⌃ N` (IntelliJ IDEA Classic (macOS)), `⌘ N` (macOS System Shortcuts), `Alt+Insert` (XWin), `Alt+Insert` (GNOME), `Alt+Insert` (KDE), `Alt+Insert` (Emacs), `Ctrl+N` (Sublime Text), `⌘ N` (Sublime Text (macOS)), `Ctrl+N` (Visual Studio), `⌘ N` (Visual Studio (macOS)), `Alt+Insert` (NetBeans), `Alt+Insert` (Eclipse), `⌘ N` (Eclipse (macOS))并选择   Java MVC  模板。 请为模型类指定一个名称，IntelliJ IDEA 将创建所有三个文件。

![使用实时模板的示例](https://resources.jetbrains.com/help/img/idea/2026.3/mvc-multiple-file-template.animated.gif)

