SpringMVC(一)搭建ssm框架全过程,遇到得坑记录

朱雀 2021-12-15 10:41 358阅读 0赞

题记:找到一篇关于activiti的书,打算根据书去做一些学习,自己搭建ssm框架遇到一些坑,以做记录!

一,搭建过程,代码记录

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 1

二,项目结构

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 2

三、配置文件代码

applicationContext.xml代码示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
  8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  10. <!-- 自动扫描指定目录,将控制器加载到bean -->
  11. <context:component-scan base-package="top.wj.demo" />
  12. <!-- 配置 druid 数据源 -->
  13. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  14. <!-- 基本属性 url、user、password、driverClass -->
  15. <property name="username" value="action" />
  16. <property name="password" value="" />
  17. <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  18. <property name="url" value="jdbc:mysql://119.23.108.107:3306/activiti?useUnicode=true$characterEncoding=utf8$useSSL=false" />
  19. </bean>
  20. <!-- 配置 sessionFactory -->
  21. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  22. <property name="dataSource" ref="dataSource" />
  23. <property name="mapperLocations">
  24. <list>
  25. <!-- <value>classpath:com/frame/**/*Mapper.xml</value>-->
  26. <value>classpath:mapper/*.xml</value>
  27. </list>
  28. </property>
  29. </bean>
  30. <!-- 配置 sqlSessionTemplate 持久化模板 -->
  31. <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  32. <constructor-arg ref="sqlSessionFactory" />
  33. </bean>
  34. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  35. p:basePackage="top.wj.demo.mapper"
  36. p:sqlSessionFactoryBeanName="sqlSessionFactory"/>
  37. <!-- 配置事物管理器 -->
  38. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  39. <property name="dataSource" ref="dataSource" />
  40. </bean>
  41. <!-- 配置事物传播行为 -->
  42. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  43. <tx:attributes>
  44. <tx:method name="get*" read-only="true" />
  45. <tx:method name="find*" read-only="true" />
  46. <tx:method name="select*" read-only="true" />
  47. <tx:method name="*" propagation="REQUIRED" />
  48. </tx:attributes>
  49. </tx:advice>
  50. <!-- 配置事物切入点 -->
  51. <aop:config>
  52. <aop:pointcut expression="execution(* top.wj.demo.service.*.*(..))" id="pointCut" />
  53. <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut" />
  54. </aop:config>
  55. <!-- 开始声明式事务(事物注解) -->
  56. <tx:annotation-driven transaction-manager="transactionManager" />
  57. </beans>

spring-mvc.xml代码示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  5. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
  6. <!-- 自动将控制器加载到bean -->
  7. <context:component-scan base-package="top.wj.demo.controller" />
  8. <!-- 配置视图解析器 -->
  9. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  10. <property name="prefix" value="/views/" />
  11. <property name="suffix" value=".jsp" />
  12. <!-- 可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
  13. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  14. </bean>
  15. <!-- 返回json 需导入 jackson-annotations.jar,jackson-core.jar,jackson-databind.jar -->
  16. <!-- 通过处理器映射DefaultAnnotationHandlerMapping来开启支持@Controller注解 -->
  17. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
  18. <!-- 通过处理器适配器AnnotationMethodHandlerAdapter来开启支持@RequestMapping注解 -->
  19. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
  20. <property name="messageConverters">
  21. <list>
  22. <!-- 配置返回字符串编码 -->
  23. <bean
  24. class="org.springframework.http.converter.StringHttpMessageConverter">
  25. <property name="supportedMediaTypes">
  26. <list>
  27. <value>text/html; charset=UTF-8</value>
  28. <value>application/json;charset=UTF-8</value>
  29. </list>
  30. </property>
  31. </bean>
  32. <!-- 配置 json 转换器 -->
  33. <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  34. <property name="supportedMediaTypes">
  35. <list>
  36. <value>text/html; charset=UTF-8</value>
  37. <value>application/json;charset=UTF-8</value>
  38. </list>
  39. </property>
  40. </bean>
  41. </list>
  42. </property>
  43. </bean>
  44. </beans>

web.xml代码示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. id="WebApp_ID" version="3.1">
  6. <display-name>ssm</display-name>
  7. <!-- 过滤器解决中文乱码问题、强制编码 UTF-8 -->
  8. <filter>
  9. <filter-name>characterEncodingFilter</filter-name>
  10. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  11. <init-param>
  12. <param-name>encoding</param-name>
  13. <param-value>UTF-8</param-value>
  14. </init-param>
  15. <init-param>
  16. <param-name>forceRequestEncoding</param-name>
  17. <param-value>true</param-value>
  18. </init-param>
  19. </filter>
  20. <filter-mapping>
  21. <filter-name>characterEncodingFilter</filter-name>
  22. <url-pattern>/</url-pattern>
  23. </filter-mapping>
  24. <!-- 配置 springMVC 基本配置 -->
  25. <servlet>
  26. <servlet-name>springMVC</servlet-name>
  27. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  28. <init-param>
  29. <param-name>contextConfigLocation</param-name>
  30. <param-value>classpath:spring/spring-mvc.xml</param-value>
  31. </init-param>
  32. <load-on-startup>1</load-on-startup>
  33. </servlet>
  34. <servlet-mapping>
  35. <servlet-name>springMVC</servlet-name>
  36. <url-pattern>/</url-pattern>
  37. </servlet-mapping>
  38. <!-- 配置 spring 监听器 -->
  39. <!-- needed for ContextLoaderListener -->
  40. <context-param>
  41. <param-name>contextConfigLocation</param-name>
  42. <param-value>classpath:spring/applicationContext.xml</param-value>
  43. </context-param>
  44. <!-- Bootstraps the root web application context before servlet initialization -->
  45. <listener>
  46. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  47. </listener>
  48. <!-- 配置欢迎页 -->
  49. <welcome-file-list>
  50. <welcome-file>views/index.jsp</welcome-file>
  51. </welcome-file-list>
  52. </web-app>

pom.xml代码示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>top.wj.springmvc</groupId>
  6. <artifactId>springmvc-demo</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>springmvc-demo Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <!-- 原始配置-->
  13. <!-- <properties>-->
  14. <!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>-->
  15. <!-- <maven.compiler.source>1.7</maven.compiler.source>-->
  16. <!-- <maven.compiler.target>1.7</maven.compiler.target>-->
  17. <!-- </properties>-->
  18. <!-- <dependencies>-->
  19. <!-- <dependency>-->
  20. <!-- <groupId>junit</groupId>-->
  21. <!-- <artifactId>junit</artifactId>-->
  22. <!-- <version>4.11</version>-->
  23. <!-- <scope>test</scope>-->
  24. <!-- </dependency>-->
  25. <!-- </dependencies>-->
  26. <properties>
  27. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  28. <spring.framework.version>5.1.8.RELEASE</spring.framework.version>
  29. <aspectj.version>1.9.4</aspectj.version>
  30. <jackson.version>2.9.9</jackson.version>
  31. <logback.version>1.2.3</logback.version>
  32. </properties>
  33. <dependencies>
  34. <!-- 添加 commons 依赖包 -->
  35. <dependency>
  36. <groupId>commons-fileupload</groupId>
  37. <artifactId>commons-fileupload</artifactId>
  38. <version>1.3.3</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>commons-io</groupId>
  42. <artifactId>commons-io</artifactId>
  43. <version>2.5</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>org.apache.commons</groupId>
  47. <artifactId>commons-lang3</artifactId>
  48. <version>3.6</version>
  49. </dependency>
  50. <!-- 添加 spring 依赖包 -->
  51. <dependency>
  52. <groupId>org.springframework</groupId>
  53. <artifactId>spring-aspects</artifactId>
  54. <version>${spring.framework.version}</version>
  55. </dependency>
  56. <dependency>
  57. <groupId>org.springframework</groupId>
  58. <artifactId>spring-context</artifactId>
  59. <version>${spring.framework.version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-jdbc</artifactId>
  64. <version>${spring.framework.version}</version>
  65. </dependency>
  66. <dependency>
  67. <groupId>org.springframework</groupId>
  68. <artifactId>spring-webmvc</artifactId>
  69. <version>${spring.framework.version}</version>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.springframework</groupId>
  73. <artifactId>spring-context-support</artifactId>
  74. <version>${spring.framework.version}</version>
  75. </dependency>
  76. <!-- 添加 aspectJ 依赖包 -->
  77. <dependency>
  78. <groupId>org.aspectj</groupId>
  79. <artifactId>aspectjweaver</artifactId>
  80. <version>${aspectj.version}</version>
  81. </dependency>
  82. <dependency>
  83. <groupId>org.aspectj</groupId>
  84. <artifactId>aspectjrt</artifactId>
  85. <version>${aspectj.version}</version>
  86. </dependency>
  87. <!-- 添加 mybatis 依赖包 -->
  88. <dependency>
  89. <groupId>org.mybatis</groupId>
  90. <artifactId>mybatis</artifactId>
  91. <version>3.5.1</version>
  92. </dependency>
  93. <dependency>
  94. <groupId>org.mybatis</groupId>
  95. <artifactId>mybatis-spring</artifactId>
  96. <version>1.3.1</version>
  97. </dependency>
  98. <!-- 添加 druid 依赖包 -->
  99. <dependency>
  100. <groupId>com.alibaba</groupId>
  101. <artifactId>druid</artifactId>
  102. <version>1.1.18</version>
  103. </dependency>
  104. <!-- 添加 mysql 驱动 -->
  105. <dependency>
  106. <groupId>mysql</groupId>
  107. <artifactId>mysql-connector-java</artifactId>
  108. <version>8.0.16</version>
  109. </dependency>
  110. <!-- 添加 jackson 依赖包 -->
  111. <dependency>
  112. <groupId>com.fasterxml.jackson.core</groupId>
  113. <artifactId>jackson-databind</artifactId>
  114. <version>${jackson.version}</version>
  115. </dependency>
  116. <!-- 添加 servlet 依赖包 -->
  117. <dependency>
  118. <groupId>javax.servlet</groupId>
  119. <artifactId>javax.servlet-api</artifactId>
  120. <version>4.0.1</version>
  121. </dependency>
  122. <!-- 添加 jstl 依赖包 -->
  123. <dependency>
  124. <groupId>javax.servlet</groupId>
  125. <artifactId>jstl</artifactId>
  126. <version>1.2</version>
  127. </dependency>
  128. <!-- 添加 logback 依赖包 -->
  129. <dependency>
  130. <groupId>ch.qos.logback</groupId>
  131. <artifactId>logback-classic</artifactId>
  132. <version>${logback.version}</version>
  133. </dependency>
  134. <dependency>
  135. <groupId>junit</groupId>
  136. <artifactId>junit</artifactId>
  137. <version>4.12</version>
  138. <scope>compile</scope>
  139. </dependency>
  140. </dependencies>
  141. <build>
  142. <finalName>SpringMVC</finalName>
  143. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  144. <plugins>
  145. <plugin>
  146. <artifactId>maven-clean-plugin</artifactId>
  147. <version>3.1.0</version>
  148. </plugin>
  149. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  150. <plugin>
  151. <artifactId>maven-resources-plugin</artifactId>
  152. <version>3.0.2</version>
  153. </plugin>
  154. <plugin>
  155. <artifactId>maven-compiler-plugin</artifactId>
  156. <version>3.8.0</version>
  157. </plugin>
  158. <plugin>
  159. <artifactId>maven-surefire-plugin</artifactId>
  160. <version>2.22.1</version>
  161. </plugin>
  162. <plugin>
  163. <artifactId>maven-war-plugin</artifactId>
  164. <version>3.2.2</version>
  165. </plugin>
  166. <plugin>
  167. <artifactId>maven-install-plugin</artifactId>
  168. <version>2.5.2</version>
  169. </plugin>
  170. <plugin>
  171. <artifactId>maven-deploy-plugin</artifactId>
  172. <version>2.8.2</version>
  173. </plugin>
  174. </plugins>
  175. </pluginManagement>
  176. <!-- 找不到包地址-->
  177. <!-- maven项目中src源代码下的xml等资源文件编译进classes文件夹,
  178. 注意:如果没有这个,它会自动搜索resources下是否有mapper.xml文件,
  179. 如果没有就会报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.pet.mapper.PetMapper.selectByPrimaryKey-->
  180. <resources>
  181. <resource>
  182. <directory>src/main/java</directory>
  183. <includes>
  184. <include>**/*.xml</include>
  185. </includes>
  186. </resource>
  187. <!--将resources目录下的配置文件编译进classes文件 -->
  188. <resource>
  189. <directory>src/main/resources</directory>
  190. </resource>
  191. </resources>
  192. </build>
  193. </project>

