SpringMVC—学习笔记#day03

SpringMVC

Posted by DiCaprio on August 15, 2019

目录

第一章:搭建整合环境

1、引入坐标:

2、编写实体类,在ssm_domain项目中编写

3、 编写dao接口

4、编写service接口和实现类

第二章:Spring框架代码的编写

1. 搭建和测试Spring的开发环境

2. 在ssm_web项目中编写测试方法,进行测试 

3.测试结果 

第三章:Spring整合SpringMVC框架

1. 搭建和测试SpringMVC的开发环境

1.在web.xml中配置DispatcherServlet前端控制器

2.在web.xml中配置DispatcherServlet过滤器解决中文乱码

3. 创建springmvc.xml的配置文件,编写配置文件

4. 测试SpringMVC的框架搭建是否成功

5.测试结果

2. Spring整合SpringMVC的框架

1. 目的:在controller中能成功的调用service对象中的方法。

2. 在项目启动的时候,就去加载applicationContext.xml的配置文件,在web.xml中配置ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配置文件)。

3. 在controller中注入service对象,调用service对象的方法进行测试

4.测试结果

第四章:Spring整合MyBatis框架

1. 搭建和测试MyBatis的环境

1. 在web项目中编写SqlMapConfig.xml的配置文件,编写核心配置文件

2. 在AccountDao接口的方法上添加注解,编写SQL语句

3. 编写测试的方法

4.测试结果

2. Spring整合MyBatis框架

1. 目的:把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中

2. 在AccountDao接口中添加@Repository注解,在service中注入dao对象,进行测试

 3.配置Spring的声明式事务管理

4.测试保存帐户的方法

5.测试结果


第一章:搭建整合环境

整个项目所包含的文件

1、引入坐标:

  1. <properties>
  2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3. <maven.compiler.source>1.8</maven.compiler.source>
  4. <maven.compiler.target>1.8</maven.compiler.target>
  5. <spring.version>5.0.2.RELEASE</spring.version>
  6. <slf4j.version>1.6.6</slf4j.version>
  7. <log4j.version>1.2.12</log4j.version>
  8. <mysql.version>5.1.6</mysql.version>
  9. <mybatis.version>3.4.5</mybatis.version>
  10. </properties>
  1. <dependencies>
  2. <!-- spring -->
  3. <dependency>
  4. <groupId>org.aspectj</groupId>
  5. <artifactId>aspectjweaver</artifactId>
  6. <version>1.6.8</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.springframework</groupId>
  10. <artifactId>spring-aop</artifactId>
  11. <version>${spring.version}</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>org.springframework</groupId>
  15. <artifactId>spring-context</artifactId>
  16. <version>${spring.version}</version>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework</groupId>
  20. <artifactId>spring-web</artifactId>
  21. <version>${spring.version}</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework</groupId>
  25. <artifactId>spring-webmvc</artifactId>
  26. <version>${spring.version}</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework</groupId>
  30. <artifactId>spring-test</artifactId>
  31. <version>${spring.version}</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework</groupId>
  35. <artifactId>spring-tx</artifactId>
  36. <version>${spring.version}</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-jdbc</artifactId>
  41. <version>${spring.version}</version>
  42. </dependency>
  43. <dependency>
  44. <groupId>junit</groupId>
  45. <artifactId>junit</artifactId>
  46. <version>4.12</version>
  47. <scope>compile</scope>
  48. </dependency>
  49. <dependency>
  50. <groupId>mysql</groupId>
  51. <artifactId>mysql-connector-java</artifactId>
  52. <version>${mysql.version}</version>
  53. </dependency>
  54. <dependency>
  55. <groupId>javax.servlet</groupId>
  56. <artifactId>servlet-api</artifactId>
  57. <version>2.5</version>
  58. <scope>provided</scope>
  59. </dependency>
  60. <dependency>
  61. <groupId>javax.servlet.jsp</groupId>
  62. <artifactId>jsp-api</artifactId>
  63. <version>2.0</version>
  64. <scope>provided</scope>
  65. </dependency>
  66. <dependency>
  67. <groupId>jstl</groupId>
  68. <artifactId>jstl</artifactId>
  69. <version>1.2</version>
  70. </dependency>
  71. <!-- log start -->
  72. <dependency>
  73. <groupId>log4j</groupId>
  74. <artifactId>log4j</artifactId>
  75. <version>${log4j.version}</version>
  76. </dependency>
  77. <dependency>
  78. <groupId>org.slf4j</groupId>
  79. <artifactId>slf4j-api</artifactId>
  80. <version>${slf4j.version}</version>
  81. </dependency>
  82. <dependency>
  83. <groupId>org.slf4j</groupId>
  84. <artifactId>slf4j-log4j12</artifactId>
  85. <version>${slf4j.version}</version>
  86. </dependency>
  87. <!-- log end -->
  88. <dependency>
  89. <groupId>org.mybatis</groupId>
  90. <artifactId>mybatis</artifactId>
  91. <version>${mybatis.version}</version>
  92. </dependency>
  93. <dependency>
  94. <groupId>org.mybatis</groupId>
  95. <artifactId>mybatis-spring</artifactId>
  96. <version>1.3.0</version>
  97. </dependency>
  98. <dependency>
  99. <groupId>c3p0</groupId>
  100. <artifactId>c3p0</artifactId>
  101. <version>0.9.1.2</version>
  102. <type>jar</type>
  103. <scope>compile</scope>
  104. </dependency>
  105. </dependencies>

