ssm项目整合,简单的用户管理系统

news2024/11/15 17:21:56

ssm项目整合,简单的用户管理系统

  • 项目概述
  • 项目搭建
    • 创建项目
      • 1.创建maven项目
      • 2.导入项目依赖及maven资源过滤设置
      • 3.添加web支持
      • 4.配置tomcat
      • 5.配置web发布依赖jar包
      • 6.数据库的表创建
      • 7.实体类创建
        • 7.1 lombok常用注解:
    • dao层
      • 1.daoMapper接口创建
      • 2.Mapper.xml配置文件
      • 3.mybatis-config.xml核心配置文件
      • 4.数据库连接配置文件
      • 5.spring-dao.xml配置文件
    • service层
      • 1.service接口创建
      • 2.service接口实现类创建
      • 3.spring-service.xml配置文件
    • controller层
      • controller类
      • spring-mvc.xml配置文件
    • spring整合文件
      • applicationContext.xml
    • web层|视图层
      • 1.web.xml配置文件
      • 2.视图层jsp页面
        • a.首页
        • b.用户列表页面
        • c.添加用户页面
        • d.更新用户页面
    • 启动服务器运行
  • 个人小结

项目概述

大致的把ssm基础知识都过了一遍,那么就来做一个ssm整合的小项目吧,练练手!
因为是练整合的流程,所以业务就是基础的CRUD啦。
一个用户管理系统,管理员可以对用户账号进行增删改查(你没听错,就这么简单!!!!)

项目搭建

创建项目

1.创建maven项目

打开idea,左上角选择file–>new–>project,选择maven,然后点击next
在这里插入图片描述
这里设定自己的项目名和groupid,然后finish即可。
在这里插入图片描述

2.导入项目依赖及maven资源过滤设置

在pom.xml中导入我们需要用的依赖和maven的静态资源过滤:

	<dependencies>
        <!--Junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!-- 数据库连接池 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.5</version>
        </dependency>
        <!--Servlet - JSP -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!--Spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
          <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <!--maven静态资源过滤-->
	<build>
    <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>

导入后,记得更新依赖包

3.添加web支持

点击项目文件夹,然后右键选择 add framework support,来添加web支持
在这里插入图片描述

4.配置tomcat

在idea的右上角的位置:
在这里插入图片描述
点击 edit configurations然后配置tomcat
在这里插入图片描述
然后会弹出下面这样的界面,点击加号,找到local tomcat
在这里插入图片描述
这里我使用的是tomcat9,然后端口号和tomcat名可以自行修改
在这里插入图片描述
选择 deployment,添加artfacts
在这里插入图片描述

5.配置web发布依赖jar包

点击左上角 file ,然后选择project structure,弹出窗口后选择artifacts,然后找到自己当前项目的artifacts,在其根目录下新建一个lib文件夹,然后右键选择add of…library files 将项目中的依赖全部放入lib文件夹,然后ok即可
在这里插入图片描述

6.数据库的表创建

在这里插入图片描述
初始数据添加:
在这里插入图片描述

7.实体类创建

新建一个包 com/gothic/sunset/pojo 然后新建User.java实体类

package com.gothic.sunset.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor  //有参构造
@NoArgsConstructor  //无参构造
public class User {

    private int id;  //id号
    private String userName;//用户名
    private String password;//密码
}

这里我使用了lombok,来自动注入,避免手写有参无参构造以及对应的getter和setter…

  		<!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>

7.1 lombok常用注解:

@Data:该注解定义在JavaBean上,给JavaBean产生getter(),setter(),无参构造器,tostring(),hashcode(),equals()

@NoArgsConstructor:产生无参构造器

@Getter:产生getter()

@Setter:产生setter()

@ToString:产生toString()

@RequiredArgsConstructor + @NonNull:可以用来定义有参构造器

@AllArgsConstructor:产生全属性的有参构造

dao层

1.daoMapper接口创建

在com/gothic/sunset/dao 下新建UserMapper.java 接口