BaseMapper.xml约束头代码示例:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="top.wj.demo.mapper">
  4. </mapper>

四、Java代码示例:

TestController.java

  1. package top.wj.demo.controller;
  2. import org.junit.Test;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import top.wj.demo.entity.TUser;
  9. import top.wj.demo.mapper.TestMapper;
  10. import top.wj.demo.service.TestService;
  11. import java.util.List;
  12. @RestController
  13. @RequestMapping("/testController")
  14. public class TestController {
  15. @Autowired
  16. private TestService testService;
  17. @GetMapping("/testMethod")
  18. @ResponseBody
  19. public String testMethod(){
  20. List<TUser> usersList=testService.testMethod();
  21. System.out.println(usersList+".....");
  22. return "hello";
  23. }
  24. @Test
  25. public void test(){
  26. List<TUser> users = testService.testMethod();
  27. System.out.println(users);
  28. }
  29. }

TestService.java代码示例:

  1. package top.wj.demo.service.impl;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import org.springframework.transaction.annotation.Transactional;
  5. import top.wj.demo.entity.TUser;
  6. import top.wj.demo.mapper.TestMapper;
  7. import top.wj.demo.service.TestService;
  8. import java.util.List;
  9. @Transactional
  10. @Service
  11. public class TestServiceImpl implements TestService {
  12. @Autowired
  13. private TestMapper testMapper;
  14. @Override
  15. public List<TUser> testMethod() {
  16. List<TUser> tUserList=testMapper.testMethod();
  17. return tUserList;
  18. }
  19. }

