首页 > 其他分享 >springBootMVC搭建

springBootMVC搭建

时间:2023-05-09 14:33:33浏览次数:53  
标签:RequestMapping URL spring springBootMVC String org public 搭建

springBootMVC搭建

 

分类专栏: spring环境配置

spring环境配置

专栏收录该内容

17 篇文章0 订阅

订阅专栏

今天给大家介绍一下spring Boot MVC,让我们学习一下如何利用Spring Boot快速的搭建一个简单的web应用。

环境准备

一个称手的文本编辑器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)

Java环境(JDK 1.7或以上版本)

Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)

一个最简单的Web应用

使用Spring Boot框架可以大大加速Web应用的开发过程,首先在Maven项目依赖中引入spring-boot-starter-web:

 

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.tianmaying</groupId>

<artifactId>spring-web-demo</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

 

<name>spring-web-demo</name>

<description>Demo project for Spring WebMvc</description>

 

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.2.5.RELEASE</version>

<relativePath/>

</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>

</dependencies>

 

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

 

 

</project>

接下来创建src/main/Java/Application.java:

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

@SpringBootApplication

@RestController

public class Application {

 

@RequestMapping("/")

public String greeting() {

return "Hello World!";

}

 

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

运行应用:mvn spring-boot:run或在IDE中运行main()方法,在浏览器中访问http://localhost:8080,Hello World!就出现在了页面中。只用了区区十几行Java代码,一个Hello World应用就可以正确运行了,那么这段代码究竟做了什么呢?我们从程序的入口SpringApplication.run(Application.class, args);开始分析:

 

SpringApplication是Spring Boot框架中描述Spring应用的类,它的run()方法会创建一个Spring应用上下文(Application Context)。另一方面它会扫描当前应用类路径上的依赖,例如本例中发现spring-webmvc(由 spring-boot-starter-web传递引入)在类路径中,那么Spring Boot会判断这是一个Web应用,并启动一个内嵌的Servlet容器(默认是Tomcat)用于处理HTTP请求。

 

Spring WebMvc框架会将Servlet容器里收到的HTTP请求根据路径分发给对应的@Controller类进行处理,@RestController是一类特殊的@Controller,它的返回值直接作为HTTP Response的Body部分返回给浏览器。

 

@RequestMapping注解表明该方法处理那些URL对应的HTTP请求,也就是我们常说的URL路由(routing),请求的分发工作是有Spring完成的。例如上面的代码中http://localhost:8080/根路径就被路由至greeting()方法进行处理。如果访问http://localhost:8080/hello,则会出现404 Not Found错误,因为我们并没有编写任何方法来处理/hello请求。

 

使用@Controller实现URL路由

现代Web应用往往包括很多页面,不同的页面也对应着不同的URL。对于不同的URL,通常需要不同的方法进行处理并返回不同的内容。

 

匹配多个URL

@RestController

public class Application {

 

@RequestMapping("/")

public String index() {

return "Index Page";

}

 

@RequestMapping("/hello")

public String hello() {

return "Hello World!";

}

}

@RequestMapping可以注解@Controller类:

 

@RestController

@RequestMapping("/classPath")

public class Application {

@RequestMapping("/methodPath")

public String method() {

return "mapping url is /classPath/methodPath";

}

}

method方法匹配的URL是/classPath/methodPath"。

 

提示

 

可以定义多个@Controller将不同URL的处理方法分散在不同的类中

 

URL中的变量——PathVariable

在Web应用中URL通常不是一成不变的,例如微博两个不同用户的个人主页对应两个不同的URL:http://weibo.com/user1http://weibo.com/user2。我们不可能对于每一个用户都编写一个被@RequestMapping注解的方法来处理其请求,Spring MVC提供了一套机制来处理这种情况:

 

@RequestMapping("/users/{username}")

public String userProfile(@PathVariable("username") String username) {

return String.format("user %s", username);

}

 

@RequestMapping("/posts/{id}")

public String post(@PathVariable("id") int id) {

return String.format("post %d", id);

}

在上述例子中,URL中的变量可以用{variableName}来表示,同时在方法的参数中加上@PathVariable("variableName"),那么当请求被转发给该方法处理时,对应的URL中的变量会被自动赋值给被@PathVariable注解的参数(能够自动根据参数类型赋值,例如上例中的int)。

 

支持HTTP方法

对于HTTP请求除了其URL,还需要注意它的方法(Method)。例如我们在浏览器中访问一个页面通常是GET方法,而表单的提交一般是POST方法。@Controller中的方法同样需要对其进行区分:

 

@RequestMapping(value = "/login", method = RequestMethod.GET)

public String loginGet() {

return "Login Page";

}

 

@RequestMapping(value = "/login", method = RequestMethod.POST)

public String loginPost() {

return "Login Post Request";

}

模板渲染

在之前所有的@RequestMapping注解的方法中,返回值字符串都被直接传送到浏览器端并显示给用户。但是为了能够呈现更加丰富、美观的页面,我们需要将HTML代码返回给浏览器,浏览器再进行页面的渲染、显示。

 

一种很直观的方法是在处理请求的方法中,直接返回HTML代码,但是这样做的问题在于——一个复杂的页面HTML代码往往也非常复杂,并且嵌入在Java代码中十分不利于维护。更好的做法是将页面的HTML代码写在模板文件中,渲染后再返回给用户。为了能够进行模板渲染,需要将@RestController改成@Controller:

 

import org.springframework.ui.Model;

 

@Controller

public class HelloController {

 

@RequestMapping("/hello/{name}")

public String hello(@PathVariable("name") String name, Model model) {

model.addAttribute("name", name);

return "hello"

}

}

在上述例子中,返回值"hello"并非直接将字符串返回给浏览器,而是寻找名字为hello的模板进行渲染,我们使用Thymeleaf模板引擎进行模板渲染,需要引入依赖:

 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

接下来需要在默认的模板文件夹src/main/resources/templates/目录下添加一个模板文件hello.html:

 

<!DOCTYPE HTML>

<html xmlns:th="http://www.thymeleaf.org">

<head>

<title>Getting Started: Serving Web Content</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

</head>

<body>

<p th:text="'Hello, ' + ${name} + '!'" />

</body>

</html>

th:text="'Hello, ' + ${name} + '!'"也就是将我们之前在@Controller方法里添加至Model的属性name进行渲染,并放入<p>标签中(因为th:text是<p>标签的属性)。模板渲染还有更多的用法,请参考Thymeleaf官方文档。

 

处理静态文件

浏览器页面使用HTML作为描述语言,那么必然也脱离不了CSS以及JavaScript。为了能够浏览器能够正确加载类似/css/style.css, /js/main.js等资源,默认情况下我们只需要在src/main/resources/static目录下添加css/style.css和js/main.js文件后,Spring MVC能够自动将他们发布,通过访问/css/style.css, /js/main.js也就可以正确加载这些资源。

标签:RequestMapping,URL,spring,springBootMVC,String,org,public,搭建
From: https://www.cnblogs.com/lucken2000/p/17384949.html

相关文章

