如何将Springboot改为SSM项目【基于前后端不分离】

文章背景:接单时,发现同学论文写的ssm但是买的项目是Springboot的,怕被老师diao所以请我进行项目转换。

一:项目转换后的展示

1、展示springboot项目的结构

2、展示修改后的SSM项目结构

二:开始项目的转换

        1、使用IDEA创建SSM项目架子

参考这位博主写的博客即可:idea创建springmvc项目-优快云博客

        2、将webapp中的内容进行拷贝至新SSM架子中的webapp目录下如图

3、同理将后端Java代码也进行copy,这里不做赘述

4、配置好tomcat后,进行tomcat启动

附加:若tomcat日志出现乱码

自行参考这篇博客:一文告诉你如何解决Tomcat乱码问题(很详细!)_Tomcat _脚本之家

三、启动后项目发起请求出现乱码的情况

        1:参考博客:java 后端接收数据为中文乱码怎么办? - 知乎

        2:检查配置文件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">

  <!--    拓展配置方式(推荐)-->
  <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
    <init-param>
      <!-- contextConfigLocation为固定值 -->
      <param-name>contextConfigLocation</param-name>
      <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
      <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <!--
         作为框架的核心组件,在启动过程中有大量的初始化操作要做
        而这些操作放在第一次请求时才执行会严重影响访问速度
        因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时
    -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <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>
    <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>

        3:检查src/main/resources中的applicationContext.xml内容

        ps:mybatis的自增id如果想在insert后自动填充到对象中,最最最重要的地方就是如下,这个        value看看是不是写错了模式

 <constructor-arg name="executorType" value="SIMPLE"></constructor-arg>
附上我转换后的全部内容:
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       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/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <context:component-scan base-package="com.browse">
<!--        <context:exclude-filter type="annotation"-->
<!--                                expression="org.springframework.stereotype.Controller" />-->
    </context:component-scan>
    <!--配置视图解析器,方便页面返回  -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--两个标准配置  -->
    <!-- 将springmvc不能处理的请求交给tomcat -->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
    <!--&lt;!&ndash; 能支持springmvc更高级的一些功能,JSR303校验,快捷的ajax...映射动态请求 &ndash;&gt;-->
    <mvc:annotation-driven></mvc:annotation-driven>


    <!-- Spring的配置文件,这里主要配置和业务逻辑有关的 -->
    <!--=================== 数据源,事务控制,xxx ================-->
    <context:property-placeholder location="classpath:db.properties" />
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="username" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClassName" value="${jdbc.driverClass}"></property>
        <property name="url" value="${jdbc.jdbcUrl}"></property>

        <!-- 初始化连接大小 -->
        <property name="initialSize" value="0"></property>
        <!-- 连接池最大使用连接数量 -->
        <property name="maxActive" value="20"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="0" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="60000" />

        <property name="validationQuery">
            <value>SELECT 1</value>
        </property>
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="25200000" />

        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="true" />
        <!-- 1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="1800" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="true" />

        <!-- 监控数据库 -->
        <!-- <property name="filters" value="stat" /> -->
        <property name="filters" value="mergeStat" />
    </bean>


    <!--================== 配置和MyBatis的整合=============== -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定mybatis全局配置文件的位置 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="dataSource" ref="dataSource"></property>
        <!-- 指定mybatis,mapper文件的位置 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
    </bean>

    <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--扫描所有dao接口的实现,加入到ioc容器中 -->
        <property name="basePackage" value="com.browse.mapper"></property>
    </bean>

    <!-- 配置一个可以执行批量的sqlSession -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
        <constructor-arg name="executorType" value="SIMPLE"></constructor-arg>
    </bean>
    <!--=============================================  -->

    <!-- ===============事务控制的配置 ================-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--控制住数据源  -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式)  -->
    <aop:config>
        <!-- 切入点表达式 -->
        <aop:pointcut expression="execution(* com.browse.service..*(..))" id="txPoint"/>
        <!-- 配置事务增强 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
    </aop:config>

    <!--配置事务增强,事务如何切入  -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 所有方法都是事务方法 -->
            <tx:method name="*"/>
            <!--以get开始的所有方法  -->
            <tx:method name="get*" read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <!-- Spring配置文件的核心点(数据源、与mybatis的整合,事务控制) -->

