Spring Boot的Controller控制层和页面

发布时间 - 2026-01-11 00:48:27    点击率:

一.项目实例

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地址:http://localhost:8080/action/ ,如下所示:

二.代码解析说明

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控制层和页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# spring  # boot  # 页面  # 控制层  # SpringBoot与SpringMVC中参数传递的原理解析  # Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)  # springboot控制层图片验证码生成  # Springboot 使用 JSR 303 对 Controller 控制层校验及 Service   # Spring Boot 控制层之参数传递方法详解  # 可以直接  # 小编  # 则需  # 有个  # 是有  # 让我们  # 在此  # 默认页  # 会在  # 要在  # 给大家  # 自定义  # 所示  # 会去  # 可以利用  # 则为  # 所述  # 第二种  # 使用这个  # 给我留言 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 公司门户网站制作流程,华为官网怎么做?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  C++时间戳转换成日期时间的步骤和示例代码  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel如何实现事件和监听器?(Event & Listener实战)  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何创建自定义Artisan命令?(代码示例)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何快速配置高效服务器建站软件?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  移动端脚本框架Hammer.js  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何用PHP工具快速搭建高效网站?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel如何实现一对一模型关联?(Eloquent示例)  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  再谈Python中的字符串与字符编码(推荐)  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  创业网站制作流程,创业网站可靠吗?  JavaScript如何操作视频_媒体API怎么控制播放  如何快速使用云服务器搭建个人网站?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  浅谈javascript alert和confirm的美化  Python结构化数据采集_字段抽取解析【教程】  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  如何用景安虚拟主机手机版绑定域名建站?  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel如何使用Blade模板引擎?(完整语法和示例)  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  如何在阿里云部署织梦网站?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何快速搭建高效简练网站?  北京网站制作公司哪家好一点,北京租房网站有哪些?  如何用PHP快速搭建CMS系统?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何快速搭建自助建站会员专属系统?  新三国志曹操传主线渭水交兵攻略  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】