main
贺志豪 11 months ago
parent 09a9bbefa3
commit 7c55d86ea4

@ -1,33 +0,0 @@
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/

Binary file not shown.

@ -1,2 +0,0 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar

308
WebProject/mvnw vendored

@ -1,308 +0,0 @@
#!/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
#
# https://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.2.0
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "$(uname)" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
else
JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=$(java-config --jre-home)
fi
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="$(which javac)"
if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=$(which readlink)
if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
if $darwin ; then
javaHome="$(dirname "\"$javaExecutable\"")"
javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
else
javaExecutable="$(readlink -f "\"$javaExecutable\"")"
fi
javaHome="$(dirname "\"$javaExecutable\"")"
javaHome=$(expr "$javaHome" : '\(.*\)/bin')
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
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"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=$(cd "$wdir/.." || exit 1; pwd)
fi
# end of workaround
done
printf '%s' "$(cd "$basedir" || exit 1; pwd)"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
# Remove \r in case we run on Windows within Git Bash
# and check out the repository with auto CRLF management
# enabled. Otherwise, we may read lines that are delimited with
# \r\n and produce $'-Xarg\r' rather than -Xarg due to word
# splitting rules.
tr -s '\r\n' ' ' < "$1"
fi
}
log() {
if [ "$MVNW_VERBOSE" = true ]; then
printf '%s\n' "$1"
fi
}
BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
log "$MAVEN_PROJECTBASEDIR"
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
if [ -r "$wrapperJarPath" ]; then
log "Found $wrapperJarPath"
else
log "Couldn't find $wrapperJarPath, downloading it ..."
if [ -n "$MVNW_REPOURL" ]; then
wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
else
wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
fi
while IFS="=" read -r key value; do
# Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
safeValue=$(echo "$value" | tr -d '\r')
case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
log "Downloading from: $wrapperUrl"
if $cygwin; then
wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
fi
if command -v wget > /dev/null; then
log "Found wget ... using wget"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
log "Found curl ... using curl"
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
else
curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
fi
else
log "Falling back to using Java to download"
javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaSource=$(cygpath --path --windows "$javaSource")
javaClass=$(cygpath --path --windows "$javaClass")
fi
if [ -e "$javaSource" ]; then
if [ ! -e "$javaClass" ]; then
log " - Compiling MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/javac" "$javaSource")
fi
if [ -e "$javaClass" ]; then
log " - Running MavenWrapperDownloader.java ..."
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
# If specified, validate the SHA-256 sum of the Maven wrapper jar file
wrapperSha256Sum=""
while IFS="=" read -r key value; do
case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
esac
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
if [ -n "$wrapperSha256Sum" ]; then
wrapperSha256Result=false
if command -v sha256sum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
elif command -v shasum > /dev/null; then
if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
wrapperSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
exit 1
fi
if [ $wrapperSha256Result = false ]; then
echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
exit 1
fi
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
[ -n "$CLASSPATH" ] &&
CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
# shellcheck disable=SC2086 # safe args
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

205
WebProject/mvnw.cmd vendored

@ -1,205 +0,0 @@
@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 https://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.2.0
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %WRAPPER_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
SET WRAPPER_SHA_256_SUM=""
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
)
IF NOT %WRAPPER_SHA_256_SUM%=="" (
powershell -Command "&{"^
"$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
"If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
" Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
" Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
" Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
" exit 1;"^
"}"^
"}"
if ERRORLEVEL 1 goto error
)
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
cmd /C exit /B %ERROR_CODE%

@ -1,72 +0,0 @@
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>WebProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>WebProject</name>
<description>WebProject</description>
<properties>
<java.version>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-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

@ -1,13 +0,0 @@
package com.example.webproject;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(WebProjectApplication.class);
}
}

@ -1,13 +0,0 @@
package com.example.webproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WebProjectApplication {
public static void main(String[] args) {
SpringApplication.run(WebProjectApplication.class, args);
}
}

