From 949b73843c03a20849428cb73ed6279342106552 Mon Sep 17 00:00:00 2001 From: Ylx472 <13487450550@163.com> Date: Fri, 13 Sep 2024 23:55:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E8=AF=BE=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 +++ .mvn/wrapper/maven-wrapper.properties | 19 ++ javaee.txt | 0 mvnw | 259 ++++++++++++++++++ mvnw.cmd | 149 ++++++++++ pom.xml | 82 ++++++ .../springboot/springboot/JSONController.java | 19 ++ .../springboot/LoginController.java | 46 ++++ .../springboot/SpringbootApplication.java | 14 + .../springboot/springboot/TestController.java | 30 ++ .../yilinxuan/springboot/springboot/User.java | 10 + src/main/resources/application.properties | 3 + src/main/resources/img/1234.jpeg | Bin 0 -> 39744 bytes src/main/resources/templates/fail.html | 10 + src/main/resources/templates/login.html | 23 ++ src/main/resources/templates/main.html | 11 + src/main/resources/templates/news.html | 11 + src/main/resources/templates/success.html | 10 + src/main/resources/templates/test.html | 23 ++ .../SpringbootApplicationTests.java | 13 + 20 files changed, 765 insertions(+) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.properties delete mode 100644 javaee.txt create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/com/yilinxuan/springboot/springboot/JSONController.java create mode 100644 src/main/java/com/yilinxuan/springboot/springboot/LoginController.java create mode 100644 src/main/java/com/yilinxuan/springboot/springboot/SpringbootApplication.java create mode 100644 src/main/java/com/yilinxuan/springboot/springboot/TestController.java create mode 100644 src/main/java/com/yilinxuan/springboot/springboot/User.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/img/1234.jpeg create mode 100644 src/main/resources/templates/fail.html create mode 100644 src/main/resources/templates/login.html create mode 100644 src/main/resources/templates/main.html create mode 100644 src/main/resources/templates/news.html create mode 100644 src/main/resources/templates/success.html create mode 100644 src/main/resources/templates/test.html create mode 100644 src/test/java/com/yilinxuan/springboot/springboot/SpringbootApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..d58dfb7 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/javaee.txt b/javaee.txt deleted file mode 100644 index e69de29..0000000 diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d3517f4 --- /dev/null +++ b/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.3 + + + com.yilinxuan.springboot + springboot + 0.0.1-SNAPSHOT + springboot + springboot + + + + + + + + + + + + + + + 17 + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + diff --git a/src/main/java/com/yilinxuan/springboot/springboot/JSONController.java b/src/main/java/com/yilinxuan/springboot/springboot/JSONController.java new file mode 100644 index 0000000..b95ddff --- /dev/null +++ b/src/main/java/com/yilinxuan/springboot/springboot/JSONController.java @@ -0,0 +1,19 @@ +package com.yilinxuan.springboot.springboot; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class JSONController { + //将返回结果转为JSON格式(String) + @ResponseBody + @RequestMapping("/getuser") + public User test(){ + User user = new User(); + user.setId(1); + user.setName("张三"); + user.setAge(20); + return user; + } +} diff --git a/src/main/java/com/yilinxuan/springboot/springboot/LoginController.java b/src/main/java/com/yilinxuan/springboot/springboot/LoginController.java new file mode 100644 index 0000000..1544a4a --- /dev/null +++ b/src/main/java/com/yilinxuan/springboot/springboot/LoginController.java @@ -0,0 +1,46 @@ +package com.yilinxuan.springboot.springboot; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.UUID; + +@Controller +public class LoginController { + public String upload(MultipartFile file){ + //保存文件 + File file1=new File("D:/data/"); + //生成随机数不重复 永远 + String filename= UUID.randomUUID().toString() +file.getOriginalFilename(); + try { + file.transferTo(new File(file1,filename)); + } catch (Exception e) { + e.printStackTrace(); + } + return "success.html"; + } + @RequestMapping("/news/{newsid}") + public String news(@PathVariable String newsid,Model model){ + //TODO 数据库查询登录验证 + //数据库-->mysql + model.addAttribute("newsid", newsid); + return "news.html"; + } + @RequestMapping(value = "/login") + public String login(){ + return "login.html"; + } + @RequestMapping(value = "/logincommit") + public String logincommit(String username, String password, Model model){ + if (username.equals("admin")&&password.equals("123456")){ + model.addAttribute("username", username); + return "main.html"; + } + return "fail.html"; + } + +} diff --git a/src/main/java/com/yilinxuan/springboot/springboot/SpringbootApplication.java b/src/main/java/com/yilinxuan/springboot/springboot/SpringbootApplication.java new file mode 100644 index 0000000..a67517c --- /dev/null +++ b/src/main/java/com/yilinxuan/springboot/springboot/SpringbootApplication.java @@ -0,0 +1,14 @@ +package com.yilinxuan.springboot.springboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringbootApplication { + + public static void main(String[] args) { + + SpringApplication.run(SpringbootApplication.class, args); + } + +} diff --git a/src/main/java/com/yilinxuan/springboot/springboot/TestController.java b/src/main/java/com/yilinxuan/springboot/springboot/TestController.java new file mode 100644 index 0000000..a90dd22 --- /dev/null +++ b/src/main/java/com/yilinxuan/springboot/springboot/TestController.java @@ -0,0 +1,30 @@ +package com.yilinxuan.springboot.springboot; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.ArrayList; +import java.util.List; + +@Controller +public class TestController { + @RequestMapping("/test") + public String test(Model model){ + List userList = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + User user = new User(); + user.setId(i); + user.setName("liyueling"+i); + userList.add(user); + } + + for (User user:userList){ + System.out.println(user.toString()); + } + model.addAttribute("userList",userList); + model.addAttribute("name","liyueling"); + return "test.html"; + } +} + diff --git a/src/main/java/com/yilinxuan/springboot/springboot/User.java b/src/main/java/com/yilinxuan/springboot/springboot/User.java new file mode 100644 index 0000000..90521e5 --- /dev/null +++ b/src/main/java/com/yilinxuan/springboot/springboot/User.java @@ -0,0 +1,10 @@ +package com.yilinxuan.springboot.springboot; +import lombok.Data; +@Data +public class User { + private int id; + private String name; + private int age; + + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..c582b8a --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,3 @@ +spring.application.name=springboot +#server.port=8081 +spring.web.resources.static-locations=classpath:/img/,file:C:/Users/86134/Downloads diff --git a/src/main/resources/img/1234.jpeg b/src/main/resources/img/1234.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3b270d414ab336e326999961628999c172dc6f60 GIT binary patch literal 39744 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/fail.html b/src/main/resources/templates/fail.html new file mode 100644 index 0000000..955b611 --- /dev/null +++ b/src/main/resources/templates/fail.html @@ -0,0 +1,10 @@ + + + + + Title + + +

登陆失败

+ + \ No newline at end of file diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..029de59 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,23 @@ + + + + + Title + + +

登陆页面

+
+
+ +
+ + + +
+
+
+ +
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html new file mode 100644 index 0000000..a41e101 --- /dev/null +++ b/src/main/resources/templates/main.html @@ -0,0 +1,11 @@ + + + + + Title + + +

主界面

+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/news.html b/src/main/resources/templates/news.html new file mode 100644 index 0000000..bb5444c --- /dev/null +++ b/src/main/resources/templates/news.html @@ -0,0 +1,11 @@ + + + + + Title + + +

新闻页面

+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/success.html b/src/main/resources/templates/success.html new file mode 100644 index 0000000..d6599e7 --- /dev/null +++ b/src/main/resources/templates/success.html @@ -0,0 +1,10 @@ + + + + + Title + + +

上传成功

+ + \ No newline at end of file diff --git a/src/main/resources/templates/test.html b/src/main/resources/templates/test.html new file mode 100644 index 0000000..68352d0 --- /dev/null +++ b/src/main/resources/templates/test.html @@ -0,0 +1,23 @@ + + + + + Title + + +

Hello World!

+
+ + + + + + + + + + + +
id姓名年龄
+ + \ No newline at end of file diff --git a/src/test/java/com/yilinxuan/springboot/springboot/SpringbootApplicationTests.java b/src/test/java/com/yilinxuan/springboot/springboot/SpringbootApplicationTests.java new file mode 100644 index 0000000..1714860 --- /dev/null +++ b/src/test/java/com/yilinxuan/springboot/springboot/SpringbootApplicationTests.java @@ -0,0 +1,13 @@ +package com.yilinxuan.springboot.springboot; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SpringbootApplicationTests { + + @Test + void contextLoads() { + } + +}