TestMapper.java代码示例:

  1. package top.wj.demo.mapper;
  2. import org.springframework.stereotype.Repository;
  3. import top.wj.demo.entity.TUser;
  4. import java.util.List;
  5. @Repository
  6. public interface TestMapper {
  7. /**
  8. * 测试
  9. * @return
  10. */
  11. List<TUser> testMethod();
  12. }

TUser.java代码示例:

  1. package top.wj.demo.entity;
  2. import org.springframework.stereotype.Component;
  3. @Component
  4. public class TUser {
  5. private Integer id;
  6. private String userName;
  7. private String password;
  8. private Integer age;
  9. public Integer getId() {
  10. return id;
  11. }
  12. public void setId(Integer id) {
  13. this.id = id;
  14. }
  15. public String getUserName() {
  16. return userName;
  17. }
  18. public void setUserName(String userName) {
  19. this.userName = userName;
  20. }
  21. public String getPassword() {
  22. return password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27. public Integer getAge() {
  28. return age;
  29. }
  30. public void setAge(Integer age) {
  31. this.age = age;
  32. }
  33. }

数据库脚本:

  1. DROP TABLE IF EXISTS `t_user`;
  2. CREATE TABLE `t_user` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `user_name` varchar(40) NOT NULL,
  5. `password` varchar(255) NOT NULL,
  6. `age` int(4) NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
  9. insert into `t_user`(`id`,`user_name`,`password`,`age`) values (1,'WJ','wwwwwwwww',24);

这些是搭建项目的基础配置,下面总结一下遇到的坑

报错一:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 3

搭建好项目激动之余看到报错即震惊又难受,难道我老了?搭建一个ssm还跑不起来,

原因:配置了spring扫描没有配置mybatis扫描mapper文件,所以找不到mapper配置文件!

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 4

  1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  2. p:basePackage="top.wj.demo.mapper"
  3. p:sqlSessionFactoryBeanName="sqlSessionFactory"/>

报错二:

启动没错但是访问不到Controller,浏览器访问一直报404,在网上看了很多文章,说的各种问题,其实是controller扫描不到

原因是在psringmvc配置文件中没有扫描controller

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 5

报错三:访问到了controller但是请求走到service就报错

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 6

原因是因为applicationContext.xml文件中扫描mapper缺少一层目录

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3c4OTM5MzI3NDc_size_16_color_FFFFFF_t_70 7

发表评论

表情:
评论列表 (有 0 条评论,358人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SSM项目框架过程及思考

    1.前言  之前都是在现有框架下进行写代码或者总是看一些别人的架构,总会眼高手低。于是打算自己完整的走一遍流程,同时把所遇到的问题,思考的问题记下来,供大家参考。由于是工