@ -1,256 +0,0 @@
package com.example.webproject.com.Control;
import com.example.webproject.com.Mapper.account_operator;
import com.example.webproject.com.Mapper.user_data_operator;
import com.example.webproject.com.Pojo.account;
import com.example.webproject.com.Pojo.user_data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@Controller
public class control {
@Autowired
public account_operator account_operator;
@Autowired
public user_data_operator user_data_operator;
//这个是访问登录界面
@GetMapping("/index")
public String test()throws Exception{
System.out.println("index");
// 注意在使用thymleaf时要注意 版本要和starter-web的要配合使用
//否者会跳转不到相应的界面
return "Login";
}
//这里要开始编写我们的对于账号上面的处理了
@RequestMapping("/postProcessorRegistration")
public ModelAndView postProcessorRegistration(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,@RequestParam Map<String,String> map){
System.out.println("postProcessorRegistration");
//这里我们是进行注册操作
//我们先去数据库里面查一下,有没有这个账号
//有就给出错误
//否则就将其插入
//不能获取model 要获取modelMap
// Map<String, Object> model = modelAndView.getModel();
String account = (String)map.get("account");
String password = (String)map.get("password");
ModelAndView modelAndView = new ModelAndView();
account one = account_operator.findOne(account);
System.out.println("数据库中查询的值: "+one);
if(one == null){
System.out.println("数据库中不存在,进行插入操作");
account_operator.insertOne(new account(account,password));
System.out.println("插入完成");
//在这里我们要将账号创建成功的消息显示出来
modelAndView.setViewName("Login");
modelAndView.addObject("isHaveAccount","");
}else{
//在这里我们要将账号已近存在的消息回显
modelAndView.setViewName("Login");
modelAndView.addObject("isHaveAccount","当前账号已有");
}
return modelAndView;
}
//这里要开始编写我们的对于账号上面的处理了
@RequestMapping("/postProcessorLogin")
// @ResponseBody
public ModelAndView postProcessorLogin(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,@RequestParam Map<String,String> map){
System.out.println("postProcessorLogin");
ModelAndView modelAndView = new ModelAndView();
//首先我们先从map中拿到 account和 password
String account = (String)map.get("account");
String password = (String)map.get("password");
System.out.println("account=="+account);
System.out.println("password=="+ password);
account one = account_operator.findOne(account);
if(one == null){
System.out.println("还没有账号,请注册一个");
//将没有账号显示出去,提醒用户注册账号
modelAndView.addObject("isHaveAccount","还没有账号,注册一个");
modelAndView.setViewName("Login");
}else{
if((one.getTxl_password().equals(password))){
System.out.println("密码正确,登入成功");
// modelAndView.setViewName("data_operator");
modelAndView.setViewName("redirect:data");
//在这里要进行coockie的设置在response 里面进行操作
//我们要在登入界面进行操作一旦登入操作成功我们就在这里进行cookie设置
//将cookie设置过去
Cookie account_cookie = new Cookie("account",account);
Cookie password_cookie = new Cookie("password",password);
httpServletResponse.addCookie(account_cookie);
httpServletResponse.addCookie(password_cookie);
}else{
System.out.println("密码错误,登入失败");
modelAndView.setViewName("Login");
}
}
return modelAndView;
}
@RequestMapping("data")
public ModelAndView data_operator(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse){
//获得所有的cookie
Cookie[]cookies = httpServletRequest.getCookies();
//为cookie设置过期时间
String account = "";
for (Cookie cookie : cookies) {
//当我们设置了cookie之后就只能通过https进行传输了不会在http里面进行传输
// cookie.setSecure(true);
//设置为1星期的过期时间
// cookie.setMaxAge(7*24*60*60);
System.out.println(cookie.getName() + "==" + cookie.getValue());
if("account".equals(cookie.getName())){
account = cookie.getValue();
}
}
//我们就可以设置cookie,当我们发现cookie里面已经存在了账户之后就直接显示当前的这个用户的数据
ModelAndView modelAndView = new ModelAndView();
//这里我们后面肯定是要根据我们当前的一个用户,进行操作的
//我们根据页面上面的显示来进行操作
//页面上面有什么么,我们就要进行什么操作
//就显示一个列表,通过一个参数显示每页 要显示多少的数据,在显示出来总数据的条数
//在每条数据的后面我们就显示,一个删除的按钮,修改,
List<user_data> all = user_data_operator.findOne(account);
modelAndView.addObject("user_data",all);
modelAndView.setViewName("data_operator");
return modelAndView;
}
@RequestMapping("add_user_data")
public ModelAndView add_user_data(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,@RequestParam Map<String,String> map){
System.out.println("add_user_data");
ModelAndView modelAndView = new ModelAndView();
Cookie[]cookies = httpServletRequest.getCookies();
//为cookie设置过期时间
String account = "";
for (Cookie cookie : cookies) {
//当我们设置了cookie之后就只能通过https进行传输了不会在http里面进行传输
// cookie.setSecure(true);
//设置为1星期的过期时间
// cookie.setMaxAge(7*24*60*60);
System.out.println(cookie.getName() + "==" + cookie.getValue());
if("account".equals(cookie.getName())){
account = cookie.getValue();
}
}
//获取数据
String name = map.get("name");
// String sex = map.get("sex");
String contact_phone_number = map.get("contact_phone_number");
if(name != null || contact_phone_number != null){
//插入操作
user_data_operator.insertOne(account,name,contact_phone_number);
modelAndView.addObject("message","插入成功");
System.out.println("here");
//modelAndView.setViewName("redirect:data");
}else{
modelAndView.setViewName("add_user_data");
}
return modelAndView;
}
@RequestMapping("delete_user_data")
public ModelAndView delete_user_data(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,@RequestParam Map<String,String> map){
System.out.println("delete_user_data");
ModelAndView modelAndView = new ModelAndView();
Cookie[]cookies = httpServletRequest.getCookies();
//为cookie设置过期时间
String account = "";
for (Cookie cookie : cookies) {
//当我们设置了cookie之后就只能通过https进行传输了不会在http里面进行传输
// cookie.setSecure(true);
//设置为1星期的过期时间
// cookie.setMaxAge(7*24*60*60);
System.out.println(cookie.getName() + "==" + cookie.getValue());
if("account".equals(cookie.getName())){
account = cookie.getValue();
}
}
String name = map.get("name");
if(name != null ){
//删除操作
// user_data_operator
Integer col = user_data_operator.deleteOne(account,name);
if(col != 0){
modelAndView.addObject("message","删除成功");
}else{
modelAndView.addObject("message","此联系人不存在");
}
System.out.println("here");
// modelAndView.setViewName("redirect:data")
}else{
modelAndView.setViewName("delete_user_data");
}
return modelAndView;
}
@RequestMapping("find_user_data")
public ModelAndView find_user_data(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,@RequestParam Map<String,String> map){
System.out.println("find_user_data");
ModelAndView modelAndView = new ModelAndView();
Cookie[]cookies = httpServletRequest.getCookies();
//为cookie设置过期时间
String account = "";
for (Cookie cookie : cookies) {
//当我们设置了cookie之后就只能通过https进行传输了不会在http里面进行传输
// cookie.setSecure(true);
//设置为1星期的过期时间
// cookie.setMaxAge(7*24*60*60);
System.out.println(cookie.getName() + "==" + cookie.getValue());
if("account".equals(cookie.getName())){
account = cookie.getValue();
}
}
String name = map.get("name");
//查找完成后英爱回显数据
if(name != null ){
//查找操作
List<user_data> oneByName = user_data_operator.findOneByName(account, name);
modelAndView.addObject("message","查找完成");
modelAndView.addObject("user_data",oneByName);
System.out.println("here");
//modelAndView.setViewName("redirect:data");
}else{
modelAndView.setViewName("find_user_data");
}
return modelAndView;
}
}

