(Spring MVC的Controller练习)
工具:Tomcat 10.0.23,MySQL,JDK18
一、运行效果展示
点击运行Tomcat起首进入index.jsp页面
若已有账号点击登录即可进行登录,这里先点击“获取ROY6账号”去注册,进入register.jsp页面
注册乐成后跳转到success.jsp页面,此时数据库中user表会增加一条用户信息
点击“前去探索ROY6商城”此时,此时为login.jsp页面
输入已经注册过的账号,登录,进入welcome.jsp页面
这里我简单的写了两个小功能,就不进行展示了,本文重要展示登录注册功能。
下面进入详细操纵步骤,请逐步食用代码!
二、项目代码
先查看项目结构图:
赤色框出部分为本次实行用到代码
1、建立数据库,建表
起首创建数据库spring_db,然后建立所需要的用户表user
- CREATE DATABASE IF NOT EXISTS spring_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
- USE spring_db;
- CREATE TABLE user (
- id INT AUTO_INCREMENT PRIMARY KEY,
- username VARCHAR(50) NOT NULL UNIQUE,
- password VARCHAR(100) NOT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
复制代码 2、创建第一个index.jsp页面
页面重要包罗注册以及登陆,很简单,直接放代码
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>欢迎</title>
- <style>
- /* 页面背景 */
- body {
- font-family: 'Arial', sans-serif;
- margin: 0;
- padding: 0;
- background: url('https://wx3.sinaimg.cn/mw690/007doFNOgy1hf8lzl0rs2j323u16q7wh.jpg') no-repeat center center fixed;
- background-size: cover;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- overflow: hidden;
- animation: backgroundAnimation 10s infinite alternate;
- }
- /* 页面内容容器 */
- .container {
- text-align: center;
- background-color: white;
- padding: 40px;
- border-radius: 12px;
- box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1); /* 阴影效果 */
- background-color: rgba(255, 255, 255, 0.95); /* 背景半透明 */
- width: 100%;
- max-width: 500px;
- }
- /* 标题样式 */
- h3 {
- font-family: 'Comic Sans MS', cursive, sans-serif; /* 卡通风格字体 */
- font-size: 28px;
- color: #00BFFF; /* 天青色 */
- margin-bottom: 20px;
- }
- /* 链接列表样式 */
- ul {
- list-style-type: none;
- padding: 0;
- }
- li {
- margin: 15px 0;
- }
- /* 链接按钮样式 */
- a {
- text-decoration: none;
- padding: 12px 25px;
- background-color: #607d8b; /* 莫兰迪蓝绿色 */
- color: white;
- font-size: 18px;
- border-radius: 10px;
- display: inline-block;
- transition: background-color 0.3s ease, transform 0.2s ease;
- }
- a:hover {
- background-color: #78909c;
- transform: translateY(-2px);
- }
- a:active {
- background-color: #546e7a;
- transform: translateY(0);
- }
- /* 响应式设计 */
- @media (max-width: 480px) {
- .container {
- padding: 20px;
- width: 90%;
- }
- h3 {
- font-size: 24px;
- }
- a {
- font-size: 16px;
- padding: 10px 20px;
- }
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h3>${username} 欢迎你的探索!</h3>
- <ul>
- <li><a href="index/login">登录</a></li>
- <li><a href="index/register">获取ROY6账号</a></li>
- </ul>
- </div>
- </body>
- </html>
复制代码 3、注册页面 register.jsp页面
由index.jsp页面点击注册按钮跳转而来,重要实现注册功能。这里连接数据库,判断用户的合法性。注册乐成跳转success.jsp页面,失败跳转到error.jsp页面,已经注册过则继续停留在此页面,提示“注册失败,用户名已存在“。
4、注册乐成success.jsp页面
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <!DOCTYPE html>
- <html lang="zh">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>注册成功</title>
- <style>
- body {
- font-family: 'Arial', sans-serif;
- margin: 0;
- padding: 0;
- background: url('https://wx2.sinaimg.cn/mw690/006Gi90nly1h6p18g6sipj31h40u0791.jpg') no-repeat center center fixed;
- background-size: cover;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- overflow: hidden;
- animation: backgroundAnimation 10s infinite alternate;
- }
- .container {
- background-color: white;
- padding: 40px;
- background-color: rgba(255, 255, 255, 0.95); /* 背景半透明 */
- border-radius: 16px;
- box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1); /* 阴影效果 */
- width: 100%;
- max-width: 420px;
- text-align: center;
- }
- h1 {
- font-family: 'Comic Sans MS', cursive, sans-serif; /* 可爱的卡通字体 */
- font-size: 36px;
- color: #c58e72;
- margin-bottom: 20px;
- font-weight: 600;
- }
- p {
- font-size: 18px;
- color: #333;
- margin-bottom: 30px;
- }
- a {
- display: inline-block;
- font-size: 18px;
- color: white;
- background-color: #607d8b; /* Morandi blue */
- padding: 12px 24px;
- text-decoration: none;
- border-radius: 10px;
- transition: background-color 0.3s ease, transform 0.2s ease;
- }
- a:hover {
- background-color: #78909c;
- transform: translateY(-2px);
- }
- a:active {
- background-color: #546e7a;
- transform: translateY(1px);
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h1>注册成功</h1>
- <p>欢迎,您已成为ROY6新成员!</p>
- <a href="${pageContext.request.contextPath}/login">前往探索ROY6商城</a>
- </div>
- </body>
- </html>
复制代码 5、注册失败error.jsp页面
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>注册失败</title>
- <style>
- /* 设置背景色 */
- body {
- font-family: Arial, sans-serif;
- background-color: #f8d7da; /* 轻微红色背景,表示失败 */
- margin: 0;
- height: 100vh;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- .container {
- text-align: center;
- background-color: white;
- padding: 30px 50px;
- border-radius: 10px;
- box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
- width: 100%;
- max-width: 400px;
- }
- h1 {
- font-size: 24px;
- color: #721c24; /* 错误提示的红色 */
- margin-bottom: 20px;
- }
- p {
- font-size: 18px;
- color: #721c24;
- margin-bottom: 30px;
- }
- a {
- text-decoration: none;
- padding: 12px 20px;
- background-color: #4CAF50;
- color: white;
- font-size: 16px;
- font-weight: bold;
- border-radius: 6px;
- display: inline-block;
- transition: background-color 0.3s ease, transform 0.2s ease;
- }
- a:hover {
- background-color: #45a049;
- transform: translateY(-2px);
- }
- a:active {
- transform: translateY(0);
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h1>注册失败</h1>
- <p>抱歉,您的注册未能成功。请重试</p>
- <a href="${pageContext.request.contextPath}/register">返回注册页面</a>
- </div>
- </body>
- </html>
复制代码 6、登录login.jsp页面
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>登录</title>
- <style>
- /* 页面基础样式 */
- body {
- font-family: 'Arial', sans-serif;
- margin: 0;
- padding: 0;
- background: url('https://wx4.sinaimg.cn/mw690/007btvx7ly1h7zumt0ty2j31hc0u0wkx.jpg') no-repeat center center fixed;
- background-size: cover;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- overflow: hidden;
- animation: backgroundAnimation 10s infinite alternate;
- }
- .container {
- width: 100%;
- max-width: 400px;
- padding: 40px;
- background-color: rgba(255, 255, 255, 0.95); /* 背景半透明 */
- border-radius: 12px;
- box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1); /* 阴影效果 */
- text-align: center;
- animation: fadeIn 1s ease-in-out;
- }
- /* 标题样式:使用莫兰迪色系 */
- h2 {
- font-size: 30px;
- color: #A8B3A5; /* 莫兰迪绿 */
- font-weight: 600;
- margin-bottom: 30px;
- letter-spacing: 1px;
- font-family: 'Georgia', serif;
- }
- /* 表单样式 */
- form {
- display: flex;
- flex-direction: column;
- gap: 20px;
- }
- .form-group {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- }
- .form-group label {
- margin-bottom: 8px;
- font-weight: bold;
- color: #6D7D6E; /* 莫兰迪灰绿 */
- }
- .form-group input {
- width: 100%;
- padding: 12px;
- border: 1px solid #ddd;
- border-radius: 8px;
- font-size: 16px;
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
- }
- /* 输入框聚焦效果 */
- .form-group input:focus {
- border-color: #A8B3A5; /* 莫兰迪绿 */
- outline: none;
- box-shadow: 0 0 8px rgba(169, 179, 165, 0.6);
- }
- /* 按钮样式 */
- .form-group button {
- padding: 12px 20px;
- border: none;
- border-radius: 6px;
- background-color: #A8B3A5; /* 莫兰迪绿 */
- color: white;
- font-size: 16px;
- font-weight: bold;
- cursor: pointer;
- transition: background-color 0.3s ease, transform 0.2s ease;
- }
- .form-group button:hover {
- background-color: #8A9A8E; /* 更深的莫兰迪绿 */
- transform: translateY(-3px);
- }
- .form-group button:active {
- transform: translateY(0);
- }
- /* 提交按钮 */
- .submit-button {
- background-color: #A8B3A5;
- }
- .submit-button:hover {
- background-color: #8A9A8E;
- }
- /* 动画效果 */
- @keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(-20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- /* 响应式设计 */
- @media (max-width: 480px) {
- .container {
- padding: 20px;
- }
- .form-group input {
- padding: 10px;
- }
- .form-group button {
- padding: 12px 16px;
- }
- h2 {
- font-size: 26px;
- }
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h2>登录</h2>
- <form action="${pageContext.request.contextPath}/doLogin" method="post">
- <div class="form-group">
- <label for="username">用户名</label>
- <input type="text" id="username" name="username" required>
- </div>
- <div class="form-group">
- <label for="password">密码</label>
- <input type="password" id="password" name="password" required>
- </div>
- <div class="form-group">
- <button type="submit" class="submit-button">登录</button>
- </div>
- </form>
- </div>
- </body>
- </html>
复制代码 7、欢迎welcome.jsp页面
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>欢迎来到ROY6商城</title>
- <style>
- body {
- font-family: 'Arial', sans-serif;
- margin: 0;
- padding: 0;
- background: url('https://wx4.sinaimg.cn/mw690/007doFNOgy1hf8lzljzodj323u16qqv5.jpg') no-repeat center center fixed;
- background-size: cover;
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- overflow: hidden;
- }
- .container {
- text-align: center;
- background-color: rgba(255, 255, 255, 0.9);
- padding: 30px 40px;
- border-radius: 15px;
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
- width: 100%;
- max-width: 500px;
- animation: fadeIn 1s ease-in-out;
- position: relative;
- z-index: 1;
- }
- h1 {
- font-size: 30px;
- color: #444;
- margin-bottom: 20px;
- font-family: 'Comic Sans MS', cursive;
- }
- p {
- font-size: 18px;
- color: #666;
- margin-bottom: 20px;
- }
- a {
- display: inline-block;
- text-decoration: none;
- padding: 12px 25px;
- margin: 10px 0;
- background-color: #A8B3A5; /* 修改为莫兰迪绿色 */
- color: white;
- font-size: 16px;
- border-radius: 8px;
- transition: background-color 0.3s ease, transform 0.2s ease;
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
- }
- a:hover {
- background-color: #8A9A8E; /* 悬停时更深的莫兰迪绿色 */
- transform: translateY(-3px);
- }
- a:active {
- transform: translateY(0);
- }
- @keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(-20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- /* 新增样式:绝对定位文本 */
- .text-overlay {
- position: absolute;
- top: 10%;
- left: 50%;
- transform: translateX(-50%);
- background-color: rgba(255, 255, 255, 0.7);
- padding: 20px;
- border-radius: 15px;
- text-align: center;
- font-size: 17px;
- color: #444;
- width: 80%;
- max-width: 600px;
- box-shadow: 0 8px 15px rgba(0, 0, 0, 0.3);
- animation: fadeIn 1s ease-in-out;
- }
- @media (max-width: 480px) {
- .container {
- padding: 20px;
- width: 90%;
- }
- h1 {
- font-size: 24px;
- }
- p {
- font-size: 16px;
- }
- a {
- font-size: 14px;
- }
- .text-overlay {
- font-size: 16px;
- width: 90%;
- }
- }
- </style>
- </head>
- <body>
- <!-- 新增的文字容器 -->
- <div class="text-overlay">
- ROY6住在一个未知的BAOBAO森林里,<br>
- 它们喜欢音乐、舞蹈,还喜欢用自己被赋予的神秘力量,帮助地球上的人们。<br>
- 如果你忽然感到幸福,不再孤单,那是因为ROY6来到了你身边!<br>
- 在日常生活中,当你想要获得小小的幸运时,就请呼叫ROY6吧!
- </div>
- <div class="container">
- <h1>${username} 欢迎来到ROY6!</h1>
- <p>请选择您想进行的操作:</p>
- <a href="${pageContext.request.contextPath}/add">新增Roy6商品</a>
- <a href="${pageContext.request.contextPath}/list">查看Roy6商品</a>
- </div>
- </body>
- </html>
复制代码 8、相关配置
(1)web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
- version="4.0">
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
复制代码 (2)lib包
这里因为我用的是 Tomcat10.0.23 的版本,以是使用了6.0的 jar 包,各人使用对应本身的就行,大概采用Maven配置
(3)spring配置(applicationContext.xml)
创建配置文件applicationContext.xml,在该文件中配置id为dataSource的数据源Bean和id为jdbcTemplate的JDBC模板Bean,并将数据源注入到JDBC模板中。
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
- <!-- Enable Spring MVC components and default configuration -->
- <mvc:annotation-driven />
- <!-- Scan for components (controllers, services, repositories) in the specified package -->
- <context:component-scan base-package="com.example.demo" />
- <context:component-scan base-package="com.example.demo.controller"/>
- <!-- 视图解析器 -->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
- <!-- 前缀 -->
- <property name="prefix" value="/WEB-INF/views/" />
- <!-- 后缀 -->
- <property name="suffix" value=".jsp" />
- </bean>
- <!-- DataSource configuration for connecting to MySQL database -->
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
- <property name="url" value="jdbc:mysql://localhost:3306/spring_db?useUnicode=true characterEncoding=UTF-8 useSSL=false serverTimezone=UTC" />
- <property name="username" value="root" />
- <property name="password" value="这里写你的数据库密码" />
- </bean>
- <!-- JdbcTemplate bean for database operations -->
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource" />
- </bean>
- <bean id="txManage" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
- <property name="transactionManager" ref="txManage"/>
- </bean>
- <bean id="resourceHttpRequestHandler" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler">
- <property name="locations">
- <list>
- <value>classpath:/static/</value>
- </list>
- </property>
- </bean>
- </beans>
复制代码 9、后端代码
(1)编写Controller层
创建IndexController类,用于实现首页跳转登录注册操纵。
IndexController.java
- package com.example.demo.controller;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- @Controller
- @RequestMapping("/index")
- public class IndexController {
- @RequestMapping(value = "/login",method = RequestMethod.GET)
- public String login(){
- return "login";
- }
- @RequestMapping("/register")
- public String register(){
- return "register";
- }
- }
复制代码 创建IndexController类,用于实现用户登录注册操纵。
UserController.java
- package com.example.demo.controller;
- import com.example.demo.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.servlet.ModelAndView;
- @Controller
- public class UserController {
- @Autowired
- private UserService userService;
- @GetMapping("/login")
- public String showLoginForm() {
- return "login";
- }
- @PostMapping("/doLogin")
- public ModelAndView login(@RequestParam("username") String username, @RequestParam("password") String password){
- ModelAndView modelAndView = new ModelAndView();
- String result = userService.Login(username,password);
- if("success".equals(result)){
- modelAndView.addObject("username",username);
- modelAndView.setViewName("welcome"); //设置视图为welcome.jsp
- }else{
- modelAndView.addObject("error",true);
- modelAndView.setViewName("login");
- }
- return modelAndView;
- }
- @GetMapping("/register")
- public String showRegisterForm(){
- return "register";
- }
- @PostMapping("/doRegister")
- public ModelAndView Register(@RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("confirmPassword") String confirmPassword) {
- ModelAndView modelAndView = new ModelAndView();
- if (!confirmPassword.equals(password)) {
- modelAndView.addObject("error", "两次密码不一致");
- modelAndView.setViewName("register"); // 返回注册页面
- return modelAndView;
- }
- try {
- userService.Register(username, password);
- modelAndView.setViewName("success"); // 注册成功后跳转到success.jsp页面
- modelAndView.addObject("username", username);
- } catch (IllegalArgumentException e) {
- modelAndView.addObject("error", "注册失败,用户名已存在");
- modelAndView.setViewName("register"); // 注册失败,仍然在注册页面
- }
- return modelAndView;
- }
- }
复制代码 (2)编写Dao层方法
创建UsersDAO接口,在UsersDAO接口中声明查询所有效户信息和更新的方法。
UsersDAO.java
- package com.example.demo.dao;
- import com.example.demo.model.Users;
- import java.util.List;
- public interface UsersDAO {
- public int update(String sql, Object[] params);
- public List<Users> query(String sql, Object[] params);
- }
复制代码 (3)实现Dao层方法
创建UsersDAOImpl实现类,在UsersDAOImpl类中实现UsersDAO接口中的 update() 和 query() 方法。
UsersDAOImpl.java
- package com.example.demo.dao;
- import com.example.demo.model.Users;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.jdbc.core.BeanPropertyRowMapper;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowMapper;
- import org.springframework.stereotype.Repository;
- import java.util.List;
- @Repository
- public class UsersDAOImpl implements UsersDAO { // 加上 implements UsersDAO
- @Autowired
- private JdbcTemplate jdbcTemplate;
- @Override
- public int update(String sql, Object[] params) {
- return jdbcTemplate.update(sql, params);
- }
- @Override
- public List<Users> query(String sql, Object[] params) {
- RowMapper<Users> rowMapper = new BeanPropertyRowMapper<>(Users.class);
- return jdbcTemplate.query(sql, rowMapper, params);
- }
- }
复制代码 (4)编写实体类
创建Users类,在该类中定义username、password属性,以及属性对应的getter/setter方法。
Users.java
- package com.example.demo.model;
- public class Users {
- private String username;
- private String password;
- public String getName() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
复制代码 (5)编写服务层接口
创建UserService接口,在UserService接口中声明登录和注册的方法。
UserService.java
- package com.example.demo.service;
- public interface UserService {
- public String Login(String username, String password);
- public void Register(String username, String password);
- }
复制代码 (6)实现服务层方法
创建UserServiceImpl实现类,在UserServiceImpl类中实现UserService接口中的 Login() 和 Register() 方法。
UserServiceImpl.java
- package com.example.demo.service;
- import com.example.demo.dao.UsersDAO;
- import com.example.demo.model.Users;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- private UsersDAO usersDAO;
- @Override
- public String Login(String username, String password) {
- // 使用占位符避免SQL注入
- String sql = "SELECT * FROM user WHERE username = ? AND password = ?";
- List<Users> users = usersDAO.query(sql, new Object[]{username, password});
- if (!users.isEmpty()) {
- return "success";
- }
- return "login?error=true";
- }
- @Override
- public void Register(String username, String password) {
- String checkUserSql = "SELECT * FROM user WHERE username = ?";
- List<Users> existingUsers = usersDAO.query(checkUserSql, new Object[]{username});
- if (!existingUsers.isEmpty()) {
- throw new IllegalArgumentException("Username already exists");
- }
- String insertUserSql = "INSERT INTO user (username, password) VALUES (?, ?)";
- usersDAO.update(insertUserSql, new Object[]{username, password});
- }
- }
复制代码 10、 查看运行效果
运行效果当然在上边就展示了哈哈哈,会遇到同样喜欢Roy6家族的友友嘛~嘻嘻~
哈哈,到这里就结束了~
码字不易,别忘记 点赞收藏哦!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |