快速搭建SSM框架

1. 阶段一:基本框架搭建

1.1 创建maven工程

在这里插入图片描述

在这里插入图片描述

1.2 设置Maven为本地maven

在这里插入图片描述
在这里插入图片描述

1.3 指定打包方式为war

在pom.xml文件中
1. 设置打包方式为war
2. 添加springMVC依赖jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>edu.xja</groupId>
    <artifactId>SSM-student</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--1.设置打包方式为war方式-->
    <packaging>war</packaging>
    <!--3.添加项目所需依赖-->
    <dependencies>
        <!-- (1) Spring MVC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.3</version>
        </dependency>
 </dependencies>
</project>
编译打包
项目下自动添加web模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 配置工程结构

1.4.1 指定web.xml

指定web.xml位置
src/main/webapp/WEN-INF/web.xml

在这里插入图片描述
在这里插入图片描述

1.4.2 指定class文件输出路径

在这里插入图片描述

1.5 pom.xml中导入项目所需依赖jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>edu.xja</groupId>
    <artifactId>SSM-student</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--1.设置打包方式为war方式-->
    <packaging>war</packaging>
    <!--2. 设置支持JDK8-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


    <!--3.添加项目所需依赖-->
    <dependencies>
        <!-- (1) Spring MVC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.3</version>
        </dependency>

        <!-- (2)事务-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.3</version>
        </dependency>
        <!--(3)spring上下文-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.3</version>
        </dependency>

        <!--(4)spring使用数据源-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.3</version>
        </dependency>

        <!-- (5)aop -->
        <!--这两个包不属于Spring自身jar包,他们属于AspectJ技术-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.1</version>
        </dependency>

        <!--(6) MyBatis 核心包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>

        <!--(7)mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>

        <!--(8) spring 整合mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>
        <!--(9) 单元测试相关依赖-->
        <!--单元测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.9.0</version>
            <scope>test</scope>
        </dependency>

        <!--(10)spring框架测试-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.3</version>
            <scope>test</scope>
        </dependency>

        <!--(11) jsp jstl servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>


        <!--  (12) 分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.3.1</version>
        </dependency>

        <!--(13) 校验表单数据框架-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.3.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>

        <!-- (14) swagger依赖-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!--(15) json数据依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.5</version>
        </dependency>


        <!-- (16) lombok 自动生成POJO里方法 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

        <!--(17) 日志 logback + slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.32</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

1.6 创建项目目录

在这里插入图片描述
在这里插入图片描述

2. 阶段二:配置文件编写

2.1 编写jdbc.properties文件

项目需要连接数据库,需要在resources下编写jdbc.properties文件
#1. 驱动类全限定名
jdbc.driver=com.mysql.cj.jdbc.Driver
#2.数据库url
jdbc.url=jdbc:mysql://localhost:3306/student_course?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
#3. 数据库用户名
jdbc.username=root
#4. 用户密码
jdbc.password=zx200061、
#5. 初始化数据库连接数量
jdbc.initialSize=3
#6. 最大活动数量
jdbc.maxActive=10

2.2 配置springmvc.xml文件

在resources目录下编写springmvc.xml文件
主要内容
1. 上下文开启注解扫描,扫描控制器包
2. 上下文 向容器自动注册 
3.  添加视图解析器bean
4. 添加自定义异常处理类bean(MyCustomException1类自定义编写在exception包)
5. 添加表单数据验证器bean
6.  添加消息源Bean
7. swagger静态资源访问配置
8. 启动注解驱动 添加验证器属性 值为表单数据验证器
<?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"
       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">

    <!-- 1.上下文开启注解扫描,扫描控制器包-->
    <context:component-scan base-package="edu.xja.controller,edu.xja.config.controller"/>
    <!-- 2. 上下文 向容器自动注册 -->
    <context:annotation-config/>


    <!-- 3.添加视图解析器bean -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--4. 添加自定义异常处理类bean-->
    <bean class="edu.xja.exception.MyCustomException1"/>
    <!--    &lt;!&ndash;创建自定义异常处理对象&ndash;&gt;-->
    <!--    <bean class="edu.xja.exception.MyCustomException2"/>-->

    <!--5. 添加表单数据验证器bean -->
    <bean id="validator"
          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!--属性:校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
        <!--  属性 :验证消息源
        如果不加默认到 使用classpath下的 ValidationMessages.properties 验证消息源-->
        <property name="validationMessageSource" ref="messageSource"/>
    </bean>

    <!--6. 添加消息源Bean-->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!--属性:资源文件名-->
        <property name="basenames">
            <list>
                <!-- 在web环境中一定要定位到classpath 否则默认到当前web应用下找 -->
                <value>classpath:messages</value>
            </list>
        </property>
        <property name="useCodeAsDefaultMessage" value="false"/>
        <!--资源文件编码格式:utf-8-->
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>


    <!-- 8. swagger静态资源访问配置 -->
    <!-- 配置swagger资源不被拦截 -->
    <mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/"/>
    <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>

    <!--9. 启动注解驱动-->
    <mvc:annotation-driven validator="validator">
    </mvc:annotation-driven>