@ -1,23 +0,0 @@
package com.example.webproject.com.Mapper;
import com.example.webproject.com.Pojo.account;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface account_operator {
//查出所有的记录
// @Select("select * from account_table")
public List<account> findAll();
// @Select("select * from account_table where txl_account=#{account}")
public account findOne( @Param("txl_account") String txl_account);
//新增加一条记录
// @Insert("insert into account_table values(txl_account=#{account},txl_password=#{password})")
public Integer insertOne(@Param("account") account account);
// //删除一条记录
//// @Delete("delete from account_table where txl_account=#{account}")
public Integer deleteOne(String txl_account);
}

@ -1,22 +0,0 @@
package com.example.webproject.com.Mapper;
import com.example.webproject.com.Pojo.user_data;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface user_data_operator {
// @Select("select * from user_data_table")
public List<user_data> findAll();
public List<user_data> findOne(String txl_account);
public List<user_data> findOneByName(String txl_account,String txl_name);
public Integer deleteOne(String txl_account,String txl_name);
public Integer insertOne(String account,String name,String contact_phone_number);
}

@ -1,23 +0,0 @@
package com.example.webproject.com.Pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class account {
private String txl_account;
private String txl_password;
@Override
public String toString() {
return "account{" +
"txl_account='" + txl_account + '\'' +
", txl_password='" + txl_password + '\'' +
'}';
}
}