package com.gothic.sunset.dao;

import com.gothic.sunset.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


public interface UserMapper {

    //添加用户
    public int addUser(User user);

    //删除用户  根据id
    public int delUser(@Param("id") int id);

    //更新用户信息  根据id
    public int updateUser(User user);

    //查询单个用户 根据id查
    public User findUserById(@Param("id") int id);

    //查询所有用户信息
    public List<User> selectAllUser();

    //根据用户名查询用户
    public List<User> findUserByName(@Param("userName") String userName);
}

2.Mapper.xml配置文件

在resources 目录下,新建 com/gothic/sunset/dao 目录,然后在这个包下新建UserMapper.xml映射文件

<?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">
<!--namespace用来绑定mapper接口-->
<mapper namespace="com.gothic.sunset.dao.UserMapper">


    <!-- public int addUser(User user);-->
    <insert id="addUser" parameterType="User">
        insert into
            (id,userName,password)
            values(#{userName},#{password})
    </insert>


    <!--public int delUser(@Param("id") int id);-->
    <delete id="delUser" parameterType="int">
        delete from user where id = #{id}
    </delete>

    <!--public int updateUser(User user,@Param("id") int id);-->
    <update id="updateUser" parameterType="User">
        update user
        set userName = #{userName},
            password =#{password}
        where id =#{id}
    </update>

    <!--public User findUserById(@Param("id") int id);-->
    <select id="findUserById" resultType="User">
        select id,userName,password from user where id = #{id}
    </select>

    <!--public List<User> selectAllUser();-->
    <select id="selectAllUser" resultType="User">
        select
               id,userName,password
        from user
    </select>
	
	<!--public List<User> findUserByName(@Param("userName") String userName);-->
    <select id="findUserByName" resultType="User">
        select
            id,userName,password
        from user
        where userName = #{userName}
    </select>
</mapper>

3.mybatis-config.xml核心配置文件

在resources目录下,新建mybatis-config.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <settings>
        <!--将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>


    <!--设定实体类别名-->
    <typeAliases>
        <package name="com.gothic.sunset.pojo"/>
    </typeAliases>

    <!--引入映射文件-->
    <mappers>
        <package name="com/gothic/sunset/dao/UserMapper.xml"/>
    </mappers>
</configuration>

4.数据库连接配置文件

在resources 目录下,新建jdbc.properties文件,用于存放数据库连接用户名密码验证…

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

5.spring-dao.xml配置文件

在resources目录下,新建spring-dao.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: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
       https://www.springframework.org/schema/context/spring-context.xsd">


    <!--配置数据源-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!--cp30连接池   自动化操作(自动的加载配置文件 并且设置到对象里面)-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据库连接池   注意数据库连接池是引用,别写成value-->
        <property name="dataSource" ref="dataSource"/>
        <!--绑定核心配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- 配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="com.gothic.sunset.dao"/>
    </bean>
</beans>

这里如果sqlSessionFactory注入数据库连接池,中写成了value=“dataSource” 这样的话,就会出现一个异常
org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'javax.sql.DataSource' for property 'dataSource'.

service层

1.service接口创建

新建包 com/gothic/sunset/service 在这个包里新建UserService.java接口

package com.gothic.sunset.service;

import com.gothic.sunset.pojo.User;


import java.util.List;

public interface UserService {

    //添加用户
    public int addUser(User user);

    //删除用户  根据id
    public int delUser( int id);

    //更新用户信息  根据id
    public int updateUser(User user);

    //查询单个用户 根据id查
    public User findUserById(int id);

    //查询所有用户信息
    public List<User> selectAllUser();

    //根据用户名查询用户
    public List<User> findUserByName( String userName);
}


2.service接口实现类创建

与UserService.java接口在同一目录下,新建UserServiceImpl.java接口实现类

package com.gothic.sunset.service;

import com.gothic.sunset.dao.UserMapper;
import com.gothic.sunset.pojo.User;
import org.springframework.stereotype.Service;


import java.util.List;


@Service
public class UserServiceImpl implements UserService{

    private UserMapper userMapper;

    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public int addUser(User user) {
        return userMapper.addUser(user);
    }

    @Override
    public int delUser(int id) {
        return userMapper.delUser(id);
    }

    @Override
    public int updateUser(User user) {
        return userMapper.updateUser(user);
    }

    @Override
    public User findUserById(int id) {
        return userMapper.findUserById(id);
    }

    @Override
    public List<User> selectAllUser() {
        return userMapper.selectAllUser();
    }

    @Override
    public List<User> findUserByName(String userName) {
        return userMapper.findUserByName(userName);
    }
}


这里需要说明的是,可以使用自动装配bean结合注解@AutuWired的方式去做,我这里(刚回忆整合)就先用手动settter注入的方式。

3.spring-service.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: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 https://www.springframework.org/schema/context/spring-context.xsd">

    <!--
        service层 最主要的是 事务管理
    -->

    <!--service层扫描包,将类交由ioc容器来管理-->
    <context:component-scan base-package="com.gothic.sunset.service"/>

    <!--因为这里我们是使用xml配置bean的方式,所以需要手动将bean注入-->
    <bean id="userServiceImpl" class="com.gothic.sunset.service.UserServiceImpl">
        <!--因为这里,我们service层使用了dao层的类。所以需要将dao层的类单独注入-->
        <property name="userMapper" ref="userMapper"/>
    </bean>

    <!--配置事务管理器-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据库连接池-->
        <property name="dataSource" ref="dataSource"/>
    </bean>


</beans>

然后这里的话,事务横切aop,这个小例子还没使用,so…就没有配置,也没有导入aspectj这个依赖包。

controller层

controller类

在 com/gothic/sunset/controller包下,新建UserController.java类

package com.gothic.sunset.controller;

import com.gothic.sunset.pojo.User;
import com.gothic.sunset.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;


@Controller
@RequestMapping("/user")
public class UserController {

    // controller层调用service层,service层调用dao层 mvc架构,我就不多说了
   //@Qualifier注解 别名

    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;



    @RequestMapping("/allUser")
    public String  selectAllUser(Model model){
        //使用业务层调用dao层查询出数据,通过model对象渲染到前台页面
        List<User> userList = userService.selectAllUser();
        model.addAttribute(userList);
        return "allUser";
    }


    //添加书籍,首先需要跳转到添加用户的表单页面
    @RequestMapping("/toAddUser")
    public String toAddUser(){
        //接收到前端请求后,跳到添加用户表单页面
        return "addUser";
    }

    //接收添加用户表单的数据,进行正式的添加用户,添加完成后,重定向到所有用户页面
    @RequestMapping("addUser")
    public String addUser(User user){
        userService.addUser(user);
        System.out.println(user.toString());
        return "redirect:/user/allUser";
    }

    //更新用户,与添加用户流程基本一样
    @RequestMapping("toUpdateUser")
    public String toUpdateUser(Model model,int id){
        User user = userService.findUserById(id);
        model.addAttribute("user",user);
        //跳转到用户修改页面,同时将要修改的用户的信息传递过去
        return "updateUser";
    }

    //正式更新用户
    @RequestMapping("updateUser")
    public String updateUser(User user){
        System.out.println(user.toString());
        userService.updateUser(user);
        System.out.println(user.getId());
        return "redirect:/user/allUser";
    }


    //删除就直接删除用户即可
    @RequestMapping("delUser")
    public String delUser(int id){
        userService.delUser(id);
        return "redirect:/user/allUser";
    }


    //查询用户 根据用户名查询
    @RequestMapping("/queryUser")
    public  String queryUser(String userName,Model model){
        List<User> userList = userService.findUserByName(userName);
        model.addAttribute(userList);
        return "allUser";
    }
}

spring-mvc.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: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 http://www.springframework.org/schema/cache/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--controller层扫描包-->
    <context:component-scan base-package="com.gothic.sunset.controller"/>

    <!--mvc注解驱动 -->
    <mvc:annotation-driven/>

    <!--mvc静态资源过滤-->
    <mvc:default-servlet-handler/>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

spring整合文件

applicationContext.xml

将三个spring配置文件,都引入到一个新建的applicationContext.xml(Resources目录下新建)中。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <import resource="classpath:spring-dao.xml"/>
    <import resource="classpath:spring-service.xml"/>
    <import resource="classpath:spring-mvc.xml"/>
</beans>

web层|视图层

1.web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="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">


    <!--配置前端控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--绑定springmvc配置文件,这里绑定配置的是最终的整合的spring文件,别出错了-->
            <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>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <!--过滤器配置-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--Session过期时间-->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>


</web-app>

这里需要注意的是,前端控制器里面,最终绑定的是整合总的配置文件applicationContext.xml,别配错了,否则就会告诉你找不到某些bean,其实配错了也能根据提示来修改。

2.视图层jsp页面

a.首页

index.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: gothi
  Date: 2022/12/3
  Time: 10:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
    <style type="text/css">
      a {
        text-decoration: none;
        color: black;
        font-size: 18px;
      }
      h3 {
        width: 180px;
        height: 38px;
        margin: 100px auto;
        text-align: center;
        line-height: 38px;
        background: deepskyblue;
        border-radius: 4px;
      }
    </style>
  </head>
  <body>

    <h3><a href="${pageContext.request.contextPath}/user/allUser">点击进入</a></h3>
  </body>
</html>

b.用户列表页面

在/WEB-INF/jsp/目录下新建jsp页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: gothi
  Date: 2022/12/3
  Time: 15:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查询所有用户</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>用户列表 —— 显示所有用户</small>
                </h1>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-4 column">
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/user/toAddUser">新增</a>
        </div>
        <div class="col-md-4 column">
            <a class="btn btn-primary" href="${pageContext.request.contextPath}/user/allUser">显示所有用户</a>
        </div>
        <div class="col-md-4 column">
            <form class="form-inline" action="${pageContext.request.contextPath}/user/queryUser" method="post" style="float: right">
                <input type="text" name="userName" class="form-control" placeholder="输入用户名" required>
                <input type="submit" value="查询" class="btn btn-primary">
            </form>
        </div>
    </div>
    <div class="row clearfix">
        <div class="col-md-12 column">
            <table class="table table-hover table-striped">
                <thead>
                <tr>
                    <th>用户id</th>
                    <th>用户名</th>
                    <th>密码</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>
                <c:forEach var="user" items="${requestScope.get('userList')}">
                    <tr>
                        <td>${user.id}</td>
                        <td>${user.userName}</td>
                        <td>${user.password}</td>
                        <td>
                            <a href="${pageContext.request.contextPath}/user/toUpdateUser?id=${user.getId()}">更改</a> |
                            <a href="${pageContext.request.contextPath}/user/delUser/?id=${user.getId()}">删除</a>
                        </td>
                    </tr>
                </c:forEach>
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

c.添加用户页面

addUser.jsp

<%--
  Created by IntelliJ IDEA.
  User: gothi
  Date: 2022/12/3
  Time: 19:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户添加</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>用户添加</small>
                </h1>
            </div>
        </div>
    </div>
    <form action="${pageContext.request.contextPath}/user/addUser" method="post">
        用户名:<input type="text" name="userName"><br><br><br>&nbsp;&nbsp;码:<input type="text" name="password"><br><br><br>
        <input type="submit" value="添加">
    </form>
</div>
</body>
</html>

d.更新用户页面

updateUser.jsp

<%--
  Created by IntelliJ IDEA.
  User: gothi
  Date: 2022/12/3
  Time: 19:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户更新</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
    <div class="row clearfix">
        <div class="col-md-12 column">
            <div class="page-header">
                <h1>
                    <small>修改用户信息</small>
                </h1>
            </div>
        </div>
    </div>
    <form action="${pageContext.request.contextPath}/user/updateUser" method="post">
        <input type="hidden" name="id" value="${user.id}"/>
        用户名:<input type="text" name="userName" value="${user.userName}"/>&nbsp;&nbsp;码:<input type="text" name="password" value="${user.password}"/>
        <input type="submit" value="提交"/>
    </form>
</div>
</body>
</html>

启动服务器运行

首页:
在这里插入图片描述

用户列表页:
在这里插入图片描述

添加用户页面:

在这里插入图片描述
点击添加后:
在这里插入图片描述
这里是因为主键自增的,之前测试了一些数据,所以会显示id号为10.
修改用户页面:
在这里插入图片描述

修改测试:
在这里插入图片描述
根据用户名查询:
在这里插入图片描述
在这里插入图片描述
这里相同的用户名,会查出多条用户数据,因为我这里只有一条名为大漠孤烟的用户名的数据,所以只显示一条。


个人小结

ssm果然配置真繁琐,不过如果一层一层来的话,也不算太复杂,多练习!经过大致10多天的时间,二刷结束,接下来就是做一些ssm的练手项目,熟悉一下流程了。

然后,因为时间匆忙写的略微有点简单,而且前台比较丑,等过段时间,做一个真正的ssm项目,并且做完以后准备学习springboot,和redis…最后再把前台的相关技术也认真学学!!!!

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

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

相关文章

物联网iot全称

物联网iot的发展 麻省理工学院Ashton教授1999年研究RFID时最早提出物联网(Internet of Things&#xff0c; IoT)这个概念。Sun公司在2003年发表文章介绍物联网的基本工作流程&#xff0c;并提出解决方案。 IoT的意思是物联网&#xff0c;全称为Internet of Things。是指通过射…

狂神说Spring学习笔记

一、Spring 1.1 简介 Spring&#xff1a;春天------>给软件行业带来了春天&#xff01;2002&#xff0c;首次推出了Spring框架的雏形&#xff1a;interface21框架&#xff01;Spring框架即以interface21框架为基础&#xff0c;经过重新设计&#xff0c;并不断丰富其内涵&a…

metaRTC新增SRS的WebRTC over TCP和turn的TCP支持

概述 在很多网络条件下&#xff0c;防火墙会阻止UDP传输&#xff0c;因此webRTC TCP的支持就很重要&#xff0c;metaRTC提供了SFU和P2P的支持。 SFU支持SRS的webRTC over TCP&#xff0c;P2P支持turn的TCP。 源代码下载 GitHub - metartc/metaRTC: A cross-platform WebRTC…

[附源码]计算机毕业设计基于SpringBoot的小说阅读系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

8.softmax回归

1. 关于回归和多类分类 分类问题从回归的单输出变成了多输出&#xff0c;这个多输出的个数类别的个数 置信度&#xff1a;置信度一词来自统计学&#xff0c;而统计学的本质是&#xff0c;用抽样的数据去估计整体的真实分布。例如&#xff0c;样本均值估计整体均值&#xff1b;还…

基于WEB的在线选课系统(asp.net)

目  录 摘要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 目的和意义 1 1.3 系统设计思想 2 第2章 可行性分析 3 2.1 管理可行性 3 2.2 经济可行性 4 2.2.1 系统初期投资 4 2.2.2 系统货币的时间价值 4 2.2.3 投资回收期 5 2.2.4 纯收入 5 2.3 技术可行性 5 2…

Java8从入门到精通 笔记

Lambda表达式 匿名内部类 我们可以用匿名内部类来比较两个Integer参数的大小 Comparator<Integer> com new Comparator<Integer>() {Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1, o2);} };TreeSet<Integer> treeSet…