</beans>

2.2.1 自定义异常处理类1

实现HandlerExceptionResolver接口的异常处理类
package edu.xja.exception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 方式一:自定义异常处理类
 * 实现接口
 */
public class MyCustomException1 implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg",e.getMessage());
        mv.setViewName("error");
        return mv;
    }
}

2.2.2自定义异常处理类2

使用注解的异常处理类
1. 类上用注解@ControllerAdvice
2. 方法用注解@ExceptionHandler
package edu.xja.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

/**
 * 方式二:自定义异常处理类,使用注解
 */
@ControllerAdvice
public class MyCustomException2{

    /**
     * 使用异常处理器注解
     * @param e
     * @return
     */
    @ExceptionHandler
    public ModelAndView handlerError(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("error");
        mv.addObject("errorMsg",e.getMessage());
        return mv;
    }

}

2.2 配置spring上下文环境配置文件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: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">

    <!--扫描service包,-->
    <context:component-scan base-package="edu.xja.service,edu.xja.config.service"/>

</beans>

2.3 spring配置类SpringConfig

在config.service包下创建SpringConfig
1. 向IOC容器注入DataSource 数据源bean
2. 向IOC容器注入SqlSessionFactory 会话工厂bean
package edu.xja.config.service;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;

/**
 * spring配置类
 */
@org.springframework.context.annotation.Configuration
@PropertySource("classpath:jdbc.properties")
@MapperScan("edu.xja.dao") //只扫描
class SpringConfig {
    //属性
    @Value("${jdbc.driver}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    /**
     * 向容器添加数据源bean
     * @return
     */
    @Bean
    public DataSource dataSource(){
        //1. 实例化数据源驱动管理对象
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        //2. 为数据源驱动管理对象属性赋值
        //(1)驱动类名
        dataSource.setDriverClassName(driverClassName);
        //(2)数据源URL
        dataSource.setUrl(url);
        //(3)连接用户名
        dataSource.setUsername(username);
        //(4)用户密码
        dataSource.setPassword(password);

        //3. 返回数据源驱动管理对象
        return dataSource;
    }


    /**
     * session会话工厂
     * @param dataSource
     * @return
     */
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
       try{
           //1. 实例化session会话工厂SqlSessionFactoryBean
           SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
           //2. set属性
           //(1)set数据源
           sqlSessionFactoryBean.setDataSource(dataSource);
           //(2)set别名包
           sqlSessionFactoryBean.setTypeAliasesPackage("edu.xja.entity");
           //实例化路径匹配资源模式解析器
           PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
           //获取mapper资源
           Resource[] resources = resolver.getResources("classpath:mapper/*.xml");
           //(3)set 本地mapper资源
           sqlSessionFactoryBean.setMapperLocations(resources);
           //实例化配置类
           org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
           //为配置类设置下划线转驼峰为true
           configuration.setMapUnderscoreToCamelCase(true);
           //(4)set配置类
           sqlSessionFactoryBean.setConfiguration(configuration);
           //3. 返回SqlSessionFactory
           return sqlSessionFactoryBean.getObject();
       }catch(Exception e){
           e.printStackTrace();
       }
       return null;
    }

}

2.4 配置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">
    <!--1. 配置上下文参数,加载Spring配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <!--2. 添加字符编码过滤器,防止post请求出现中文乱码-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <!--指定转换的编码:UTF-8-->
            <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>


    <!-- 3. 配置SpringMVC核心前端控制器dispatcherServlet -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化参数:上下文路径  加载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>

2.5 配置logback.xml文件