@ -1,40 +0,0 @@
package com.example.webproject.com.Pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class user_data {
private String txl_account;
private String txl_name;
private String txl_contact_phone_number;
private String txl_email;
private String txl_address;
private String txl_social_media_account;
private String txl_company_name;
private String txl_position;
private String txl_remarks;
private String txl_birthday;
private String txl_hobbies;
@Override
public String toString() {
return "user_data{" +
"txl_account='" + txl_account + '\'' +
", txl_name='" + txl_name + '\'' +
", txl_contact_phone_number='" + txl_contact_phone_number + '\'' +
", txl_email='" + txl_email + '\'' +
", txl_address='" + txl_address + '\'' +
", txl_social_media_account='" + txl_social_media_account + '\'' +
", txl_company_name='" + txl_company_name + '\'' +
", txl_position='" + txl_position + '\'' +
", txl_remarks='" + txl_remarks + '\'' +
", txl_birthday='" + txl_birthday + '\'' +
", txl_hobbies='" + txl_hobbies + '\'' +
'}';
}
}

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.webproject.com.Mapper.account_operator">
<!-- @Select("select * from account_table")-->
<!-- public List<account> findAll();-->
<parameterMap id="param_account" type="com.example.webproject.com.Pojo.account"></parameterMap>
<resultMap id="result_account" type="com.example.webproject.com.Pojo.account"></resultMap>
<select id="findAll" resultMap="result_account">
select * from account_table
</select>
<!-- @Select("select * from account_table where txl_account=#{account}")-->
<!-- public account findOne(@Param("account")String account);-->
<select id="findOne" parameterType="String" resultMap="result_account">
select * from account_table where txl_account=#{txl_account}
</select>
<!-- @Insert("insert into account_table values(txl_account=#{account},txl_password=#{password})")-->
<!-- public Integer insertOne(@Param("account") account account);-->
<insert id="insertOne" parameterMap="param_account">
insert into account_table values( #{account.txl_account}, #{account.txl_password})
</insert>
<!-- @Delete("delete from account_table where txl_account=#{account}")-->
<!-- public Integer deleteOne(@Param("account")String account);-->
<delete id="deleteOne" parameterType="String">
delete from account_table where txl_account=#{txl_account}
</delete>
</mapper>

@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.webproject.com.Mapper.user_data_operator">
<!-- // @Select("select * from user_data_table")-->
<!-- public List<user_data> findAll();-->
<resultMap id="result_user_data" type="com.example.webproject.com.Pojo.user_data">
</resultMap>
<parameterMap id="param_user_data" type="com.example.webproject.com.Pojo.user_data">
</parameterMap>
<select id="findAll" resultMap="result_user_data">
select * from user_data_table
</select>
<select id="findOne" resultMap="result_user_data" parameterType="string">
select * from user_data_table where txl_account=#{txl_account}
</select>
<select id="findOneByName" resultMap="result_user_data" parameterType="string">
select * from user_data_table where txl_account=#{txl_account} and txl_name=#{txl_name}
</select>
<delete id="deleteOne" parameterType="string" >
delete from user_data_table where txl_account=#{txl_account} and txl_name=#{txl_name}
</delete>
<insert id="insertOne" parameterType="string">
insert into user_data_table values(#{account},#{name},#{contact_phone_number},'','','','','','','','')
</insert>
</mapper>

@ -1,16 +0,0 @@
server:
port: 8080
servlet:
context-path: /home
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/student?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
password: 123456
username: root
mybatis:
mapper-locations: classpath:MyBatis/*.xml
type-aliases-package: com.example.webproject.com.Pojo

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

@ -1,272 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>通讯录登入界面</title>
</head>
<style>
*{
margin:0px;
padding:0px;
}
body{
display:flex;
align-items: center;
justify-content: center;
border:1px solide transparent;
background-color:ivory;
}
#account{
display:inline-block;
width:250px;
height:75px;
border:1px solid transparent;
margin-top:80px;
}
#account input{
height:25px;
}
#passwd{
display:inline-block;
width:250px;
height:75px;
border:1px solid transparent;
}
#passwd input{
height:25px;
}
input {
text-indent: 3em;
border:0.3px solid rgb(177, 161, 161);
border-radius: 5px;
box-shadow: 0.5px 0.5px 0.5px 0.05px rgb(247, 194, 227) inset;
text-align: justify;
}
input:focus{
outline:none;
}
#head{
text-align: center;
margin-top:50px;
font-size:5ch;
font-family: 'Courier New', Courier, monospace;
}
div i{
color:rgb(151, 235, 227);
}
#login{
width:350px;
height:400px;
border:black solid 1px;
border-radius:3%;
background-color: rgb(255, 255, 255);
box-shadow: 1px 1px 3px 2px rgb(247, 194, 227);
box-sizing: border-box;
text-align: center;
transition:1s;
position: absolute;
transform:translateX(100px);
z-index: 1;
}
#button{
border: 1px solid rgb(223, 254, 252) ;
background-color: rgb(223, 254, 252);
height:35px;
width: 75px;
border-radius: 15%;
border-right: 0px;
}
#context{
width: 250px;
height: 400px;
border: 1px solid black;
box-sizing: border-box;
background-color: rgb(255, 255, 255);
box-shadow: 1px 1px 3px 2px rgb(247, 194, 227);
border-radius:3%;
display: flex;
justify-content: end;
align-items: center;
flex-direction:column;
transition: 1s;
position: absolute;
transform:translateX(-200px);
z-index: 2;
padding-bottom: 50px;
}
#context p{
display: flex;
justify-content: center;
align-items: center;
width: 250px;
height: 75px;
font-family: 'Courier New', Courier, monospace ;
color: chartreuse;
font-size: 2.5ch;
}
#registration{
width:350px;
height:400px;
border:black solid 1px;
border-radius:3%;
background-color: rgb(255, 255, 255);
box-shadow: 1px 1px 3px 2px rgb(247, 194, 227);
box-sizing: border-box;
text-align: center;
transition:1s;
position: absolute;
transform:translateX(100px);
}
#box{
width: 1000px;
height: 500px;
background-color: ivory;
margin-top: 5%;
border: 1px solid transparent;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
position: relative;
}
</style>
<body>
<div id="box">
<div id="context">
<p></p>
<p>注册</p>
</div>
<form id="login" th:action="@{/postProcessorLogin}" target="_self">
<div id="head">
<i>登录页面</i>
</div>
<div id="account">
<i>账号 : </i>
<input type="text" placeholder="请输入账号" name="account">
</div>
<div id="passwd">
<i>密码 : </i>
<input type="password" placeholder="请输入密码" name="password">
</div>
<div><button id="button">登入</button></div>
</form>
<form id="registration" th:action="@{/postProcessorRegistration}" target="_self" >
<div id="head">
<i>注册页面</i>
</div>
<div id="account">
<i>账号 : </i>
<input type="text" placeholder="请输入账号" name="account">
</div>
<div id="passwd">
<i>密码 : </i>
<input type="password" placeholder="请输入密码" name="password">
</div>
<div><button id="button">注册</button></div>
<form>
</div>
<script th:inline="javascript">
// 这里就写js代码 在我们点击上面的注册按钮之后就会转到注册界面上面
//注册完成之后就会显示 我们可以进行登录了,我们就在此点击登录按钮就可以了
var p = document.querySelector("#context p:nth-child(2)");
p.addEventListener("click", function(){
//我们可以通过判断当前的内容是什么来劲判断操作
if( p.innerText === '注册'){
//也就是是在我们点击了这个按钮之后我们就要将我们的登陆界面消掉
//将我们的注册界面显示出来
var login = document.querySelector("#login");
login.style.opacity=0;
login.zIndex='0';
var context = document.querySelector("#context");
context.style.transform='translateX(200px)';
p.innerText = '登入';
var registration = document.querySelector("#registration");
registration.style.transform = 'translateX(-100px)';
registration.style.zIndex = 1;
registration.style.opacity = 1;
}
else if( p.innerText==='登入') {
var registration = document.querySelector("#registration");
registration.style.opacity = 0;
registration.zIndex = '0';
var context = document.querySelector("#context");
context.style.transform = 'translateX(-200px)';
p.innerText = '注册';
var login = document.querySelector("#login");
login.style.transform = 'translateX(100px)';
login.style.zIndex = 1;
login.style.opacity = 1;
}
//这个是将我们显示的 账号已有进行刷新的操作
var secondP = document.querySelector("#context p:first-child");
secondP.innerText = "";
});
//这个是判断当前是否已经发有了账号
//账号 在数据库里已经有了的不能使用相同的账号
var isHaveAccount = [[${isHaveAccount}]];
if(isHaveAccount != null){
if(isHaveAccount === "当前账号已有"){
p.innerText = '注册';
console.log("没有账号")
var login = document.querySelector("#login");
login.style.opacity=0;
login.zIndex='0';
var context = document.querySelector("#context");
context.style.transform='translateX(200px)';
p.innerText = '登入';
var registration = document.querySelector("#registration");
registration.style.transform = 'translateX(-100px)';
registration.style.zIndex = 1;
registration.style.opacity = 1;
//要输出已有
var secondP = document.querySelector("#context p:first-child");
secondP.innerText = isHaveAccount;
secondP.style.color="red";
}else if(isHaveAccount ===''){
console.log("没有账号")
}
console.log("还没有置为null " + isHaveAccount);
isHaveAccount=null;
console.log("值为null " + isHaveAccount);
}
</script>
</body>
</html>

@ -1,148 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>添加联系人</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
a {
text-decoration: none;
color: black;
}
button,
input {
border: 0;
outline: none;
}
section {
border-radius: 15px;
width: 560px;
height: 700px;
margin: 0 auto;
background-image: url(../static/bg2.jpg);
box-shadow: 10px 10px 10px 10px rgba(0, 0, 0, .1);
}
.title {
width: 560px;
height: 100px;
line-height: 100px;
text-align: center;
}
.xinxi {
width: 560px;
height: 400px;
font-size: 20px;
text-align: center;
}
tr td {
height: 100px;
text-align: center;
line-height: 100px;
}
.name,
.php {
width: 249px;
height: 30px;
}
.submit {
width: 200px;
height: 30px;
color: aqua;
border-radius: 5px;
}
.submit:hover {
background-color: skyblue;
cursor: pointer;
}
footer {
width: 560px;
height: 100px;
font-size: 20px;
text-align: center;
line-height: 100px;
}
footer a {
display: block;
margin: 0 auto;
width: 560px;
height: 100px;
}
footer a:hover {
color: aqua;
}
</style>
</head>
<body>
<section class="add">
<header class="title">
<h1>添加联系人</h1>
</header>
<div class="xinxi">
<form th:action="@{/add_user_data}" target="_self" >
<table width="600px">
<tr>
<td><label for="m">添加的联系人姓名:</label></td>
<td><input class="name" type="text" id="m" name="name" placeholder="请输入联系人姓名" required="required"></td>
</tr>
<!-- <tr>-->
<!-- <td>性别:</td>-->
<!-- <td><label for="nan">男</label><input type="radio" name="sex" id="nan">&nbsp;&nbsp;&nbsp;-->
<!-- <label for="nv">女</label><input type="radio" name="sex" id="nv">-->
<!-- </td>-->
<!-- </tr>-->
<tr>
<td><label for="php">电话号码:</label></td>
<td><input class="php" type="password" id="php" name="contact_phone_number" placeholder="请输入电话号码" required="required">
</td>
</tr>
<tr>
<td colspan="2"><input class="submit" type="submit" value="确认添加" name="上传"></td>
</tr>
</table>
</form>
<div id="message"><p></p></div>
</div>
<footer>
<a th:href="@{/data}">返回联系人列表</a>
</footer>
</section>
</body>
<script th:inline="javascript">
var message = [[${message}]];
if(message != null){
var p = document.querySelector("p");
p.innerText = message;
p.style.color='red';
console.log(message);
}
console.log("message");
</script>
</html>

@ -1,206 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
display:flex;
justify-content: center;
align-items: center;
padding: 150px;
background-color: ivory;
}
#box{
display:flex;
justify-content:center;
align-items: center;
width: 100%;
height: 100%;
background-color: ivory;
flex-direction: column;
padding: 150px;
}
#head{
width: 1200px;
height: 100px;
display:flex;
justify-content: center;
align-items: center;
/* background-color: aqua; */
}
#head table{
border-collapse: collapse;
}
td{
text-align: center;
vertical-align: center;
background-color:rgba(255,255,255,0.5);
border: 1px solid black;
}
#content {
width: 1200px;
/* height: 800px; */
display:flex;
justify-content: center;
align-items: center;
flex-direction: column;
/* background-color: red; */
/* z-index: -1; */
}
#content table{
border-collapse: collapse;
}
#content table tr{
background-color: bisque;
}
#operator{
display:flex;
justify-content: space-evenly;
align-items: center;
width: 1200px;
}
#operator input{
border: 1px solid rgb(223, 254, 252) ;
background-color: rgb(223, 254, 252);
height:50px;
width: 125px;
border-radius: 15%;
font-size:2.5ch;
font-family: 'Courier New', Courier, monospace;
margin-top: 20px;
}
</style>
</head>
<!-- 可以设计成两边 一边是姓名和电话 另一边就是具体的一些信息就像Maa那样 -->
<body>
<!-- 先做出来一个表格-->
<main id="box">
<!-- 在这里增加三个按钮-->
<div id="operator">
<input type="button" value="增加联系人">
<input type="button" value="删除联系人">
<input type="button" value="查找联系人">
</div>
<!-- 这里是首行,我们要在这里增加我们对应的显示功能 -->
<div id="head">
<!-- <span>账号</span> -->
<table>
<tr>
<td>姓名</td>
<td>联系电话</td>
<td>邮箱</td>
<td>地址</td>
<td>社交账号</td>
<td>公司名称</td>
<td>职位</td>
<td>标记</td>
<td>生日</td>
<td>爱好</td>
</tr>
</table>
</div>
<div id="content">
<table th:each="data:${user_data}">
<tr>
<!-- <span th:text="${data.txl_account}"></span> -->
<td th:text="${data.txl_name}"></td>
<td th:text="${data.txl_contact_phone_number}"></td>
<td th:text="${data.txl_email}"></td>
<td th:text="${data.txl_address}"></td>
<td th:text="${data.txl_social_media_account}"></td>
<td th:text="${data.txl_company_name}"></td>
<td th:text="${data.txl_position}"></td>
<td th:text="${data.txl_remarks}"></td>
<td th:text="${data.txl_birthday}"></td>
<td th:text="${data.txl_hobbies}"></td>
<!-- <td>账号</td> -->
<!-- <td>姓名</td>
<td>联系电话</td>
<td>邮箱</td>
<td>地址</td>
<td>社交账号</td>
<td>公司名称</td>
<td>职位</td>
<td>标记</td>
<td>生日</td>
<td>爱好</td> -->
</tr>
</table>
</div>
</main>
</body>
<script>
// var widths = [100,100,100,100,100,100,100,100,100,100,100];
var widths = [100,100,100,100,100,100,100,100,100,100];
var head = document.querySelector("#head table tr");
for(var num = 0; num < widths.length; ++num){
head.children[num].style.width = widths[num] + 'px';
head.children[num].style.height = widths[num] + 'px';
// head.children[num].style.borderCollapse = "collapse";
}
//到时候渲染,就要先找到 div,ul,li 才行
// var head = document.querySelector("li");
var lis = document.querySelectorAll("#content table tr");
// console.log(lis)
for(var item = 0; item < lis.length; ++item){
var cur = lis[item];
// console.log(cur)
// console.log(cur.childElementCount)
for(var num = 0; num < cur.childElementCount; ++num){
cur.children[num].style.width = widths[num] + 'px';
cur.children[num].style.height = widths[num] + 'px';
// cur.children[num].style.borderCollapse = "collapse";
}
}
var tables = document.querySelectorAll("#content table");
console.log(tables);
for(var index = 0; index < tables.length; ++index){
tables[index].style.borderCollapse="collapse";
}
var inputs = document.querySelectorAll("#operator input");
inputs[0].addEventListener("click",function(){
window.location.href = "add_user_data";
})
inputs[1].addEventListener("click",function(){
window.location.href = "delete_user_data";
})
inputs[2].addEventListener("click",function(){
window.location.href = "find_user_data";
})
</script>
</html>