接口幂-全面详解(学习总结---从入门到深化)

目录 接口设计与重试机制引发的问题 什么是幂等性 为什么会产生接口幂等性问题 幂等性接口设计 如何保证接口幂等性 接口设计与重试机制引发的问题演示_项目搭建 创建项目 选择框架 修改SpringBoot版本 创建用户表 代码生成 引入依赖 编写代码生成类 接口设计与重试机制引…

Scaling Up Your Kernels to 31x31: Revisiting Large Kernel Design in CNNs笔记

论文地址&#xff1a;https://arxiv.org/pdf/2203.06717.pdf 代码地址&#xff1a;https://github.com/MegEngine/RepLKNet 目录 论文地址&#xff1a;https://arxiv.org/pdf/2203.06717.pdf 代码地址&#xff1a;https://github.com/MegEngine/RepLKNet Abstract 1. Introd…

MySQL架构MMM

官网地址&#xff1a; Multi-Master Replication Manager for MySQL [MMM for MySQL Wiki] 简介 MMM&#xff08;Master-Master replication manager for MySQL&#xff09;是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发&#xff0c;主要用来监控和…

Kafka - 14 Kafka分区的分配策略及再平衡 | Range | RoundRobin | Sticky | CooperativeSticky

文章目录1. 分区的分配以及再平衡2. Range 分区分配以及再平衡3. RoundRobin 分区分配以及再平衡4. Sticky 分区分配以及再平衡1. 分区的分配以及再平衡 一个consumer group中有多个consumer组成&#xff0c;一个 topic有多个partition组成&#xff0c;现在的问题是&#xff0…