resources目录下创建logback.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="60 seconds" debug="false">
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 在IDE中运行, 控制台输出全部日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        </filter>
        <encoder>
         <!-- 输出模式:时间戳 高亮 5级 线程黄色字体加粗   -->
            <pattern>%date{yyyy-MM-dd HH:mm} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger{36}) | %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 在IDE中运行, 不输出日志文件, 打包时level被portable-config-maven-plugin插件改为DEBUG, 输出日志文件 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <File>logs/logback.log</File>
        <!-- 按每小时滚动文件,如果一个小时内达到10M也会滚动文件, 滚动文件将会压缩成zip格式, 最多保留672个滚动文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/jx-film-%d{yyyy-MM-dd-HH}.%i.zip</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>672</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{MM:dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ErrorConsole" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 在IDE中运行, 控制台输出全部日志, 打包时level被portable-config-maven-plugin插件改为OFF, 控制台不输出日志 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger{36}) | %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 抓包里的日志 -->
    <logger name="edu.xja" level="INFO"/>
    <logger name="org.springframework.web" level="INFO"/>
    <logger name="org.springframework.core.env.PropertySourcesPropertyResolver" level="WARN"/>


    <!--日志级别-->
    <root level="INFO">
        <!--日志输出的目的地-->
        <appender-ref ref="Console"/>
        <appender-ref ref="RollingFile"/>
    </root>
</configuration>

3.阶段三:部署到Tomcat服务器

在这里插入图片描述

在这里插入图片描述

启动tomcat,启动成功表示能访问到资源

4. 阶段五:测试

4.1 创建实体类

package edu.xja.entity;

import org.hibernate.validator.constraints.Length;
import org.springframework.stereotype.Component;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

@Component
public class UserLoginVO implements Serializable {
    @NotNull(message = "用户id不能为空")
    private Integer id;
    @NotNull
    @Length(min=2,max = 8,message = "用户名不能少于2位不能大于8位")
    private String username;


    public UserLoginVO() {
    }

    public UserLoginVO(Integer id, @Length(min = 2, max = 8, message = "用户名不能少于2位不能大于8位") String username) {
        this.id = id;
        this.username = username;
    }



    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

4.2 创建controller

package edu.xja.controller;

import edu.xja.entity.UserLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * 测试controller
 */
@Controller
@Api("测试使用controller")
@Validated  //验证注解
public class HelloController {

    @GetMapping("hello")
    public ModelAndView hello(){
        ModelAndView view = new ModelAndView("hello");
        view.addObject("hello","hello");
        return  view;
    }

    @ApiOperation(value="根据主键获取学生信息",notes="输入视图,获取有错误信息属性的视图")
    @RequestMapping("/error")
    @ApiModelProperty(value = "模拟异常" ,required = true)
    public ModelAndView upload(@ApiParam("模型和视图") ModelAndView modelAndView) throws Exception {
        //模拟异常
        int i = 100/0;
        ModelAndView view = new ModelAndView("error");
        return  modelAndView;
    }

    /**
     * 指定验证参数UserLoginVO user
     * @param user
     * @param result
     * @return
     */
    @PostMapping("/login")
    public ModelAndView login(@Validated UserLoginVO user, BindingResult result){

        ModelAndView mv=new ModelAndView("success");
        if (result.hasErrors()) {
            mv.addObject("errorMsg",result.getFieldError("userName").getDefaultMessage());
            mv.setViewName("error");
            return mv;
        }
        System.out.println("登录成功");
//        mv.addObject("loginError","")
        return mv;
    }
}

4.3 创建jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2022/8/3
  Time: 8:25
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transition//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>添加用户</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login" method="post">
    用户id:<input type="text" name="id"><br>
    用户名:<input type="text" name="username"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    程序出现异常,异常信息如下:<br/>
    ${errorMsg}
</body>
</html>

4.3 开启tomcat,访问

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于简化Spring应用程序开发的框架。它提供了一套开箱即用的配置,可以快速搭建基于Spring的应用程序。SSM框架是指Spring + SpringMVC + MyBatis组合使用的一种开发框架。下面是关于如何使用Spring Boot搭建SSM框架的步骤: 1. 首先,我们需要创建一个Maven项目。可以通过在IDE中选择创建Maven项目的方式来创建一个新的Maven项目。 2. 在pom.xml文件中添加Spring Boot和SSM的相关依赖。在这里,我们需要引入spring-boot-starter-web,spring-boot-starter-data-jpa,mybatis-spring-boot-starter等依赖。 3. 创建一个Spring Boot的主类,使用@SpringBootApplication注解进行标记。这个类将作为整个应用的入口。 4. 创建一个控制器类,使用@RestController注解进行标记,并编写一些API接口方法。 5. 创建一个实体类,用于映射数据库中的表结构。 6. 创建一个DAO接口,使用@Mapper注解进行标记,并在方法上使用@Select、@Insert、@Update等注解编写SQL语句。 7. 创建一个Service类,使用@Service注解进行标记,并在类中注入DAO接口的实现。 8. 创建一个配置类,用于配置数据库连接等信息。 9. 在配置文件application.properties或application.yml中配置数据库连接信息。 10. 运行Spring Boot应用程序,可以通过访问定义的API接口来进行测试。 通过以上步骤,我们就可以使用Spring Boot搭建SSM框架Spring Boot提供了自动配置的功能,可以帮助我们快速集成SSM框架所需的组件,并且简化了开发过程。使用Spring Boot搭建SSM框架可以提高开发效率和代码质量,同时还能够实现更好的性能和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值