@ -1,120 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>查找联系人</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
a {
text-decoration: none;
color: black;
}
button,
input {
border: 0;
outline: none;
}
section {
border-radius: 15px;
width: 560px;
height: 700px;
margin: 0 auto;
background-image: url(../static/bg2.jpg);
box-shadow: 10px 10px 10px 10px rgba(0, 0, 0, .1);
text-align: center;
}
.title {
width: 560px;
height: 150px;
line-height: 150px;
text-align: center;
}
.search {
position: relative;
width: 560px;
height: 400px;
}
.sousuo {
position: absolute;
left: 100px;
width: 246px;
height: 40px;
padding-left: 50px;
}
.search input[type=submit] {
position: absolute;
left: 346px;
width: 100px;
height: 40px;
}
.search input[type=submit]:hover {
cursor: pointer;
background-color: skyblue;
}
footer {
width: 560px;
height: 100px;
font-size: 20px;
text-align: center;
line-height: 100px;
}
footer a {
display: block;
margin: 0 auto;
width: 560px;
height: 100px;
}
footer a:hover {
color: aqua;
}
</style>
</head>
<body>
<section>
<div class="title">
<h1>删除联系人</h1>
</div>
<form th:action="@{/delete_user_data}" target="_self" >
<div class="search">
<input class="sousuo" type="search" name="name" placeholder="请输入要删除的联系人姓名" required="required">
<input type="submit" value="确认删除">
</div>
</form>
<div id="message"><p></p></div>
<footer>
<a th:href="@{/data}">返回联系人列表</a>
</footer>
</section>
<script th:inline="javascript">
var message = [[${message}]];
if(message != null){
var p = document.querySelector("p");
p.style.color='red';
p.innerText = message;
}
</script>
</body>
</html>