[Windows驱动开发] BlackBone介绍

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ 名词解释2️⃣ 介绍3️⃣ 库包含内容4️⃣ 编译问题总结常见问题fatal error LNK1104非类型模板参数中的 "auto" &#x1f4d6; 参考资料&#x1f6eb; 导读 需求 作为Windows开发人员&#xff0c;经常遇到枚举进程、…

dojo中的类

使用arcgis api for js 4.*进行地图的web前端开发&#xff0c;就不得不与dojo打交道。dojo是一个框架&#xff0c;自成体系&#xff0c;比如它对类的支持&#xff0c;有自己的一套。众所周知&#xff0c;js不是面向对象语言&#xff0c;没有类这一说&#xff0c;都是用函数来模…

人工智能轨道交通行业周刊-第25期(2022.11.28-12.4)

本期关键词&#xff1a;液体安检仪、智慧车站、大机作业、动车打温、实时人体姿态估计、图像压缩 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟V…

Java项目:SSM医院挂号预约管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员与医生两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,添加科室,科室增删改查,医生管理,查看预约信息,…

Redis03:Redis基础知识以及数据类型

Redis基础知识以及数据类型基础知识Redis-key基本数据类型String(字符串)三种特殊的数据类型geospatialhyperloglogbitmaps基础知识 redis默认有16个数据库&#xff0c;默认使用的时第0个&#xff0c;可以使用select进行切换数据库 清除当前数据库 清除全部数据库的内容 Red…

