首页 教程 开发工具 【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

目录:

  • 一、创建新项目
  • 二、修改包结构
  • 三、添加依赖项
  • 四、添加Web模块
  • 五、添加配置文件
    • (1)空文件夹:`mapper`
    • (2)数据库配置文件:`database.properties`
    • (3)Mybatis配置文件:`mybatis-config.xml`
    • (4)Spring配置文件:`applicationContext.xml`
    • (5)SpringMVC配置文件:`spring-mvc.xml`
    • (6)日志log4j的配置:`log4j.properties`
    • (7)修改 `web.xml` 文件
  • 六、代码示例:登录&注册
    • (0)数据库:`MySQL`
    • (1)实体类:`entity`
    • (2)持久层:`dao`
    • (3)业务层:`service`
    • (4)单元测试:`test`
    • (5)控制层:`controller`
    • (5)视图层:`HTML + Thymeleaf`
  • 七、部署Web服务器:`Tomcat`
  • 八、运行项目,在浏览器中访问
    • (1)注册测试
    • (2)登录测试
  • 九、其他扩展信息
    • (1)隐藏IDEA中部分文件
    • (2)去除@Autowired注解的波浪线
    • (3)去除视图解析的警告
    • (4)未完待续。。。

引言:本文详细的介绍了在 IDEA 中如何创建一个 SSM 框架的 JavaWeb 项目。并且包含代码示例,实现登录注册


一、创建新项目


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

二、修改包结构


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

三、添加依赖项

提示:如果你电脑安装了Maven,那么在进行接下来的操作之前,可以将IDEA中的Maven设置成自己本地的Maven

【使用IDEA创建SSM项目】

广告:对Maven的安装与配置感兴趣的同学,可以浏览我的这篇帖子 👉👉👉 【Maven的安装与配置】

继续,复制以下代码,在pom.xml中添加依赖

<dependencies><!--Spring + SpringMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.2.0</version></dependency><!--Mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.4</version></dependency><!--MySQL + JDBC--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>6.2.0</version></dependency><!--Tomcat10的Servlet--><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.1.0</version></dependency><!--解析JSON--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.18.1</version></dependency><!--页面模板引擎--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring6</artifactId><version>3.1.2.RELEASE</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>6.2.0</version><scope>test</scope></dependency><!--日志log4j--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.24.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-reload4j</artifactId><version>2.0.16</version><scope>test</scope></dependency><!--实体类注解--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency><!--分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>6.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version><configuration><parameters>true</parameters></configuration></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>

提示:以上所有依赖项,均可从Maven中央仓库查找,Maven中央仓库地址:https://mvnrepository.com 👈👈👈

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

四、添加Web模块


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

五、添加配置文件

总体配置文件的概况图:在 resources 目录下,新建了一个文件夹和五个配置文件,具体详情请看下面的详细介绍!

【使用IDEA创建SSM项目】


(1)空文件夹:mapper


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

(2)数据库配置文件:database.properties


【使用IDEA创建SSM项目】

在创建好的 database.properties 文件中 添加以下代码

jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm jdbc.username=root jdbc.password=admin123

注意:请将 usernamepassword 修改成自己的!!!

【使用IDEA创建SSM项目】

(3)Mybatis配置文件:mybatis-config.xml


【使用IDEA创建SSM项目】

在创建好的 mybatis-config.xml 文件中 添加以下代码

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><propertiesresource="database.properties"/><settings><settingname="mapUnderscoreToCamelCase"value="true"/><settingname="cacheEnabled"value="true"/><!-- 开启自动映射 --><settingname="autoMappingBehavior"value="FULL"/></settings><typeAliases><packagename="nxu.entity"/></typeAliases><!-- 配置PageHelper拦截器 --><plugins><plugininterceptor="com.github.pagehelper.PageInterceptor"><propertyname="helperDialect"value="mysql"/><propertyname="reasonable"value="true"/><propertyname="supportMethodsArguments"value="true"/><propertyname="params"value="count=countSql"/></plugin></plugins><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><mappers><mapperresource="mapper/UserMapper.xml"/></mappers></configuration>

【使用IDEA创建SSM项目】

(4)Spring配置文件:applicationContext.xml


【使用IDEA创建SSM项目】

