简单搭建 SSM 项目实现登录

目录

    • 项目简介
    • 项目层级介绍,导入依赖
    • 添加配置
    • 业务逻辑实现
    • 前端 JSP 页面实现

项目简介

SSM(Spring、Spring MVC、MyBatis)框架,是一种 Java Web 应用程序开发框架的集合,可以帮助开发者快速搭建 Java Web 应用程序。想要使用 SSM 框架搭建一个简单的登录框架,可以有以下步骤实现:

  1. 创建项目,并引入基础依赖包。
  2. 搭建项目层级目录。
  3. 添加 SSM 基础配置信息。
  4. 后端登录业务逻辑代码实现。
  5. 前端 JSP 页面代码逻辑实现。
  6. 启动项目,访问登录页面,实现登录操作,登录成功则重定向到首页,如果登录失败,则重定向到登录页面。

项目层级介绍,导入依赖

下面是根据以上步骤创建的一个简单的登录框架实现,在代码实现前,请确保本地创建好 SSM 框架,并且目录层级已创建完成,示例代码中的层级结构包括控制层(controller)、业务层(service、serviceImpl)、实体对象(entity)、持久层(dao、mapper)。具体的代码示例如下:

  1. 引入依赖
    <!--SpringMVC的jar包-->
    <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.2.RELEASE</version>
    </dependency>
    <!--mysql连接的jar包-->
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version>
    </dependency>
    <!-- SpringJDBC -->
    <!-- 注意:与当前项目使用的其它spring依赖保持相同的版本号 -->
    <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.2.RELEASE</version>
    </dependency>
    <!--数据库连接池dbcp的jar包-->
    <dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version>
    </dependency>
    <!--MyBatis的jar包-->
    <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version>
    </dependency>
    <!--Spring整合MyBatis的jar包-->
    <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.3</version>
    </dependency>
    <!--测试包-->
    <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
    </dependency>
    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.0</version><scope>provided</scope>
    </dependency>
    
    以上是 SSM 项目需要添加的部分依赖,可根据实际需求修改添加。

添加配置

  1. 添加配置信息
    • applicationContext.xml应用上下文配置:
    <?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:util="http://www.springframework.org/schema/util"xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 自动扫描,扫描包路径可根据实际项目包路径修改 --><context:component-scan base-package="com.ssm.dao"></context:component-scan><context:component-scan base-package="com.ssm.service"></context:component-scan><context:component-scan base-package="com.ssm.service.impl"></context:component-scan>    <util:properties id="properties" location="classpath:jdbc.properties"/><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="url" value="#{properties.url}"/><property name="driverClassName" value="#{properties.driver}" /><property name="username" value="#{properties.username}" /><property name="password" value="#{properties.password}" /><property name="initialSize" value="#{properties.initialSize}" /><property name="maxActive" value="#{properties.maxActive}" /></bean><!-- 配置MapperScannerConfigurer --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 配置接口文件位置 --><property name="basePackage" value="mapper" /></bean><!-- 配置SqlSessionFactoryBean,可根据实际需求修改 --><bean class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 配置XML文件在哪里 --><property name="mapperLocations" value="classpath:mappers/*.xml" /><!-- 配置使用哪个数据源连接数据库 --><property name="dataSource" ref="dataSource" /></bean><!-- spring自动查找其下的类,可根据实际需求修改 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.ssm.dao"></property></bean>
    </beans>
    
    • springmvc.xml SSM 项目相关组件和配置
    <?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--配置包扫描,扫描到加注解的类自动创建bean组件--><context:component-scan base-package="com.ssm.controller"/><!-- 2.配置映射处理和适配器--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/><!-- 3.视图的解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean>
    </beans>
    
    • jdbc.properties数据库配置文件
    # 数据库连接地址
    url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    # 数据库连接驱动
    driver=com.mysql.cj.jdbc.Driver
    # 数据库连接账号
    username=username
    # 数据库连接密码
    password=password
    # 连接池的初始大小
    initialSize=2
    # 连接池的最大活动连接数
    maxActive=10
    
    以上配置是数据库的连接信息,包括数据库账号、密码、连接驱动等信息。
    • web.xml配置
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>Archetype Created Web Application</display-name><!--配置过滤器,解决中文乱码 --><filter><filter-name>characterEncodingFilter</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></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--配置spring监听器,默认只加载WEB-INF文件下面的applicationContext.xml配置文件 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--改变默认配置文件路径 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!--前端控制器 --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--servlet加载springmvc配置文件  --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
    </web-app>
    