2、编写实体类,在ssm_domain项目中编写

  1. /**
  2. * 实体类
  3. */
  4. public class Account implements Serializable {
  5. private Integer id;
  6. private String name;
  7. private Double money;
  8. public Integer getId() {
  9. return id;
  10. }
  11. public void setId(Integer id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public Double getMoney() {
  21. return money;
  22. }
  23. public void setMoney(Double money) {
  24. this.money = money;
  25. }
  26. @Override
  27. public String toString() {
  28. return "Account{" +
  29. "id=" + id +
  30. ", name='" + name + '\'' +
  31. ", money=" + money +
  32. '}';
  33. }
  34. }

3、 编写dao接口

  1. /**
  2. * 账户dao接口
  3. */
  4. public interface AccountDao {
  5. //保存账户信息
  6. public void saveAccount(Account account);
  7. //查询所有账户
  8. public List<Account> findAll();
  9. }

4、编写service接口和实现类

  1. public interface AccountService {
  2. //保存账户信息
  3. public void saveAccount(Account account);
  4. //查询所有账户
  5. public List<Account> findAll();
  6. }
  1. @Service("accountService")
  2. public class AccountServiceImpl implements AccountService {
  3. @Override
  4. public void saveAccount(Account account) {
  5. System.out.println("业务层:保存所有账户...");
  6. }
  7. @Override
  8. public List<Account> findAll() {
  9. System.out.println("业务层:查询所有账户...");
  10. return null;
  11. }
  12. }

第二章:Spring框架代码的编写

1. 搭建和测试Spring的开发环境

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"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop.xsd
  13. http://www.springframework.org/schema/tx
  14. http://www.springframework.org/schema/tx/spring-tx.xsd">
  15. <!-- 开启注解扫描,要扫描的是service和dao层的注解,要忽略web层注解,因为web层让SpringMVC框架去管理 -->
  16. <context:component-scan base-package="cn.itcast">
  17. <!-- 配置要忽略的注解 -->
  18. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  19. </context:component-scan>
  20. </beans>

2. 在ssm_web项目中编写测试方法,进行测试 

  1. public class ServiceTest {
  2. @Test
  3. public void run1() {
  4. ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
  5. AccountService as = (AccountService) ac.getBean("accountService");
  6. as.findAll();
  7. }
  8. }

3.测试结果 

第三章:Spring整合SpringMVC框架

1. 搭建和测试SpringMVC的开发环境

1.在web.xml中配置DispatcherServlet前端控制器

  1. <!-- 配置前端控制器:服务器启动必须加载,需要加载springmvc.xml配置文件 -->
  2. <servlet>
  3. <servlet-name>dispatcherServlet</servlet-name>
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. <!-- 配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml配置文件 -->
  6. <init-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:springmvc.xml</param-value>
  9. </init-param>
  10. <!-- 服务器启动的时候,让DispatcherServlet对象创建 -->
  11. <load-on-startup>1</load-on-startup>
  12. </servlet>
  13. <servlet-mapping>
  14. <servlet-name>dispatcherServlet</servlet-name>
  15. <url-pattern>/</url-pattern>
  16. </servlet-mapping>

2.在web.xml中配置DispatcherServlet过滤器解决中文乱码

  1. <!-- 配置解决中文乱码的过滤器 -->
  2. <filter>
  3. <filter-name>characterEncodingFilter</filter-name>
  4. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  5. <init-param>
  6. <param-name>encoding</param-name>
  7. <param-value>UTF-8</param-value>
  8. </init-param>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>characterEncodingFilter</filter-name>
  12. <url-pattern>/*</url-pattern>
  13. </filter-mapping>

3. 创建springmvc.xml的配置文件,编写配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans.xsd
  9. http://www.springframework.org/schema/mvc
  10. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd">
  13. <!-- 扫描controller的注解,别的不扫描 -->
  14. <context:component-scan base-package="cn.itcast">
  15. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  16. </context:component-scan>
  17. <!-- 配置视图解析器 -->
  18. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  19. <!-- JSP文件所在的目录 -->
  20. <property name="prefix" value="/WEB-INF/pages/"/>
  21. <!-- 文件的后缀名 -->
  22. <property name="suffix" value=".jsp"/>
  23. </bean>
  24. <!-- 设置静态资源不过滤 -->
  25. <mvc:resources mapping="/css/**" location="/css/"/>
  26. <mvc:resources mapping="/images/**" location="/images/"/>
  27. <mvc:resources mapping="/js/**" location="/js/"/>
  28. <!-- 开启对SpringMVC注解的支持 -->
  29. <mvc:annotation-driven/>
  30. </beans>

4. 测试SpringMVC的框架搭建是否成功

1. 编写index.jsp和list.jsp编写,超链接

<a href="account/findAll">查询所有</a>

2. 创建AccountController类,编写方法,进行测试

  1. @Controller
  2. @RequestMapping("/account")
  3. public class AccountController {
  4. /**
  5. * 查询所有数据
  6. */
  7. @RequestMapping("/findAll")
  8. public String findAll() {
  9. System.out.println("表现层:查询所有账户...");
  10. return "list";
  11. }
  12. }