</beans>

       

       4:是否配置了springMVC的配置类

内容为:

package com.browse.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

/**
 * @author jiangcl
 * @date 2024/05/11
 **/
@Configuration
@ComponentScan(basePackages = {"com.browse.controller"})
@EnableWebMvc
public class SpringMVCConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/jsp/", ".jsp");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/toIndex").setViewName("index");
        registry.addViewController("/toPage1").setViewName("page1");
        registry.addViewController("/toPage2").setViewName("page2");
        registry.addViewController("/toPage3").setViewName("page3");
        registry.addViewController("/toNext").setViewName("next");
        registry.addViewController("/toAddStudent").setViewName("add_student");
        registry.addViewController("/toFindStudentPage").setViewName("find_student");
    }
    // 添加字符编码拦截器
//    @Bean
//    public CharacterEncodingInterceptor characterEncodingInterceptor() {
//        CharacterEncodingInterceptor encodingInterceptor = new CharacterEncodingInterceptor();
//        encodingInterceptor.setEncoding("UTF-8");
//        encodingInterceptor.setForceEncoding(true);
//        return encodingInterceptor;
//    }

//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(characterEncodingInterceptor());
//    }
}

        5:检查myabtis-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"/>

        <setting name="defaultExecutorType" value="SIMPLE"/> <!-- 或者 "REUSE" -->

        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
        <package name="com.browse.crud.bean"/>
    </typeAliases>

</configuration>

        六:检查jsp文件中最上面是否配置了编码格式

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

四:项目启动后,访问对应的路径但是出现404错误

        1、检查springMVC的配置类

                如:上述内容

        2、检查spring-mvc.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.3.xsd
             http://www.springframework.org/schema/mvc
              https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--   扫描注解 -->
    <context:component-scan base-package="com.browse.controller"/>
    <!--静态资源交给servlet处理,不是静态资源才交给DispatcherServlet-->
    <mvc:default-servlet-handler />

    <!--加载处理器映射器,处理器适配器等bean-->
    <mvc:annotation-driven></mvc:annotation-driven>


    <!--视图解析器:DispatcherServlet给他的Model And ivew-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceView">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!--前缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

        3、检查各个配置文件关联关系是否正确  如图

五:各种阴间问题

        1、项目改了后没效果,请使用浏览器无痕模式

        2、项目在IE中会乱码,请使用谷歌浏览器

        3、项目所有文件配置,关联,内容都没问题,但是出现时不时乱码,或404错误时

        可以检查任务管理器中是否有IDEA关闭tomcat时没清空的情况【相信各位不会看,最简单的办法,直接重启电脑( 我遇到的就是重启后可以了)。-.-】

        4、还有就是可以将你安装下载的tomcat目录下的【D:\Tomcat 8.5\webapps】所有文件夹或者你自项目的文件夹进行删除

        5、出现如下异常“javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V”的方法

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setContentLengthLong(J)V at org.springframework.http.server.ServletServerHttpResponse.writeHeaders(ServletServerHttpResponse.java:130) at org.springframework.http.server.ServletServerHttpResponse.getBody(ServletServerHttpResponse.java:96) 

恭喜你,你需要去提高你的Tomcat版本,肯定你用的是7或者7以下版本,提高下版本啦

①检查您的Servlet容器版本,确保它支持您正在使用的Spring框架版本。例如,Tomcat 8或更高版本支持Spring 4.x及更高版本。
②检查您的项目中是否包含多个Servlet API依赖项,这可能会导致版本冲突。确保您的项目只使用一个Servlet API版本,并且该版本与您的Servlet容器兼容。
③如果您使用的是Maven或Gradle等构建工具,请确保在依赖项中指定正确的Servlet API版本。例如,对于Tomcat 8,您可以使用以下依赖项

        6、还有问题其他莫名的问题,比如Maven不加载啦

        可以看看自己的IDEA版本是不是四五年前的版本了,把IDEA的版本也更新下,IDEA的版本和Maven的版本也有对应关系的。

os:最终要是还有问题,那就不要转了吧,这么轴,非要把先进技术转十年前的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值