  • Minikube:搭建部署单机 Kubernetes
    第一步:安装docker安装过程见连接 Centos安装docker-扰扰-博客园(cnblogs.com)第二步:安装VirtualBox2.1、直接使用yum源方式安装VirtualBox,配置正确的repo文件即可:[virtualbox]name=OracleLinux/RHEL/CentOS-$releasever/$basearch-VirtualBoxbaseurl=http......
  • Centos7搭建Minio环境(配置开机自启)
    Minio添加环境变量#设置控制台账号最少3位exportMINIO_ACCESS_KEY=admin#设置密码最少8位exportMINIO_SECRET_KEY=12345678为启动程序授权chmod+xminio执行启动./minioserver/mnt/data--console-address":9001"/mnt/data是minio本地存储的路径。在......
  • 假期充电,用阿里云 Serverless K8s + AIGC 搭建私人代码助理
    作者:子白、冬岛AI技术正在引领科技创新浪潮,随着ChatGPT和Midjourney的走红,AIGC技术正在世界范围内掀起一股AI技术浪潮。开源领域也涌现了许多类似模型,如FastGPT、Moss、StableDiffusion等。这些模型展现出的惊人效果吸引企业和开发者们投身其中,但是复杂繁琐的部署方式......
  • 搭建博客
    优化#防火墙sudosystemctldisablefirewalld.servicesudosystemctlstopfirewalld.service#关闭selinux2个路径哪个都可以进去修改/etc/selinux/config/etc/sysconfig/selinux#换源cd/etc/yum.repos.d/rm-f/etc/yum.repos.d/*curl-o/etc/yum.repos.d/CentO......
  • Python + Selenium,分分钟搭建 Web 自动化测试框架!
    在程序员的世界中,一切重复性的工作,都应该通过程序自动执行。「自动化测试」就是一个最好的例子。随着互联网应用开发周期越来越短,迭代速度越来越快,只会点点点,不懂开发的手工测试,已经无法满足如今的业务要求,只能被企业逐步裁员淘汰。「自动化测试和持续测试」就成为了业界主流。......
  • vivado和questasim联合开发环境搭建
    vivado2018.3与questasim10.6c联合开发环境搭建vivado2018.3安装略questasim10.6.c安装下载链接:https://pan.baidu.com/s/1UtPk8cM5OCzgOG32opwddA?pwd=xjy1提取码:xjy1安装以管理员权限运行安装包一路下一步注意这一步:破解复制'patch_dll.bat'和'......
  • 搭建 Kubernetes 集群
    简介Kubernetes是一个开源系统,用于容器化应用的自动部署、扩缩和管理。它将构成应用的容器按逻辑单位进行分组以便于管理和发现。搭建环境:CentOSv7.6.1810docker-ce-versionv23.0.5kubernetes-versionv1.23.6本次使用2台服务器进行搭建,运行下面命令写入/etc/hosts文件(......
  • 搭建智能电驱型四足机器人系统平台和六自由度工业机械臂系统平台
    ♪搭建智能电驱型四足机器人系统平台,2018年2月-2018年6月:参与内容:[1] 设计基于CPG(中央模式发生器)的步态控制算法;[2] 利用Simulink与Adams构建虚拟样机并联合仿真;[3] 基于C++与RTOS(实时控制系统)设计智能电驱型四足机器人实物平台;[4] 实现对角小跑、行为、爬坡与越障等的......
  • GitHub搭建个人博客2023
    1.登录github2.上传一个index.html的文件3.点击settings-->然后点击pages3.选择分支->点击save ......
  • Dockerfile、常用和不常用命令、dockerfile构建一个djagno项目、docker私有仓库、镜像
    目录1Dockerfile1.1常用和不常用命令1.2dockerfile构建一个djagno项目2docker私有仓库2.1镜像传到官方仓库2.2镜像分层2.3私有仓库搭建3dockercompose介绍4dockercompose部署flask+redis项目4.1新建flask项目app.py4.2编写Dockerfile--》用于构建flask项目的镜像4.3......