5.测试结果

2. Spring整合SpringMVC的框架

1. 目的:在controller中能成功的调用service对象中的方法。

2. 在项目启动的时候,就去加载applicationContext.xml的配置文件,在web.xml中配置
ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配置文件)。

  1. <!-- 配置Spring的监听器 -->
  2. <listener>
  3. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  4. </listener>
  5. <!-- 配置加载类路径的配置文件 -->
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:applicationContext.xml</param-value>
  9. </context-param>

3. 在controller中注入service对象,调用service对象的方法进行测试

  1. @Controller
  2. @RequestMapping("/account")
  3. public class AccountController {
  4. @Autowired
  5. private AccountService accountService;
  6. /**
  7. * 查询所有数据
  8. */
  9. @RequestMapping("/findAll")
  10. public String findAll() {
  11. System.out.println("表现层:查询所有账户...");
  12. List<Account>list=accountService.findAll();
  13. accountService.findAll();
  14. return "list";
  15. }
  16. }

4.测试结果

第四章:Spring整合MyBatis框架

1. 搭建和测试MyBatis的环境

1. 在web项目中编写SqlMapConfig.xml的配置文件,编写核心配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <environments default="mysql">
  7. <environment id="mysql">
  8. <transactionManager type="JDBC"></transactionManager>
  9. <dataSource type="POOLED">
  10. <property name="driver" value="com.mysql.jdbc.Driver"/>
  11. <property name="url" value="jdbc:mysql:///ssm"/>
  12. <property name="username" value="root"/>
  13. <property name="password" value="123456"/>
  14. </dataSource>
  15. </environment>
  16. </environments>
  17. <!-- 使用的是注解 -->
  18. <mappers>
  19. <!-- <mapper class="cn.itcast.dao.AccountDao"/> -->
  20. <!-- 该包下所有的dao接口都可以使用 -->
  21. <package name="cn.itcast.dao"/>
  22. </mappers>
  23. </configuration>

2. 在AccountDao接口的方法上添加注解,编写SQL语句

  1. public interface AccountDao {
  2. //保存账户信息
  3. @Insert("insert into account (name,money) values (#{name},#{money})")
  4. public void saveAccount(Account account);
  5. //查询所有账户
  6. @Select("select * from account")
  7. public List<Account> findAll();
  8. }