Cmake升级与软链接

记录cmake升级版本的记录&#xff0c;主要参考文章&#xff1a;Unbuntu安装Ros后Cmake变成3.10_向日葵骑士Faraday的博客-CSDN博客 cmake升级、更新&#xff08;ubuntu18.04&#xff09;_Doctor_Wu_的博客-CSDN博客_cmake升级 设计安装ros后cmake版本出现问题&#xff0c;且卸…

[附源码]Python计算机毕业设计Django基于Java的员工管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Windows 文件共享功能使用方法,局域网多台电脑之间传送文件

设想一下&#xff0c;家里或者公司有多台电脑&#xff0c;连接同一个Wifi&#xff0c;也就是处于同一个局域网中。 在不能使用微信、网盘的文件传输功能的情况下&#xff0c;这多台电脑之间&#xff0c;就只能用U盘传送数据吗&#xff1f; 不。Windows系统中已经提供了文件共享…

ZMQ之克隆模式的可靠性

克隆服务器的可靠性 克隆模型1至5相对比较简单&#xff0c;下面我们会探讨一个非常复杂的模型。可以发现&#xff0c;为了构建可靠的消息队列&#xff0c;我们需要花费非常多的精力。所以我们经常会问&#xff1a;有必要这么做吗&#xff1f;如果说你能够接受可靠性不够高的、或…