在创建好的 applicationContext.xml 文件中 粘贴以下代码

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"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/context http://www.springframework.org/schema/context/spring-context.xsd"><!--开启Spring注解支持--><context:annotation-config/><!--将Service层注册为Spring Bean--><context:component-scanbase-package="nxu.service"/><!--将MyBatis与Spring集成--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="configLocation"value="classpath:mybatis-config.xml"/></bean><!--引用数据库配置文件--><context:property-placeholderlocation="classpath:database.properties"/><!--使用MyBatis配置文件中配置的数据源 --><beanid="dataSource"class="org.apache.ibatis.datasource.pooled.PooledDataSource"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></bean><!--配置MyBatis的Mapper扫描器,将Mapper接口注册为Spring Bean --><beanid="mapperScannerConfigurer"class="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="nxu.dao"/><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/></bean></beans>

【使用IDEA创建SSM项目】

(5)SpringMVC配置文件:spring-mvc.xml


【使用IDEA创建SSM项目】

在创建好的 spring-mvc.xml 文件中 添加以下代码

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--开启SpringMVC注解支持,并解决乱码问题--><mvc:annotation-driven><mvc:message-converters><beanclass="org.springframework.http.converter.StringHttpMessageConverter"><propertyname="supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value><value>text/html;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property></bean></mvc:message-converters></mvc:annotation-driven><!--扫描Controller层所在的包 --><context:component-scanbase-package="nxu.controller"/><!--不过滤静态资源,如CSS,JS,图片等--><mvc:default-servlet-handler/><!--视图解析器--><beanid="templateResolver"class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><propertyname="prefix"value="/"/><propertyname="suffix"value=".html"/><propertyname="templateMode"value="HTML"/><propertyname="cacheable"value="true"/></bean><beanid="templateEngine"class="org.thymeleaf.spring6.SpringTemplateEngine"><propertyname="templateResolver"ref="templateResolver"/><propertyname="enableSpringELCompiler"value="true"/></bean><beanclass="org.thymeleaf.spring6.view.ThymeleafViewResolver"><propertyname="templateEngine"ref="templateEngine"/><propertyname="order"value="1"/><propertyname="characterEncoding"value="UTF-8"/></bean><!--文件上传解析器(Spring6)--><beanid="multipartResolver"class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/></beans>

【使用IDEA创建SSM项目】

(6)日志log4j的配置:log4j.properties


【使用IDEA创建SSM项目】

在创建好的 log4j.properties 文件中 添加以下代码

log4j.rootLogger=INFO,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t]-%m%n

【使用IDEA创建SSM项目】

log4j 日志输出有4个级别:ERRORWARNINFODEBUG
👆截图中用的是DEBUG级别,因为看着太多心烦,作者又改成INFO级别,干净清爽~

(7)修改 web.xml 文件

打开 web/WEB-INF/web.xml 文件,添加一些配置选项。以下是添加之后的全部代码

<?xml version="1.0" encoding="UTF-8"?><web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--关联Spring配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!--监听配置文件是否出现加载问题--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--防止Spring内存溢出的监听器--><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!--关联SpringMVC配置文件--><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:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--Spring提供的字符编码过滤器--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

【使用IDEA创建SSM项目】

到这里SSM框架基本已经搭建完成,剩下的就是具体的代码实现,这包括各层注解的使用,Mybatis的xml文件及其中SQL的书写,单元测试和浏览器访问等。😊😊😊 加油~

六、代码示例:登录&注册

(0)数据库:MySQL


创建一个名为 ssm 的数据库,再创建一个名为 user 的表,表里添加几个字段,代码如下