@ -1,11 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
This is 404 page
</body>
</html>

@ -1,10 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
This is error page
</body>
</html>

@ -1,120 +0,0 @@
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>查找联系人</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
a {
text-decoration: none;
color: black;
}
button,
input {
border: 0;
outline: none;
}
section {
border-radius: 15px;
width: 560px;
height: 700px;
margin: 0 auto;
background-image: url("bg2.jpg}");
box-shadow: 10px 10px 10px 10px rgba(0, 0, 0, .1);
text-align: center;
}
.title {
width: 560px;
height: 150px;
line-height: 150px;
text-align: center;
}
.search {
position: relative;
width: 560px;
height: 400px;
}
.sousuo {
position: absolute;
left: 100px;
width: 246px;
height: 40px;
padding-left: 50px;
}
.search input[type=submit] {
position: absolute;
left: 346px;
width: 100px;
height: 40px;
}
.search input[type=submit]:hover {
cursor: pointer;
background-color: skyblue;
}
footer {
width: 560px;
height: 100px;
font-size: 20px;
text-align: center;
line-height: 100px;
}
footer a {
display: block;
margin: 0 auto;
width: 560px;
height: 100px;
}
footer a:hover {
color: aqua;
}
</style>
</head>
<body>
<section>
<div class="title">
<h1>查找联系人</h1>
</div>
<form th:action="@{/find_user_data}" target="_self" >
<div class="search">
<input class="sousuo" type="search" name="name" placeholder="请输入要查找的联系人姓名" required="required">
<input type="submit" value="确认查找">
</div>
</form>
<div id="message"><p></p></div>
<footer>
<a th:href="@{/data}">返回联系人列表</a>
</footer>
</section>
<script th:inline="javascript">
var message = [[${message}]];
if(message != null){
var p = document.querySelector("p");
p.innerText = message;
p.style.color='red';
}
</script>
</body>
</html>

@ -1,13 +0,0 @@
package com.example.webproject;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class WebProjectApplicationTests {
@Test
void contextLoads() {
}
}
Loading…
Cancel
Save