3. 编写测试的方法

  1. public class TestMyBatis {
  2. /**
  3. * 测试查询
  4. * @throws Exception
  5. */
  6. @Test
  7. public void run1() throws Exception {
  8. // 加载配置文件
  9. InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
  10. // 创建SqlSessionFactory对象
  11. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
  12. // 创建SqlSession对象
  13. SqlSession session = factory.openSession();
  14. // 获取到代理对象
  15. AccountDao dao = session.getMapper(AccountDao.class);
  16. // 查询所有数据
  17. List<Account> list = dao.findAll();
  18. for(Account account : list){
  19. System.out.println(account);
  20. }
  21. // 关闭资源
  22. session.close();
  23. in.close();
  24. }
  25. /**
  26. * 测试保存
  27. * @throws Exception
  28. */
  29. @Test
  30. public void run2() throws Exception {
  31. Account account = new Account();
  32. account.setName("熊大");
  33. account.setMoney(400d);
  34. // 加载配置文件
  35. InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
  36. // 创建SqlSessionFactory对象
  37. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
  38. // 创建SqlSession对象
  39. SqlSession session = factory.openSession();
  40. // 获取到代理对象
  41. AccountDao dao = session.getMapper(AccountDao.class);
  42. // 保存
  43. dao.saveAccount(account);
  44. // 提交事务
  45. session.commit();
  46. // 关闭资源
  47. session.close();
  48. in.close();
  49. }
  50. }

4.测试结果

2. Spring整合MyBatis框架

1. 目的:把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中

  1. <!--Spring整合MyBatis框架-->
  2. <!--配置连接池-->
  3. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  4. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  5. <property name="jdbcUrl" value="jdbc:mysql:///ssm"/>
  6. <property name="user" value="root"/>
  7. <property name="password" value="root"/>
  8. </bean>
  9. <!--配置SqlSessionFactory工厂-->
  10. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  11. <property name="dataSource" ref="dataSource" />
  12. </bean>
  13. <!--配置AccountDao接口所在包-->
  14. <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  15. <property name="basePackage" value="cn.itcast.dao"/>
  16. </bean>

2. 在AccountDao接口中添加@Repository注解,在service中注入dao对象,进行测试

  1. @Repository
  2. public interface AccountDao {
  3. //保存账户信息
  4. @Insert("insert into account (name,money) values (#{name},#{money})")
  5. public void saveAccount(Account account);
  6. //查询所有账户
  7. @Select("select * from account")
  8. public List<Account> findAll();
  9. }
  1. @Service("accountService")
  2. public class AccountServiceImpl implements AccountService{
  3. @Autowired
  4. private AccountDao accountDao;
  5. public List<Account> findAll() {
  6. System.out.println("业务层:查询所有账户...");
  7. return accountDao.findAll();
  8. }
  9. public void saveAccount(Account account) {
  10. System.out.println("业务层:保存帐户...");
  11. accountDao.saveAccount(account);
  12. }
  13. }
  1. @Controller
  2. @RequestMapping("/account")
  3. public class AccountController {
  4. @Autowired
  5. private AccountService accountService;
  6. /**
  7. * 查询所有数据
  8. */
  9. @RequestMapping("/findAll")
  10. public String findAll() {
  11. System.out.println("表现层:查询所有账户...");
  12. List<Account>list=accountService.findAll();
  13. for (Account account:list){
  14. System.out.println(account);
  15. }
  16. accountService.findAll();
  17. return "list";
  18. }
  19. }

 3.配置Spring的声明式事务管理

  1. <!--配置Spring框架声明式事务管理-->
  2. <!--配置事务管理器-->
  3. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  4. <property name="dataSource" ref="dataSource" />
  5. </bean>
  6. <!--配置事务通知-->
  7. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  8. <tx:attributes>
  9. <tx:method name="find*" read-only="true"/>
  10. <tx:method name="*" isolation="DEFAULT"/>
  11. </tx:attributes>
  12. </tx:advice>
  13. <!--配置AOP增强-->
  14. <aop:config>
  15. <aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.itcast.service.impl.*ServiceImpl.*(..))"/>
  16. </aop:config>

4.测试保存帐户的方法

改好jsp文件

  1. @Controller
  2. @RequestMapping("/account")
  3. public class AccountController {
  4. @Autowired
  5. private AccountService accountService;
  6. @RequestMapping("/findAll")
  7. public String findAll(Model model){
  8. System.out.println("表现层:查询所有账户...");
  9. // 调用service的方法
  10. List<Account> list = accountService.findAll();
  11. model.addAttribute("list",list);
  12. return "list";
  13. }
  14. /**
  15. * 保存
  16. * @return
  17. */
  18. @RequestMapping("/save")
  19. public void save(Account account, HttpServletRequest request, HttpServletResponse response) throws IOException {
  20. accountService.saveAccount(account);
  21. response.sendRedirect(request.getContextPath()+"/account/findAll");
  22. return;
  23. }
  24. }

5.测试结果

查询:

保存: