From a5419317720e393a5fc0421e8412d41829a5e3b8 Mon Sep 17 00:00:00 2001 From: Puqns67 Date: Fri, 15 Sep 2023 22:54:40 +0800 Subject: [PATCH] refine project & add most new further 1. add account page. 2. support auto redirect for error page. 3. test and fix bug for login and register. 4. drop old api and jsp pages for project. Signed-off-by: Puqns67 --- pom.xml | 18 +- .../team8/fruitable/constant/UserType.kt | 7 - .../fruitable/controller/action/Account.kt | 74 ++++---- .../fruitable/controller/api/AccountApi.kt | 144 ---------------- .../team8/fruitable/controller/api/Cart.kt | 4 - .../team8/fruitable/controller/api/Item.kt | 25 --- .../team8/fruitable/controller/api/Order.kt | 4 - .../team8/fruitable/controller/page/Pages.kt | 19 ++ .../team8/fruitable/controller/util/Util.kt | 19 ++ .../team8/fruitable/datebase/entity/User.kt | 52 ++---- .../team8/fruitable/util/ResultBuilderJson.kt | 54 ------ src/main/kotlin/team8/fruitable/util/Util.kt | 2 +- src/main/resources/application.yaml | 2 +- src/main/resources/templates/account.jsp | 147 ---------------- src/main/resources/templates/account.mustache | 101 +++++++++++ src/main/resources/templates/activity.jsp | 96 ----------- src/main/resources/templates/edit.jsp | 163 ------------------ src/main/resources/templates/error.mustache | 4 + src/main/resources/templates/login.mustache | 2 +- .../resources/templates/register.mustache | 4 +- src/main/resources/templates/remove.jsp | 23 --- src/main/resources/templates/success.jsp | 15 -- src/main/resources/templates/update.jsp | 27 --- 23 files changed, 207 insertions(+), 799 deletions(-) delete mode 100644 src/main/kotlin/team8/fruitable/constant/UserType.kt delete mode 100644 src/main/kotlin/team8/fruitable/controller/api/AccountApi.kt delete mode 100644 src/main/kotlin/team8/fruitable/controller/api/Cart.kt delete mode 100644 src/main/kotlin/team8/fruitable/controller/api/Item.kt delete mode 100644 src/main/kotlin/team8/fruitable/controller/api/Order.kt create mode 100644 src/main/kotlin/team8/fruitable/controller/util/Util.kt delete mode 100644 src/main/kotlin/team8/fruitable/util/ResultBuilderJson.kt delete mode 100644 src/main/resources/templates/account.jsp create mode 100644 src/main/resources/templates/account.mustache delete mode 100644 src/main/resources/templates/activity.jsp delete mode 100644 src/main/resources/templates/edit.jsp delete mode 100644 src/main/resources/templates/remove.jsp delete mode 100644 src/main/resources/templates/success.jsp delete mode 100644 src/main/resources/templates/update.jsp diff --git a/pom.xml b/pom.xml index c71883d..e74163a 100644 --- a/pom.xml +++ b/pom.xml @@ -61,30 +61,20 @@ org.jetbrains.kotlin kotlin-stdlib - - com.fasterxml.jackson.module - jackson-module-kotlin - - - com.alibaba.fastjson2 - fastjson2-kotlin - 2.0.40 - com.fasterxml.jackson.core jackson-databind + + com.fasterxml.jackson.module + jackson-module-kotlin + org.mariadb.jdbc mariadb-java-client runtime - - com.alibaba - fastjson - 2.0.40 - diff --git a/src/main/kotlin/team8/fruitable/constant/UserType.kt b/src/main/kotlin/team8/fruitable/constant/UserType.kt deleted file mode 100644 index 839a359..0000000 --- a/src/main/kotlin/team8/fruitable/constant/UserType.kt +++ /dev/null @@ -1,7 +0,0 @@ -package team8.fruitable.constant - -enum class UserType { - Admin, - User, - Guest -} diff --git a/src/main/kotlin/team8/fruitable/controller/action/Account.kt b/src/main/kotlin/team8/fruitable/controller/action/Account.kt index 0bfbfb5..ca1503b 100644 --- a/src/main/kotlin/team8/fruitable/controller/action/Account.kt +++ b/src/main/kotlin/team8/fruitable/controller/action/Account.kt @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.servlet.mvc.support.RedirectAttributes +import team8.fruitable.controller.util.Util.Companion.error import team8.fruitable.datebase.entity.User import team8.fruitable.datebase.repository.AccountRepository @@ -18,10 +19,6 @@ class Account(private val repository: AccountRepository) { return token?.let(repository::findByToken) } - private fun hasAdminPermissions(token: String?): Boolean { - return this.getCurrentUser(token)?.isAdmin ?: false - } - private fun updateToken(response: HttpServletResponse, token: String, path: String = "/", age: Int = 2678400) { val cookie = Cookie("TOKEN", token) cookie.path = path @@ -29,53 +26,66 @@ class Account(private val repository: AccountRepository) { response.addCookie(cookie) } - fun error( - redirectAttributes: RedirectAttributes, - title: String, - message: String, - redirect: String = "/" - ): String { - redirectAttributes.addFlashAttribute("title", title) - redirectAttributes.addFlashAttribute("message", message) - redirectAttributes.addFlashAttribute("redirect", redirect) - return "redirect:/error" - } - @PostMapping("/login") fun login( response: HttpServletResponse, attributes: RedirectAttributes, - @CookieValue(value = "TOKEN", required = false) token: String?, - @RequestParam(name = "name") name: String, - @RequestParam(name = "password") password: String + @CookieValue("TOKEN", required = false) token: String?, + @RequestParam("name") name: String, + @RequestParam("password") password: String ): String { if (this.getCurrentUser(token) != null) return error(attributes, "登录", "当前已登录账户") - val user = repository.findByName(name) ?: return error(attributes, "登录", "账户不存在") - if (!user.testPassword(password)) return error(attributes, "登录", "密码错误") + val user = repository.findByName(name) ?: return error(attributes, "登录", "账户不存在", "/login") + if (!user.testPassword(password)) return error(attributes, "登录", "密码错误", "/login") user.updateToken() user.updateLoginTime() repository.save(user) updateToken(response, user.token) - return "redirect:/"; + return "redirect:/" } @PostMapping("/register") fun register( response: HttpServletResponse, attributes: RedirectAttributes, - @CookieValue(value = "TOKEN", required = false) token: String?, - @RequestParam(name = "name") name: String, - @RequestParam(name = "password") password: String, - @RequestParam(name = "age", required = false) age: Int?, - @RequestParam(name = "gender", required = false) gender: String?, - @RequestParam(name = "phone", required = false) phone: String?, - @RequestParam(name = "email", required = false) email: String?, - @RequestParam(name = "address", required = false) address: String? + @CookieValue("TOKEN", required = false) token: String?, + @RequestParam("name") name: String, + @RequestParam("password") password: String, + @RequestParam("age", required = false) age: Int?, + @RequestParam("gender", required = false) gender: String?, + @RequestParam("phone", required = false) phone: String?, + @RequestParam("email", required = false) email: String?, + @RequestParam("address", required = false) address: String? ): String { - if (this.getCurrentUser(token) != null) return error(attributes, "登录", "当前已登录账户") + if (this.getCurrentUser(token) != null) return error(attributes, "注册", "当前已登录账户") val user = repository.save(User(name, password, age, gender, phone, email, address)) updateToken(response, user.token) - return "redirect:/"; + return "redirect:/" + } + + @PostMapping("/update") + fun update( + response: HttpServletResponse, + attributes: RedirectAttributes, + @CookieValue("TOKEN", required = false) token: String?, + @RequestParam("password_old") passwordOld: String, + @RequestParam("name") name: String, + @RequestParam("password", required = false) password: String?, + @RequestParam("password_confirm", required = false) passwordConfirm: String?, + @RequestParam("age", required = false) age: Int?, + @RequestParam("gender", required = false) gender: String?, + @RequestParam("phone", required = false) phone: String?, + @RequestParam("email", required = false) email: String?, + @RequestParam("address", required = false) address: String?, + @RequestParam("redirect", required = false) redirect: String? + ): String { + val user = this.getCurrentUser(token) ?: return error(attributes, "更新", "账户未登录") + if (!user.testPassword(passwordOld)) return error(attributes, "更新", "正在使用的密码不正确", "/account") + if (password != passwordConfirm) return error(attributes, "更新", "密码与确认密码不相同", "/account") + user.update(name, password, age, gender, phone, email, address) + repository.save(user) + updateToken(response, user.token) + return "redirect:/account" } @RequestMapping("/logout") diff --git a/src/main/kotlin/team8/fruitable/controller/api/AccountApi.kt b/src/main/kotlin/team8/fruitable/controller/api/AccountApi.kt deleted file mode 100644 index 59e66c1..0000000 --- a/src/main/kotlin/team8/fruitable/controller/api/AccountApi.kt +++ /dev/null @@ -1,144 +0,0 @@ -package team8.fruitable.controller.api - -import jakarta.servlet.http.Cookie -import jakarta.servlet.http.HttpServletResponse -import org.springframework.web.bind.annotation.* -import team8.fruitable.constant.UserType -import team8.fruitable.datebase.entity.User -import team8.fruitable.datebase.repository.AccountRepository -import team8.fruitable.util.ResultBuilderJson - -@RestController -@RequestMapping("/api/v1/account") -class AccountApi(private val repository: AccountRepository) { - private fun getCurrentUser(token: String?): User? { - return token?.let(repository::findByToken) - } - - private fun hasAdminPermissions(token: String?): Boolean { - return this.getCurrentUser(token)?.isAdmin ?: false - } - - private fun updateToken(response: HttpServletResponse, token: String, path: String = "/", age: Int = 2678400) { - val cookie = Cookie("TOKEN", token) - cookie.path = path - cookie.maxAge = age - response.addCookie(cookie) - } - - @GetMapping("/info", produces = ["application/json"]) - fun infoMe( - @CookieValue(value = "TOKEN", required = false) token: String? - ): String { - val user = this.getCurrentUser(token) ?: return ResultBuilderJson("账户未登录").toJson() - return ResultBuilderJson(user.asMap(UserType.User)).toJson() - } - - @GetMapping("/info/{id}", produces = ["application/json"]) - fun info( - @CookieValue(value = "TOKEN", required = false) token: String?, @PathVariable id: Long - ): String { - val queryUser = repository.findById(id).orElse(null) ?: return ResultBuilderJson("账户不存在").toJson() - val currentUser = this.getCurrentUser(token) - return ResultBuilderJson( - queryUser.asMap(if (currentUser != null && (currentUser.id == id || currentUser.isAdmin)) UserType.User else UserType.Guest) - ).toJson() - } - - //@PostMapping - @RequestMapping("/login", produces = ["application/json"]) - fun login( - response: HttpServletResponse, - @CookieValue(value = "TOKEN", required = false) token: String?, - @RequestParam(name = "name") name: String, - @RequestParam(name = "password") password: String - ): String { - if (this.getCurrentUser(token) != null) return ResultBuilderJson("当前已登录账户").toJson() - val user = repository.findByName(name) ?: return ResultBuilderJson("账户不存在").toJson() - if (!user.testPassword(password)) return ResultBuilderJson("密码错误").toJson() - user.updateToken() - user.updateLoginTime() - repository.save(user) - updateToken(response, user.token) - return ResultBuilderJson("success", "登录成功").toJson() - } - - @RequestMapping("/logout", produces = ["application/json"]) - fun logout(response: HttpServletResponse): String { - updateToken(response, "", age = 0) - return ResultBuilderJson("success", "注销成功").toJson() - } - - @RequestMapping("/register", produces = ["application/json"]) - fun register( - response: HttpServletResponse, - @CookieValue(value = "TOKEN", required = false) token: String?, - @RequestParam(name = "name") name: String, - @RequestParam(name = "password") password: String, - @RequestParam(name = "age", required = false) age: Int?, - @RequestParam(name = "gender", required = false) gender: String?, - @RequestParam(name = "phone", required = false) phone: String?, - @RequestParam(name = "email", required = false) email: String?, - @RequestParam(name = "address", required = false) address: String? - ): String { - if (this.getCurrentUser(token) != null) return ResultBuilderJson("当前已登录账户").toJson() - val user = repository.save(User(name, password, age, gender, phone, email, address)) - updateToken(response, user.token) - return ResultBuilderJson("success", "注册成功").toJson() - } - - @RequestMapping("/update", produces = ["application/json"]) - fun update( - response: HttpServletResponse, - @CookieValue(name = "TOKEN", required = false) token: String?, - @RequestParam(name = "name") name: String, - @RequestParam(name = "password") password: String, - @RequestParam(name = "age", required = false) age: Int?, - @RequestParam(name = "gender", required = false) gender: String?, - @RequestParam(name = "phone", required = false) phone: String?, - @RequestParam(name = "email", required = false) email: String?, - @RequestParam(name = "address", required = false) address: String? - ): String { - val user = this.getCurrentUser(token) ?: return ResultBuilderJson("账户未登录").toJson() - user.update(name, password, age, gender, phone, email, address) - repository.save(user) - updateToken(response, user.token) - return ResultBuilderJson("success", "更新账户信息成功").toJson() - } - - @GetMapping("/admin/info/{id}", produces = ["application/json"]) - fun infoAdmin( - @CookieValue(value = "TOKEN", required = false) token: String?, - @PathVariable id: Long, - ): String { - if (this.hasAdminPermissions(token)) return ResultBuilderJson("无管理员权限").toJson() - return ResultBuilderJson(repository.findById(id)).toJson() - } - - @DeleteMapping("/admin/remove/{id}", produces = ["application/json"]) - fun removeAdmin( - @CookieValue(value = "TOKEN", required = false) token: String?, - @PathVariable id: Long, - ): String { - if (this.hasAdminPermissions(token)) return ResultBuilderJson("无管理员权限").toJson() - // TODO: 完成管理员删除方法 - return ResultBuilderJson(repository.findById(id)).toJson() - } - - @PostMapping("/admin/update/{id}", produces = ["application/json"]) - fun updateAdmin( - @CookieValue(value = "TOKEN", required = false) token: String?, - @PathVariable id: Long, - @RequestParam(name = "name") name: String, - @RequestParam(name = "password") password: String, - @RequestParam(name = "age", required = false) age: Int?, - @RequestParam(name = "gender", required = false) gender: String?, - @RequestParam(name = "phone", required = false) phone: String?, - @RequestParam(name = "email", required = false) email: String?, - @RequestParam(name = "address", required = false) address: String? - ): String { - if (this.hasAdminPermissions(token)) return ResultBuilderJson("无管理员权限").toJson() - // TODO: 完成管理员更新账户数据方法 - return ResultBuilderJson(repository.findById(id)).toJson() - } -} diff --git a/src/main/kotlin/team8/fruitable/controller/api/Cart.kt b/src/main/kotlin/team8/fruitable/controller/api/Cart.kt deleted file mode 100644 index aa98d1f..0000000 --- a/src/main/kotlin/team8/fruitable/controller/api/Cart.kt +++ /dev/null @@ -1,4 +0,0 @@ -package team8.fruitable.controller.api - -class Cart { -} diff --git a/src/main/kotlin/team8/fruitable/controller/api/Item.kt b/src/main/kotlin/team8/fruitable/controller/api/Item.kt deleted file mode 100644 index b673850..0000000 --- a/src/main/kotlin/team8/fruitable/controller/api/Item.kt +++ /dev/null @@ -1,25 +0,0 @@ -package team8.fruitable.controller.api - -import org.springframework.web.bind.annotation.GetMapping -import org.springframework.web.bind.annotation.PathVariable -import org.springframework.web.bind.annotation.RestController -import team8.fruitable.datebase.entity.User -import team8.fruitable.datebase.repository.AccountRepository -import team8.fruitable.datebase.repository.ItemRepository -import team8.fruitable.util.ResultBuilderJson - -@RestController -class Item(private val itemRepository: ItemRepository, private val userRepository: AccountRepository) { - private fun getCurrentUser(token: String?): User? { - return token?.let(userRepository::findByToken) - } - - private fun hasAdminPermissions(token: String?): Boolean { - return this.getCurrentUser(token)?.isAdmin ?: false - } - - @GetMapping("/api/v1/item/info/{id}", produces = ["application/json"]) - fun info(@PathVariable id: Long): String { - return ResultBuilderJson(itemRepository.findById(id).orElse(null)).toJson() - } -} diff --git a/src/main/kotlin/team8/fruitable/controller/api/Order.kt b/src/main/kotlin/team8/fruitable/controller/api/Order.kt deleted file mode 100644 index 83b0286..0000000 --- a/src/main/kotlin/team8/fruitable/controller/api/Order.kt +++ /dev/null @@ -1,4 +0,0 @@ -package team8.fruitable.controller.api - -class Order { -} diff --git a/src/main/kotlin/team8/fruitable/controller/page/Pages.kt b/src/main/kotlin/team8/fruitable/controller/page/Pages.kt index 7b10700..dd95415 100644 --- a/src/main/kotlin/team8/fruitable/controller/page/Pages.kt +++ b/src/main/kotlin/team8/fruitable/controller/page/Pages.kt @@ -5,6 +5,8 @@ import org.springframework.ui.Model import org.springframework.ui.set import org.springframework.web.bind.annotation.CookieValue import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.servlet.mvc.support.RedirectAttributes +import team8.fruitable.controller.util.Util.Companion.error import team8.fruitable.datebase.entity.User import team8.fruitable.datebase.repository.AccountRepository @@ -47,4 +49,21 @@ class Pages(private val repository: AccountRepository) { this.getCurrentUser(token)?.let { model["user"] = it } return "register" } + + @RequestMapping("/account") + fun account( + model: Model, + attributes: RedirectAttributes, + @CookieValue("TOKEN", required = false) token: String? + ): String { + model["isAccount"] = true + val user = this.getCurrentUser(token) ?: return error(attributes, "更新", "账户未登录", "/login") + when (user.gender) { + "M"-> model["isGenderAsMale"] = true + "F" -> model["isGenderAsFemale"] = true + else -> model["isGenderAsUnknown"] = true + } + model["user"] = user + return "account" + } } diff --git a/src/main/kotlin/team8/fruitable/controller/util/Util.kt b/src/main/kotlin/team8/fruitable/controller/util/Util.kt new file mode 100644 index 0000000..4c3d8b3 --- /dev/null +++ b/src/main/kotlin/team8/fruitable/controller/util/Util.kt @@ -0,0 +1,19 @@ +package team8.fruitable.controller.util + +import org.springframework.web.servlet.mvc.support.RedirectAttributes + +class Util { + companion object { + fun error( + redirectAttributes: RedirectAttributes, + title: String, + message: String, + redirect: String = "/" + ): String { + redirectAttributes.addFlashAttribute("title", title) + redirectAttributes.addFlashAttribute("message", message) + redirectAttributes.addFlashAttribute("redirect", redirect) + return "redirect:/error" + } + } +} diff --git a/src/main/kotlin/team8/fruitable/datebase/entity/User.kt b/src/main/kotlin/team8/fruitable/datebase/entity/User.kt index 2ef6a15..c8cbf75 100644 --- a/src/main/kotlin/team8/fruitable/datebase/entity/User.kt +++ b/src/main/kotlin/team8/fruitable/datebase/entity/User.kt @@ -2,12 +2,10 @@ package team8.fruitable.datebase.entity import com.fasterxml.jackson.annotation.JsonView import jakarta.persistence.* -import team8.fruitable.constant.UserType import team8.fruitable.util.Util import java.time.LocalDateTime import java.util.* - @Entity @Table(name = "users") class User( @@ -94,28 +92,28 @@ class User( this.address = address } - final fun genPassword(password: String): String { + private final fun genPassword(password: String): String { return Util.hash(password) } fun update( - name: String, - password: String, - age: Int?, - gender: String?, - phone: String?, - email: String?, - address: String?, - isAdmin: Boolean = false + name: String? = null, + password: String? = null, + age: Int? = null, + gender: String? = null, + phone: String? = null, + email: String? = null, + address: String? = null, + isAdmin: Boolean? = null ) { - this.name = name - this.updatePassword(password) + if (!name.isNullOrBlank()) this.name = name + if (!password.isNullOrBlank()) this.updatePassword(password) this.age = age - this.gender = gender + if (!gender.isNullOrBlank()) this.gender = gender this.phone = phone this.email = email this.address = address - this.isAdmin = isAdmin + isAdmin?.let { this.isAdmin = it } this.updateToken() } @@ -134,28 +132,4 @@ class User( fun updateToken() { this.token = UUID.randomUUID().toString() } - - fun asMap(userType: UserType): Map { - val result: MutableMap = mutableMapOf( - "id" to this.id, - "name" to this.name, - "createTime" to this.createTime, - "loginTime" to this.loginTime, - "age" to this.age, - "gender" to this.gender, - "email" to this.email, - ) - if (userType == UserType.User || userType == UserType.Admin) result += mapOf( - "phone" to this.phone, - "address" to this.address, - "isAdmin" to this.isAdmin, - "carts" to this.carts, - "orders" to this.orders - ) - if (userType == UserType.Admin) result += mapOf( - "password" to this.password, - "token" to this.token, - ) - return result - } } diff --git a/src/main/kotlin/team8/fruitable/util/ResultBuilderJson.kt b/src/main/kotlin/team8/fruitable/util/ResultBuilderJson.kt deleted file mode 100644 index 5aff251..0000000 --- a/src/main/kotlin/team8/fruitable/util/ResultBuilderJson.kt +++ /dev/null @@ -1,54 +0,0 @@ -package team8.fruitable.util - -import com.alibaba.fastjson2.toJSONString -import java.time.LocalDateTime -import java.util.* - -class ResultBuilderJson { - var status: String = "auto" - var message: String = "" - val timestamp: LocalDateTime = LocalDateTime.now() - var content: T? = null - - constructor(content: T?) { - this.content = content - } - - constructor(message: String) { - this.message = message - } - - constructor(status: String, message: String) : this(message) { - this.status = status - } - - constructor(message: String, content: T?) : this(content) { - this.message = message - } - - constructor(status: String, message: String, content: T?) : this(message, content) { - this.status = status - } - - constructor(content: Optional) { - this.content = content.orElse(null) - } - - constructor(message: String, content: Optional) : this(content) { - this.message = message - } - - constructor(status: String, message: String, content: Optional) : this(message, content) { - this.status = status - } - - fun toJson(): String { - if (status == "auto") status = if (content == null) "error" - else "success" - return this.toJSONString() - } - - override fun toString(): String { - return this.toJson() - } -} diff --git a/src/main/kotlin/team8/fruitable/util/Util.kt b/src/main/kotlin/team8/fruitable/util/Util.kt index 3c73b9b..6e5c35e 100644 --- a/src/main/kotlin/team8/fruitable/util/Util.kt +++ b/src/main/kotlin/team8/fruitable/util/Util.kt @@ -6,7 +6,7 @@ class Util { companion object { fun hash(input: String, algorithm: String = "SHA-256"): String { return MessageDigest.getInstance(algorithm).digest(input.toByteArray()) - .fold("") { str, it -> str + "%02x".format(it) } + .joinToString("") { "%02x".format(it) } } } } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 3f3444f..2ceac68 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -4,7 +4,7 @@ spring: username: root password: password jpa: - show-sql: true + open-in-view: true hibernate: ddl-auto: update server: diff --git a/src/main/resources/templates/account.jsp b/src/main/resources/templates/account.jsp deleted file mode 100644 index e734688..0000000 --- a/src/main/resources/templates/account.jsp +++ /dev/null @@ -1,147 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> -<%@ taglib prefix="s" uri="/struts-tags" %> - - - - - - 账户 - 67购物网站 - - - - - - - - - - - - - - - - - - - - - -
-
-
账户
- - " /> - -
-
- - -
- -
- - " /> -
- -
- - -
- -
- - -
- -
- - " /> -
- -
- - " /> -
- -
- checked /> - - checked /> - - checked /> - -
-
- -
- -
-
-
- - - - - -
- -
- -
- - diff --git a/src/main/resources/templates/account.mustache b/src/main/resources/templates/account.mustache new file mode 100644 index 0000000..954228a --- /dev/null +++ b/src/main/resources/templates/account.mustache @@ -0,0 +1,101 @@ + + + + + 账户 - 67购物网站 + + + + + + + + + + + + + + + + + + +{{> header }} + + +
+
+
账户
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + + + + +
+
+ +
+ +
+
+
+ +{{> footer }} + + + diff --git a/src/main/resources/templates/activity.jsp b/src/main/resources/templates/activity.jsp deleted file mode 100644 index 409216c..0000000 --- a/src/main/resources/templates/activity.jsp +++ /dev/null @@ -1,96 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> -<%@ taglib prefix="s" uri="/struts-tags" %> - - - - - - 活动 - 67购物网站 - - - - - - - - - - - - - - - - - - - - - -
此处由于时间不足,不完善,请见谅
- - - - - -
- -
- -
- - diff --git a/src/main/resources/templates/edit.jsp b/src/main/resources/templates/edit.jsp deleted file mode 100644 index 45b4a00..0000000 --- a/src/main/resources/templates/edit.jsp +++ /dev/null @@ -1,163 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> -<%@ taglib prefix="s" uri="/struts-tags" %> - - - - - - - - - - 编辑 - 67购物网站 - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ID用户名帐户创建时间最后登录时间年龄性别邮箱管理员操作
- - -
- -
- 首页 - - - - - - ">第 - - - ">尾页 -
-
- -
- -
-
- - - - - -
- -
- -
- - diff --git a/src/main/resources/templates/error.mustache b/src/main/resources/templates/error.mustache index 463af09..9981c11 100644 --- a/src/main/resources/templates/error.mustache +++ b/src/main/resources/templates/error.mustache @@ -21,6 +21,10 @@ + + {{# redirect }} + + {{/ redirect }} diff --git a/src/main/resources/templates/login.mustache b/src/main/resources/templates/login.mustache index 2fbb38b..e2ab24b 100644 --- a/src/main/resources/templates/login.mustache +++ b/src/main/resources/templates/login.mustache @@ -30,7 +30,7 @@
-
+
登录
diff --git a/src/main/resources/templates/register.mustache b/src/main/resources/templates/register.mustache index 4e5f38e..4c82451 100644 --- a/src/main/resources/templates/register.mustache +++ b/src/main/resources/templates/register.mustache @@ -30,13 +30,13 @@
- +
注册
- +
diff --git a/src/main/resources/templates/remove.jsp b/src/main/resources/templates/remove.jsp deleted file mode 100644 index e097e2d..0000000 --- a/src/main/resources/templates/remove.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> -<%@ taglib prefix="s" uri="/struts-tags" %> - - - - - 移除用户 - 67购物网站 - - - - - - - " /> - -

确定移除此用户?

-

用户名:

- - - - - diff --git a/src/main/resources/templates/success.jsp b/src/main/resources/templates/success.jsp deleted file mode 100644 index db5aed3..0000000 --- a/src/main/resources/templates/success.jsp +++ /dev/null @@ -1,15 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> - - - - - 成功 - 67购物网站 - - - - - -

操作已完成!

- - diff --git a/src/main/resources/templates/update.jsp b/src/main/resources/templates/update.jsp deleted file mode 100644 index 37b8225..0000000 --- a/src/main/resources/templates/update.jsp +++ /dev/null @@ -1,27 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8"%> -<%@ taglib prefix="s" uri="/struts-tags" %> - - - - - 更新用户 - 67购物网站 - - - - - -

更新此用户的信息

-
-
-
-
-
-
-
-
-
- - - -