createdatabase`ssm`;use`ssm`;CREATETABLE`user`(`id`intUNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT'用户编号(主键)',`phone`varchar(11)CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci NOTNULLCOMMENT'手机号码',`password`varchar(16)CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci NOTNULLCOMMENT'账户密码',PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_general_ci ROW_FORMAT = Dynamic;

【使用IDEA创建SSM项目】

(1)实体类:entity


【使用IDEA创建SSM项目】

在创建好的 User 类中,添加以下代码

packagenxu.entity;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importlombok.ToString;@Data@NoArgsConstructor@AllArgsConstructor@ToStringpublicclassUser{privateint id;// 用户编号privateString phone;// 电话号码privateString password;// 账户密码}

(2)持久层:dao


【使用IDEA创建SSM项目】

在创建好的 UserMapper 接口中,添加以下代码

packagenxu.dao;importnxu.entity.User;publicinterfaceUserMapper{/** * 添加User * * @param user 用户实体类 * @return 添加结果(0 : 失败, 1 : 成功) */intinsertUser(User user);/** * 查询User * * @param phone 手机号 * @param password 密码 * @return 查找结果(null : 失败, User : 成功) */UserselectUser(@Param("phone")String phone,@Param("password")String password);}

接下来我们要使用 Mybatis 框架编写 SQL 语句。为了以后使用的方便,可以添加一个 Mybatis模板文件

Mybatis 模板文件的代码如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace=""></mapper>


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

在创建好的 UserMapper.xml 文件中,添加以下代码

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="nxu.dao.UserMapper"><insertid="insertUser"parameterType="User"> insert into user values(null, #{phone}, #{password}) </insert><selectid="selectUser"resultType="User"> select * from user where phone = #{phone} and password = #{password} </select></mapper>

【使用IDEA创建SSM项目】

提示: namespace = “接口的完全限定名”,id =“接口里的方法名”,parameterTyperesultType 是实体类的类名

(3)业务层:service


【使用IDEA创建SSM项目】

在创建好的 UserService 接口中,添加以下代码

packagenxu.service;importnxu.entity.User;publicinterfaceUserService{/** * 用户注册 * * @param user 用户 * @return 注册结果:0-失败,1-成功 */intuserRegister(User user);/** * 用户登录 * * @param phone 电话号 * @param password 密码 * @return 登录结果:null-失败,User-成功 */UseruserLogin(String phone,String password);}

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

在创建好的 UserServiceImpl 类中,添加以下代码

packagenxu.service.impl;importnxu.dao.UserMapper;importnxu.entity.User;importnxu.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;@ServicepublicclassUserServiceImplimplementsUserService{@AutowiredprivateUserMapper userMapper;/** * 用户注册 * * @param user 用户 * @return 注册结果(0 : 失败, 1 : 成功) */@OverridepublicintuserRegister(User user){return userMapper.insertUser(user);}/** * 用户登录 * * @param phone 电话号 * @param password 密码 * @return 登录结果(null : 失败, User : 成功) */@OverridepublicUseruserLogin(String phone,String password){return userMapper.selectUser(phone, password);}}

到这一步,我们可以进行简单的单元测试,看看我们写的方法是否正常。这里主要测试服务层实现类

(4)单元测试:test

为了避免重复的在每个测试类中都添加配置文件注解或写加载配置文件的代码,这里创建一个 测试类的父类

【使用IDEA创建SSM项目】

在创建好的 BaseTest 类中,添加以下代码

importorg.junit.runner.RunWith;importorg.springframework.test.context.ContextConfiguration;importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations ={"classpath:applicationContext.xml"})publicclassBaseTest{//@RunWith是JUnit的一个注解, 用来告诉JUnit不要使用内置的方式进行单元测试, 而应该使用指定的类做单元测试//对于Spring单元测试总是要使用SpringJUnit4ClassRunner.class这个类//@ContextConfiguration注解用来告诉junit,spring的配置文件,参数是个String数组,允许多个值}

继续创建具体的一个测试类,如 UserTest添加以下代码

importnxu.entity.User;importnxu.service.UserService;importorg.junit.Test;importorg.springframework.beans.factory.annotation.Autowired;publicclassUserTestextendsBaseTest{@AutowiredprivateUserService userService;@Testpublicvoidtest1(){int i = userService.userRegister(newUser(0,"15040302010","123456"));System.out.println(i);}@Testpublicvoidtest2(){User user = userService.userLogin("15040302010","123456");System.out.println(user);}}

运行测试类,查看是否正常

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

右键单击,选择刷新

【使用IDEA创建SSM项目】

再测试一下另一个方法

【使用IDEA创建SSM项目】

到这里,单元测试的样例就写完了。下面部分开始结合视图层从浏览器进行访问和数据传递。

(5)控制层:controller


【使用IDEA创建SSM项目】

在创建好的 UserController 类中,添加以下代码

packagenxu.controller;importjakarta.servlet.http.HttpSession;importnxu.entity.User;importnxu.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.*;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Map;@ControllerpublicclassUserController{@AutowiredprivateUserService userService;// 说明:此处是为了展现Model的使用方法,无特别用处@RequestMapping("/")publicStringindex(Model model){ model.addAttribute("message","我的初识SSM项目");ArrayList<String> info =newArrayList<>(); info.add("项目信息:"); info.add("Spring6"); info.add("JDK 21.0.4"); info.add("Maven 3.9.9"); info.add("Tomcat 10"); info.add("MySQL 8.0.40"); model.addAttribute("infoList", info);return"index";}@GetMapping("/loginPage")publicStringgetLoginPage(){return"login";}@GetMapping("/registerPage")publicStringgetRegisterPage(){return"register";}// 说明:为了展示更多写法,这里登录采用传递多个参数,注册采用实体类接收参数// 登录和注册的时候可以先判断手机号码是否存在和是否被注册,然后再执行后续步骤// 即返回多种状态信息,给用户提供更好的使用体验,这里就不具体演示了@PostMapping("/userLogin")@ResponseBodypublicMap<String,Object>userLogin(HttpSession session,String phone,String password){Map<String,Object> map =newHashMap<>();User user = userService.userLogin(phone, password);if(user ==null){ map.put("status",1); map.put("message","手机号或密码不正确!");}else{ map.put("status",2); map.put("message","登录成功,欢迎您!"); session.setAttribute("user", user);// 把用户数据存入Session}return map;}@PostMapping("/userRegister")@ResponseBodypublicMap<String,Object>register(@ModelAttributeUser user){Map<String,Object> map =newHashMap<>();int result = userService.userRegister(user);if(result ==1){ map.put("status",true); map.put("message","注册成功!即将跳转登录页面!");}else{ map.put("status",false); map.put("message","注册失败!请联系系统管理员~");}return map;}}

(5)视图层:HTML + Thymeleaf

这里我写了三个页面👇,分别是 项目默认页面:index.html,登录页面:login.html,注册页面:register.html

【使用IDEA创建SSM项目】

在创建好的html页面中添加以下代码

第1个页面👇:index.html

<!DOCTYPEhtml><htmllang="en"xmlns:th="http://www.thymeleaf.org"><head><metacharset="UTF-8"><title>Tomcat默认页面</title><style>body{font-family: Arial, sans-serif;text-align: center;}a{display: inline-block;margin: 15px;text-decoration: none;color: #fff;background-color: #007BFF;padding: 12px 30px;border-radius: 5px;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);transition: background-color 0.3s ease, box-shadow 0.3s ease;}a:hover{background-color: #0056b3;box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15);}table{border: 1px solid black;margin: 0 auto;border-collapse: collapse;}td{border: 2px solid silver;font-size: 20px;width: 150px;}</style></head><body><h1th:text="${message}"></h1><divstyle="display: flex;justify-content: center;"><ath:href="@{/loginPage}"style="margin-right: 20px;">登录</a><ath:href="@{/registerPage}">注册</a></div><br/><table><tr><tdth:each="info:${infoList}"th:text="${info}"></td></tr></table><br/><imgsrc="image/zhy.jpg"alt="图片加载失败"><hr/><divth:if="${session.user != null }"><h1th:text="${session.user.phone}"></h1></div></body></html>

第2个页面👇:login.html

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>登录页面</title><style>body{font-family: Arial, sans-serif;background-color: #f4f4f4;display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;}.login-container{width: 300px;background-color: #fff;padding: 20px;border-radius: 5px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);}h2{text-align: center;}form{display: flex;flex-direction: column;}label{margin-bottom: 5px;}input[type="text"], input[type="password"]{padding: 10px;margin-bottom: 15px;border: 1px solid #ccc;border-radius: 3px;}button{padding: 10px;background-color: #007BFF;color: #fff;border: none;border-radius: 3px;cursor: pointer;}button:hover{background-color: #0056b3;}/* 定义要悬浮的div的样式 */.floating-div{width: 400px;height: 50px;font-size: 30px;line-height: 50px;font-weight: bold;text-align: center;position: fixed;top: 100px;left: 50%;transform:translateX(-50%);z-index: 999;display: none;}</style></head><body><divclass="floating-div"id="myAlert"></div><divclass="login-container"><h2>Login</h2><formid="loginForm"><labelfor="phone">Phone:</label><inputtype="text"id="phone"name="phone"required/><labelfor="password">Password:</label><inputtype="password"id="password"name="password"required/><buttontype="submit">Login</button></form></div></body></html><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script><script>$(document).ready(function(){// 这里自己封装一个方法,避免太多重复的代码。这个方法就是模拟一个弹出的提示functionZHY(object, color, message){ object.css('background-color', color); object.text(message); object.show();setTimeout(function(){ object.hide();},3000);}// 阻止表单提交,通过Ajax提交$('#loginForm').submit(function(e){ e.preventDefault();let myAlert =$('#myAlert');// 获取自己模拟的弹出层// 通过正则表达式对输入的数据进行合法性验证let phone =$('#phone').val();let password =$('#password').val();let phonePattern =/^1[3-9]\d{9}$/;let passwordPattern =/^[a-zA-Z0-9\S]{6,16}$/;if(!phonePattern.test(phone)){ZHY(myAlert,'#fdbcb4','手机号码格式不正确');return;}if(!passwordPattern.test(password)){ZHY(myAlert,'#fdbcb4','用户密码格式不合法');return;} $.ajax({type:'POST',url:'/userLogin',data:{"phone": phone,"password": password },success:function(data){if(data.status ===1){ZHY(myAlert,'#fdbcb4', data.message);}elseif(data.status ===2){ZHY(myAlert,'#d0f0c0', data.message);setTimeout(function(){ window.location.href ="/";},3000);}},error:function(){ZHY(myAlert,'#fdbcb4', data.message);}});});});</script>

第3个页面👇:register.html

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>注册页面</title><style>body{font-family: Arial, sans-serif;background-color: #f4f4f4;display: flex;justify-content: center;align-items: center;min-height: 100vh;margin: 0;}.login-container{width: 300px;background-color: #fff;padding: 20px;border-radius: 5px;box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);}h2{text-align: center;}form{display: flex;flex-direction: column;}label{margin-bottom: 5px;}input[type="text"], input[type="password"]{padding: 10px;margin-bottom: 15px;border: 1px solid #ccc;border-radius: 3px;}button{padding: 10px;background-color: #fbb1a2;color: #fff;border: none;border-radius: 3px;cursor: pointer;}button:hover{background-color: #f09650;}/* 定义要悬浮的div的样式 */.floating-div{width: 400px;height: 50px;font-size: 30px;line-height: 50px;font-weight: bold;text-align: center;position: fixed;top: 100px;left: 50%;transform:translateX(-50%);z-index: 999;display: none;}</style></head><body><divclass="floating-div"id="myAlert"></div><divclass="login-container"><h2>Register</h2><formid="registerForm"><labelfor="phone">Phone:</label><inputtype="text"id="phone"name="phone"required/><labelfor="password">Password:</label><inputtype="password"id="password"name="password"required/><buttontype="submit">Register</button></form></div></body></html><scriptsrc="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script><script>$(document).ready(function(){// 这里自己封装一个方法,避免太多重复的代码。这个方法就是模拟一个弹出的提示functionZHY(object, color, message){ object.css('background-color', color); object.text(message); object.show();setTimeout(function(){ object.hide();},3000);}// 阻止表单提交,通过Ajax提交$('#registerForm').submit(function(e){ e.preventDefault();let myAlert =$('#myAlert');// 获取自己模拟的弹出层// 通过正则表达式对输入的数据进行合法性验证let phone =$('#phone').val();let password =$('#password').val();let phonePattern =/^1[3-9]\d{9}$/;let passwordPattern =/^[a-zA-Z0-9\S]{6,16}$/;if(!phonePattern.test(phone)){ZHY(myAlert,'#fdbcb4','手机号码格式不正确');return;}if(!passwordPattern.test(password)){ZHY(myAlert,'#fdbcb4','用户密码格式不合法');return;} $.ajax({type:'POST',url:'/userRegister',data:{"phone": phone,"password": password },success:function(data){if(data.status){ZHY(myAlert,'#d0f0c0', data.message);setTimeout(function(){ window.location.href ="/loginPage";},3000);}else{ZHY(myAlert,'#fdbcb4', data.message);}},error:function(){ZHY(myAlert,'#fdbcb4', data.message);}});});});</script>

注意:此处三个 html页面 的名称对应 UserController 中三个方法的返回值,请不要修改页面名称 或者 确保 UserController 中的视图名和html页面名都修改成一致的👆。


为了检验静态资源是否正常加载,我这里创建了一个名为 image 的文件夹,里面放了一张图片👇。

【使用IDEA创建SSM项目】

然后放入一张名称为 zhy.jpg 的图片 ,如果使用其他名称,请修改图片在 index.html 中的引用路径。


最终的项目结构截图

【使用IDEA创建SSM项目】

七、部署Web服务器:Tomcat

广告:对Maven的安装与配置感兴趣的同学,可以浏览我的这篇帖子 👉👉👉 【Maven的安装与配置】


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

添加之后是下面的页面

【使用IDEA创建SSM项目】

这表明我们之前没有在IDEA中配置过Tomcat,接下来我们添加Tomcat。

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

添加好后,导航栏的图标就变成了这样:【使用IDEA创建SSM项目】

八、运行项目,在浏览器中访问


点击 IDEA头部导航栏右边的【使用IDEA创建SSM项目】运行按钮。

【使用IDEA创建SSM项目】

如果控制台报错,那就再逐步检查一下,看看是不是哪里配置错误了,或者去搜索一下错误的原因。😭😭😭


如果一切正常,会自动打开浏览器,访问我们的index页面 👇

【使用IDEA创建SSM项目】

如果能够正常显示以上内容,那么可以说明我们正确编写了 thymeleaf 语法,而且成功加载了静态资源。

(1)注册测试

点击页面中的 注册 按钮链接,来到注册页面👇

首先我们输入不合法的数据,测试一下 js 中代码是否正确👇

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

可以看到,👆我们输入不同的不合法数据后,js 中的代码会帮我们进行校验,阻止此次提交。


接下来,我们输入全部合法的数据,然后点击注册

【使用IDEA创建SSM项目】

可以看到👆,提示注册成功了,我们再去数据库里看看数据是否真的存储进来了👇

【使用IDEA创建SSM项目】

(2)登录测试


上一步注册成功后会自动跳转到登录界面。当然我们也可以在浏览器地址栏重新访问 localhost:8080 ,然后点击默认页面中的 登录 按钮,来到登录页面。

首先我们先输入不存在的手机号,进行测试👇

【使用IDEA创建SSM项目】

可以看到,js 成功的根据后端 controller 中返回的结果显示了提示信息👆

然后我们输入刚才注册的信息,进行登录👇

【使用IDEA创建SSM项目】

可以看到👆,我们登录成功。然后就跳转到了项目首页,并显示了用户信息👇

【使用IDEA创建SSM项目】

OK,到这里我们的全部测试就结束了,大家也对SSM框架有了一个基础性的了解和使用~ 😁😁😁


九、其他扩展信息

(1)隐藏IDEA中部分文件

这个操作可以隐藏一些我们不能更改或者不需要编辑的文件,提高整个项目的清晰度,否则项目里乱乱的。

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

(2)去除@Autowired注解的波浪线


【使用IDEA创建SSM项目】

打开IDEA的设置界面,选中 Inspections ,输入 autowiring ,然后 取消勾选 下图中的选项就好了~

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

(3)去除视图解析的警告


【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

【使用IDEA创建SSM项目】

(4)未完待续。。。

至此,整个SSM就浅浅演示完了。想要了解更多知识或者学术交流,欢迎访问 👉本人论坛主页 😁😁😁

评论(0)条

提示:请勿发布广告垃圾评论,否则封号处理!!

    猜你喜欢
    【MySQL】用户管理

    【MySQL】用户管理

     服务器/数据库  2个月前  2.18k

    我们推荐使用普通用户对数据的访问。而root作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了。

    Cursor Rules 让开发效率变成10倍速

    Cursor Rules 让开发效率变成10倍速

     服务器/数据库  2个月前  1.24k

    在AI与编程的交汇点上,awesome-cursorrules项目犹如一座灯塔,指引着开发者们驶向更高效、更智能的编程未来。无论你是经验丰富的老手,还是刚入行的新人,这个项目都能为你的编程之旅增添一抹亮色。这些规则文件就像是你私人定制的AI助手,能够根据你的项目需求和个人偏好,精确地调教AI的行为。突然间,你会发现AI不仅能理解Next.js的最佳实践,还能自动应用TypeScript的类型检查,甚至主动提供Tailwind CSS的类名建议。探索新的应用场景,推动AI辅助编程的边界。

    探索Django 5: 从零开始,打造你的第一个Web应用

    探索Django 5: 从零开始,打造你的第一个Web应用

     服务器/数据库  2个月前  1.16k

    Django 是一个开放源代码的 Web 应用程序框架,由 Python 写成。它遵循 MVT(Model-View-Template)的设计模式,旨在帮助开发者高效地构建复杂且功能丰富的 Web 应用程序。随着每个版本的升级,Django 不断演变,提供更多功能和改进,让开发变得更加便捷。《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体,是一本从零基础到精通Django Web企业级开发技术的实战指南《Django 5 Web应用开发实战》内容以。

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

     服务器/数据库  2个月前  1.09k

    mysql_secure_installation 是 MySQL 提供的一个安全脚本,用于提高数据库服务器的安全性

    【MySQL基础篇】概述及SQL指令:DDL及DML

    【MySQL基础篇】概述及SQL指令:DDL及DML

     服务器/数据库  2个月前  491

    数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。

    Redis中的哨兵(Sentinel)

    Redis中的哨兵(Sentinel)

     服务器/数据库  2个月前  316

    ​ 上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。