业务逻辑实现

  1. 后端业务代码实现
    • 控制层代码实现
    import com.ssm.entity.User;
    import com.ssm.service.UserService;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;@Controller
    public class UserController {@ResourceUserService userService;@ResponseBody@RequestMapping(value = "/login", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")public String login(User user){List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();try {Map<String, Object> map = userService.login(user);list.add(map);return "登录成功!";} catch (Exception e) {e.printStackTrace();return "登录失败!";}}
    }
    
    • 业务层代码实现
      业务层接口代码:
    import com.ssm.entity.User;import java.util.Map;public interface UserService {public Map<String, Object> login(User user);
    }
    
    业务层接口实现代码:
    import com.ssm.dao.UserDao;
    import com.ssm.entity.User;
    import com.ssm.service.UserService;
    import org.springframework.stereotype.Service;import javax.annotation.Resource;
    import java.util.HashMap;
    import java.util.Map;@Service
    public class UserServiceImpl implements UserService {@ResourceUserDao userDao;@Overridepublic Map<String, Object> login(User user) {Map<String, Object> map = new HashMap<String, Object>();map.put("data", userDao.login(user));return map;}
    }
    
    • 实体对象代码实现
    import lombok.Data;
    import java.io.Serializable;@Data
    public class User implements Serializable {private static final long serialVersionUID = 1L;public int id;public String userNo;public String userName;public String pwd;public String sex;public int age;public String job;public String phone;@Overridepublic String toString() {return "User [id=" + id + ", userNo=" + userNo + ", userName="+ userName + ", pwd=" + pwd+ ", sex=" + sex + ", age=" + age + ", job=" + job + ", phone="+ phone + "]";}
    }
    
    • 持久层代码实现
      dao 层接口实现:
    import com.ssm.entity.User;
    public interface UserDao {public User login(User user);
    }
    
    mapper 层代码实现:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.ssm.dao.UserDao"><resultMap type="com.ssm.entity.User" id="UserResult"><id property="id" column="id"></id><result property="userName" column="user_name"></result><result property="pwd" column="password"></result></resultMap><select id="login" parameterType="com.ssm.entity.User" resultMap="UserResult">select * from user where user_name=#{userName} and password=#{pwd}</select>
    </mapper>
    

前端 JSP 页面实现

  1. 前端 JSP 页面实现
    • login.jsp页面
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>用户登录页面</title></head><body><form id="loginForm" action="requestParam.jsp" method="post">用户名:<input type="text" name="userName" value="${userName}"/><br/>密码:<input type="password" name="pwd" value="${pwd}"/><br/><input type="submit" value="登录"/><br/><font color="red">${errorMsg}</font></form></body>
    </html>
    
    • requestParam.jsp登录页面发送请求页面
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="com.ssm.entity.User" %>
    <%@ page import="java.io.OutputStream" %>
    <%@ page import="java.io.OutputStreamWriter" %>
    <%@ page import="com.google.gson.Gson" %>
    <%@ page import="java.net.URLEncoder" %>
    <%@ page import="java.net.HttpURLConnection" %>
    <%@ page import="java.io.IOException" %><%// 获取表单提交的参数User user = new User();user.setUserName(request.getParameter("userName"));user.setPwd(request.getParameter("pwd"));// 构造请求参数String requestData = "myParams=" + URLEncoder.encode(new Gson().toJson(user), "UTF-8");// 请求的URLString requestUrl = "http://yourProjectPath/login";OutputStreamWriter outWriter = null;try {// 创建连接HttpURLConnection connection = (HttpURLConnection) new java.net.URL(requestUrl).openConnection();// 设置请求方法为POSTconnection.setRequestMethod("POST");// 设置请求头connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 发送请求参数connection.setDoOutput(true);OutputStream outputStream = connection.getOutputStream();outputStream.write(requestData.getBytes("UTF-8"));outputStream.flush();outputStream.close();// 获取响应码int responseCode = connection.getResponseCode();// 判断请求是否成功if (responseCode == HttpURLConnection.HTTP_OK) {// 请求成功,重定向到指定页面response.sendRedirect("index.jsp");} else {// 请求失败,重定向到登录页面重新登录response.sendRedirect("login.jsp");}} catch (IOException e) {e.printStackTrace();}
    %>
    
    • index.jsp页面
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>首页面</title>
    </head>
    <body><div><h1>登录成功!</h1></div>
    </body>
    </html>
    

以上示例使用 SSM 搭建了一个简单的登录实现,需要注意的是,Java Web 项目需要依赖 Tomcat 环境运行,所以需要本地安装 Tomcat 用于服务运行。

请注意:

  1. 以上示例只是一个简单的登录实现,没有做复杂的业务逻辑实现,密码都是明文实现,并没有做加密处理,在实际使用中请根据实际需求进行修改。
  2. 示例中的框架层级是示例配置,在实际使用中可根据实际需求进行修改。
  3. 示例中的配置文件、数据库连接信息都是本地环境实现,实际使用中可根据实际环境做适配修改。
  4. 请根据实际项目地址将http://yourProjectPath/login修改为实际的项目登录接口地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/590294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React16源码: Suspense与lazy源码实现

Suspense 与 lazy 1 &#xff09;概述 Suspense 是在 react16.6 提供的新 feature用于加载的缓冲的内置组件 2 &#xff09;示例程序 lazy.js // lazy.js import React from react export default () > <p>Lazy Comp</p>主程序 import React, { Suspense, …

ARM AArch64的虚拟化(virtualization)详解(上)

目录 一、概述 开始之前 二、虚拟化介绍 为什么虚拟化很重要

用队列实现栈(JAVA)

仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() …

【MySQL】查看表的信息相关命令

文章目录 【MySQL】查看表的信息相关命令查看表的信息相关命令例 【免责声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【MySQL】查看表的信息相关命令 在MySQL中&#xff0c;可以使用以下语句来查看表的信…

python实现Ethernet/IP协议的客户端(二)

Ethernet/IP是一种工业自动化领域中常用的网络通信协议&#xff0c;它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一&#xff0c;Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端&#xff0c;可…

【Linux】socket基础API

目录 1. 创建socket&#xff08;TCP/UDP&#xff0c;客户端服务器&#xff09; 1.1 第一个参数——domain 1.2 第二个参数——type 1.3 第三个参数——protocol 2. 绑定socket地址&#xff08;TCP/UDP&#xff0c;服务器&#xff09; 2.1 字节序及转换函数 2.2 IP地址及…

消融实验(ablation study)——全网最全解读

消融实验&#xff08;ablation study&#xff09; 是什么优势与劣势案例总结 是什么 消融实验是一种科学研究方法&#xff0c;用于确定一个条件或参数对结果的影响程度。当研究者提出了一个新的方案或方法时&#xff0c;消融实验通过逐一控制一个条件或参数&#xff0c;来观察…

6个火爆全网的AI开源项目,用上月10万+

标题月10万可能说的有点夸张和含糊&#xff0c;10万具体指的是你可以利用这些开源项目实现&#xff1a; 访问量10万 收入10万 用户10万 …… 开源项目只是免费的工具&#xff0c;具体怎么实现还需要你根据自己需求去深入运营。这里只是给你推荐一些比较热门的开源项目&…

基于QT开发的温室气体数据记录软件

1、概述 温室气体分析仪数据记录软件用于实现温室气体分析仪数据的获取与存储&#xff0c;阀箱数据的获取与存储、冷阱数据的获取与存储、采样单元数据的获取与存储、阀箱和采样单元的远程操作以及系统功能的管理。其主操作界面如下&#xff1a; 上述软件界面分为2各区域&…

用html,js和layui写一个简单的点击打怪小游戏

介绍&#xff1a; 一个简单的打怪小游戏&#xff0c;点击开始游戏后&#xff0c;出现攻击按钮&#xff0c;击败怪物后可以选择继续下一关和结束游戏。 继续下一个怪兽的血量会增加5点&#xff0c;攻击按钮会随机变色。 效果图&#xff1a; html代码&#xff1a; <!DOCTYPE…

【仅供测试】

https://microsoftedge.microsoft.com/addons/detail/%E7%AF%A1%E6%94%B9%E7%8C%B4/iikmkjmpaadaobahmlepeloendndfphd 测试网站&#xff1a; https://www.alipan.com/s/tJ5uzFvp2aF // UserScript // name 阿里云盘助手 // namespace http://tampermonkey.net/ // …

Linux操作系统—进程和服务管理

1. 查看网络连接信息&#xff1a; - 使用netstat和ss命令查看系统的网络连接信息。 # 示例&#xff1a;查看网络连接信息 netstat -an | grep ESTABLISHED 2. 查看进程的环境变量&#xff1a; - 使用/proc目录下的environ文件查看进程的环境变量。 # 示例&#xff1a;查看进程…

一次性解决 DL-FWI 论文题目问题

摘要: 小组做同一方向研究时, 面临题目容易冲突的问题. 本文分析一篇 DL-FWI 涉及的几个方面, 以此来完全解决论文命名问题。 1. 反演结果 反演结果可以按几种方式划分. 1.1 数据的维度 1.1.1 1D 反演的结果是 1D, 其实容易有较好的普适性. 相应的输入, 一般是共中心点道集…

每天刷两条道题——第三天

1.1两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09; 输入&#xff1a;[1,2,3,4] 输出&#xff1a;[2,1,4,3…

路由懒加载及路由参数

路由懒加载 叙述&#xff1a;路由的懒加载是一种优化技术&#xff0c;用于在需要时按需加载路由组件&#xff0c;而不是在应用程序初始化时一次性加载所有路由组件。 routes: [{path: /login,// 路由懒加载component: () > import(/views/LoginComp),// 命名路由name: log…

QDialog

属性方法 样式表 background-color: qlineargradient(spread:reflect, x1:0.999896, y1:0.494136, x2:1, y2:1, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255));border: 1px groove rgb(232, 232, 232);border-radius: 20px; QDialog 的常用方法&#xff1a; e…

3.5.3 伪操作

在C语言中&#xff0c;为了编程方便&#xff0c;编译器会定义一系列与处理命令&#xff0c;并用#来标识&#xff0c;如#include&#xff0c;#define&#xff0c;#if&#xff0c;#else&#xff0c;#end等。这些预处理命令并不是真正的C语言关键字&#xff0c;而是为了编程方便&a…

前端 js 基础(1)

js 结果输出 &#xff08;点击按钮修改文字 &#xff09; <!DOCTYPE html> <html> <head></head><body><h2>Head 中的 JavaScript</h2><p id"demo">一个段落。</p><button type"button" onclic…

基于PHP的校园代购商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园代购商城系统 一 介绍 此校园代购商城系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 …

2023/12/30 c++ work

定义一个Person类&#xff0c;私有成员int age&#xff0c;string &name&#xff0c;定义一个Stu类&#xff0c;包含私有成员double *score&#xff0c;写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数&#xff0c;完成对Person的运算符重载(算术运算符、条件运算…