7.1 Spring MVC起步

7.1.1 跟踪Spring MVC的请求

在spring MVC中,DispatcherServlet是前端控制器,客户端的请求以及各种请求(处理器映射器,处理器适配器,视图解析器等返回的结果都是它转发给下一个模块)的转发都是它控制的。

1)前端发送请求;2)DispatcherServlet(前端控制器),接受请求,根据url通过处理器映射器会返回一个结果(这个结果是啥,不是很清楚);2)然后这个结果又返回给前端控制器,前端控制器根据这个结果,通过处理器适配器找到要请求的controller(通常我们写成Controller层,实际是Handler);3)controller处理业务,业务处理完之后,会返回ModelAndView(逻辑视图名,或者是数据);4)然后前端控制器将controller返回的ModelAndView转发给视图解析器;视图解析器将数据渲染成jsp页面(或者其他形式的显示页面)或者根据逻辑视图名找到物理视图;5)前端控制器根据视图解析的结果相应客户端。(传智这个讲的非常清晰,可以看看,下面补张图)

7.1.2 搭建Spring MVC

搭建springmvc之前先学会用maven+eclipse搭建一个web工程:

eclipse+maven搭建web工程之创建

eclipse+maven搭建web工程之发布和访问

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

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>chapter07</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11
12
13
14   </welcome-file-list>
15   <!-- 配置前端控制器 -->
16   <servlet>
17        <servlet-name>spitter</servlet-name>
18        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
19       <load-on-startup>1</load-on-startup>
20   </servlet>
21   <servlet-mapping>
22       <servlet-name>spitter</servlet-name>
23       <url-pattern>/</url-pattern>
24   </servlet-mapping>
25 </web-app>

View Code

同时,在WEB-INF下创建一个spitter-servlet.xml文件,该文件主要是Spring的应用文件:

 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     xmlns:p="http://www.springframework.org/schema/p"
 8     xmlns:mvc="http://www.springframework.org/schema/mvc"
 9     xsi:schemaLocation="http://www.springframework.org/schema/beans
10         http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
11         http://www.springframework.org/schema/context
12         http://www.springframework.org/schema/context/spring-context-4.0.xsd
13         http://www.springframework.org/schema/aop
14         http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
15         http://www.springframework.org/schema/tx
16         http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
17         http://www.springframework.org/schema/mvc
18         http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
19
20     <!-- 开启mvc注解驱动 -->
21     <mvc:annotation-driven/>
22
23      <!--注解形式的 组件扫描 -->
24      <context:component-scan
25         base-package="com.springinaction.*"></context:component-scan>
26
27
28     <!-- 静态文件访问的配置 -->
29     <mvc:resources location="/js/" mapping="/js/**"/>
30     <mvc:resources location="/css/" mapping="/css/**"/>
31     <mvc:resources location="/img/" mapping="/img/**"/>
32
33 </beans>

View Code

7.2 编写控制器

7.2.1 配置注解驱动的Spring MVC

Spring自带了多个处理器映射器实现供我们选择:

  • BeanNameUrlHandlerMapping:根据控制器Bean的名字将控制器映射到URL
  • ControllerBeanNameHandlerMapping:与BeanNameUrlHandlerMapping类似,根据空控制器Bean的名字将控制器映射到URL。使用该处理器映射实现,Bean的名字不需要遵循URL的约定。
  • ControllerClassNameHandlerMapping:通过使用控制器的类名作为URL基础将控制器映射到URl
  • SimpleUrlHandlerMapping:使用定义在Spring应用上线文的属性集合将控制器映射到URL。

以上均需要配置一个Bean,但是mvc有个注解驱动<mvc:annotation-driven>,可以代替处理器映射器,处理器适配器等等

7.2.2 定义首页的控制器

pom.xml文件:

  1 <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">
  2   <modelVersion>4.0.0</modelVersion>
  3   <groupId>com.springinaction.chapter07</groupId>
  4   <artifactId>chapter07</artifactId>
  5   <version>0.0.1-SNAPSHOT</version>
  6   <packaging>war</packaging>
  7   <dependencies>
  8       <!-- log4j的依赖 -->
  9       <dependency>
 10         <groupId>log4j</groupId>
 11         <artifactId>log4j</artifactId>
 12         <version>1.2.14</version>
 13     </dependency>
 14     <!-- junit的依赖 -->
 15       <dependency>
 16           <groupId>junit</groupId>
 17           <artifactId>junit</artifactId>
 18           <version>4.11</version>
 19           <scope>test</scope>
 20       </dependency>
 21       <!-- spring beans的依赖 -->
 22       <dependency>
 23           <groupId>org.springframework</groupId>
 24           <artifactId>spring-beans</artifactId>
 25           <version>4.2.9.RELEASE</version>
 26       </dependency>
 27       <!-- spring context(应用上下文的依赖) -->
 28       <!-- <dependency>
 29           <groupId>org.springframework</groupId>
 30           <artifactId>spring-context</artifactId>
 31           <version>4.2.9.RELEASE</version>
 32       </dependency> -->
 33       <!-- JSR-330的标准注解 -->
 34       <dependency>
 35           <groupId>javax.inject</groupId>
 36           <artifactId>javax.inject</artifactId>
 37           <version>1</version>
 38       </dependency>
 39       <!-- spring aspects依赖,AOP用到 -->
 40       <!-- <dependency>
 41         <groupId>org.springframework</groupId>
 42         <artifactId>spring-aspects</artifactId>
 43         <version>4.2.9.RELEASE</version>
 44     </dependency> -->
 45     <!-- 配置数据源的链接dbcp( 提供链接池功能)-->
 46       <!-- <dependency>
 47         <groupId>commons-dbcp</groupId>
 48         <artifactId>commons-dbcp</artifactId>
 49         <version>1.3</version>
 50     </dependency> -->
 51     <!-- mysql的链接的驱动包 -->
 52     <!-- <dependency>
 53         <groupId>mysql</groupId>
 54         <artifactId>mysql-connector-java</artifactId>
 55         <version>5.1.40</version>
 56     </dependency> -->
 57     <!-- spring-jdbc配置数据源 -->
 58     <!-- <dependency>
 59         <groupId>org.springframework</groupId>
 60         <artifactId>spring-jdbc</artifactId>
 61         <version>4.2.9.RELEASE</version>
 62     </dependency> -->
 63     <!-- <dependency>
 64         <groupId>org.springframework</groupId>
 65         <artifactId>spring-jdbc</artifactId>
 66         <version>3.1.0.RELEASE</version>
 67     </dependency> -->
 68     <!-- spring orm -->
 69     <!-- <dependency>
 70         <groupId>springframework</groupId>
 71         <artifactId>spring-orm</artifactId>
 72         <version>1.1.3</version>
 73     </dependency> -->
 74     <!-- spring orm -->
 75     <!-- <dependency>
 76         <groupId>org.springframework</groupId>
 77         <artifactId>spring-orm</artifactId>
 78         <version>4.2.9.RELEASE</version>
 79     </dependency> -->
 80     <!-- mybatis jar -->
 81     <!-- <dependency>
 82         <groupId>org.mybatis</groupId>
 83         <artifactId>mybatis</artifactId>
 84         <version>3.2.2</version>
 85     </dependency> -->
 86     <!-- mybatis spring jar -->
 87     <!-- <dependency>
 88         <groupId>org.mybatis</groupId>
 89         <artifactId>mybatis-spring</artifactId>
 90         <version>1.3.0</version>
 91     </dependency> -->
 92     <!-- spring mvc的jar包 -->
 93     <dependency>
 94         <groupId>org.springframework</groupId>
 95         <artifactId>spring-webmvc</artifactId>
 96         <version>4.2.8.RELEASE</version>
 97     </dependency>
 98
 99     <!-- 编写测试用例用到,初次用 -->
100     <dependency>
101         <groupId>org.mockito</groupId>
102         <artifactId>mockito-all</artifactId>
103         <version>1.10.19</version>
104     </dependency>
105
106
107   </dependencies>
108
109
110
111   <build>
112         <!-- 配置插件 -->
113         <plugins>
114             <plugin>
115                 <groupId>org.apache.tomcat.maven</groupId>
116                 <artifactId>tomcat7-maven-plugin</artifactId>
117                 <configuration>
118                     <port>8080</port>
119                     <path>/</path>
120                     <url>localhost:8080/</url>
121                     <username>tomcat</username>
122                     <password>tomcat</password>
123                 </configuration>
124             </plugin>
125         </plugins>
126     </build>
127
128 </project>

View Code

controller:

 1 package com.springinaction.controller;
 2
 3 import java.util.Map;
 4
 5 import javax.inject.Inject;
 6
 7 import org.springframework.stereotype.Controller;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9
10 import com.springinaction.service.SpitterService;
11
12
13 @Controller
14 public class HomeController {
15
16     public static final int DEFAULT_SPITTLES_PER_PAGE = 25;
17
18     private SpitterService spitterService;
19
20     @Inject
21     public HomeController(SpitterService spitterService){
22         this.spitterService = spitterService;
23     }
24
25     @RequestMapping({"/","/home"})
26     public String showHomePage(Map<String,Object> model){
27         model.put("spittles", spitterService.getRecentSpittles(DEFAULT_SPITTLES_PER_PAGE));
28
29         return "home";
30     }
31
32
33 }

View Code

model:

1 package com.springinaction.model;
2
3 public class Spitte {
4
5 }

View Code

service:

1 package com.springinaction.service;
2
3 public interface SpitterService {
4
5     Object getRecentSpittles(int defaultSpittlesPerPage);
6
7 }

View Code

serviceImpl:

 1 package com.springinaction.service.impl;
 2
 3 import com.springinaction.service.SpitterService;
 4
 5 public class SpitterServiceImpl implements SpitterService {
 6
 7     @Override
 8     public Object getRecentSpittles(int defaultSpittlesPerPage) {
 9
10         return null;
11     }
12
13 }

View Code

测试用例:

 1 package com.springinaction.test;
 2
 3 import static com.springinaction.controller.HomeController.*;
 4 import static org.junit.Assert.*;
 5 import static org.mockito.Mockito.*;
 6 import static java.util.Arrays.*;
 7
 8 import java.util.HashMap;
 9 import java.util.List;
10
11 import org.junit.After;
12 import org.junit.AfterClass;
13 import org.junit.Before;
14 import org.junit.BeforeClass;
15 import org.junit.Test;
16
17 import com.springinaction.controller.HomeController;
18 import com.springinaction.model.Spitte;
19 import com.springinaction.service.SpitterService;
20
21 public class HomeControllerTest {
22
23     @Test
24     public void test() {
25         //模拟SpitterService
26         List<Spitte> expectedSpittles = asList(new Spitte(),new Spitte(),new Spitte());
27         SpitterService spitterService = mock(SpitterService.class);
28
29         when(spitterService.getRecentSpittles(DEFAULT_SPITTLES_PER_PAGE))
30         .thenReturn(expectedSpittles);
31
32         //创建控制器
33         HomeController controller = new HomeController(spitterService);
34         HashMap<String, Object> model = new HashMap<String,Object>();
35         String viewName = controller.showHomePage(model);//调用处理方
36
37         //对处理方法进行对比
38         assertEquals("home", viewName);
39         verify(spitterService).getRecentSpittles(DEFAULT_SPITTLES_PER_PAGE);
40     }
41
42 }

View Code

上面测试用例写的懵逼啊,但是测试是通过的,又涨姿势了,若是想用某个包下面的某个类的方法,import static 包名.类名.*;这样就可以了。

7.2.3 解析视图

视图解析器的工作是将逻辑视图的名字与org.springframework.web.servlet.View的实现相匹配。视图解析器就是将名称与JSP进行匹配。

解析内部视图:InternalResourceViewResolver是一个面向约定的元素。他将逻辑视图名称解析为View对象,而该对象将渲染的任务委托给Web应用程序上下文中的一个模板。

在spitter-servlet.xml配置视图解析器的bean:

1 <!-- 视图解析器 -->
2     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
3         <!-- 这个属性之前没见过,是因为home.jsp使用了一些JSTL标签, -->
4         <property name="prefix" value="/WEB-INF/views/*"></property>
5         <property name="suffix" value="/WEB-INF/.jsp"></property>
6     </bean>

View Code

这本书的下面用到了一个Tiles布局视图,看着懵逼,没工夫研究他。下面我自己根据学习的知识(传智的视频,这里只是说他视频资源非常好,没有广告的嫌疑,网上都可以下载到的资源)搭建一个从前台展示到controller的一个请求和数据回显的过程。

首先整个工程结构还是如上,

1.上面讲述一种的spitter-servlet.xml(这是书本里叫的名字,后面我重命名另外一个名字springmvc.xml)的配置,是将其放在了WEB-INF下面,这是web.xml加载spitter-servlet.xml的默认位置,而且命名必须是*-servlet.xml,还有第二种配法,是将其其位置统一放在了src/main/resources下面的文件夹下(我上面的搭建过程还自动生成了几个xml文件,自动生成的删掉或者重命名成自己需要的,如下图),maven工程项目中的大部分xml配置文件都放在这个文件夹下,在springmvc.xml文件中做与spitter-servlet.xml相同的配置,因为不用spitter-servlet配置,所以最好将之前的HomeController里的注解注释掉。

2.想连接数据库做一个查询分页的效果(并且采用jquey-EasyUi的控件尝试一下,所以),所以搞定准备工作先,

  2.1数据库(mysql)里建立一张user表(id主键)

  

 2.2将需要的mybatis依赖的jar文件,spring的jar文件等等通过pom.xml引进来,里面应该是大部分引进来了,有需要的后面再添加:

  1 <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">
  2   <modelVersion>4.0.0</modelVersion>
  3   <groupId>com.springinaction.chapter07</groupId>
  4   <artifactId>chapter07</artifactId>
  5   <version>0.0.1-SNAPSHOT</version>
  6   <packaging>war</packaging>
  7   <dependencies>
  8       <!-- log4j的依赖 -->
  9       <dependency>
 10         <groupId>log4j</groupId>
 11         <artifactId>log4j</artifactId>
 12         <version>1.2.14</version>
 13     </dependency>
 14     <!-- junit的依赖 -->
 15       <dependency>
 16           <groupId>junit</groupId>
 17           <artifactId>junit</artifactId>
 18           <version>4.11</version>
 19           <scope>test</scope>
 20       </dependency>
 21       <!-- 引入jstl标签库的jar -->
 22       <dependency>
 23         <groupId>javax.servlet</groupId>
 24         <artifactId>jstl</artifactId>
 25         <version>1.2</version>
 26     </dependency>
 27     <!-- 引入tiles标签库的jar -->
 28     <!-- <dependency>
 29         <groupId>org.apache.tiles</groupId>
 30         <artifactId>tiles-jsp</artifactId>
 31         <version>2.2.2</version>
 32     </dependency> -->
 33       <!-- spring beans的依赖 -->
 34       <dependency>
 35           <groupId>org.springframework</groupId>
 36           <artifactId>spring-beans</artifactId>
 37           <version>4.2.9.RELEASE</version>
 38       </dependency>
 39       <!-- spring context(应用上下文的依赖) -->
 40       <dependency>
 41           <groupId>org.springframework</groupId>
 42           <artifactId>spring-context</artifactId>
 43           <version>4.2.9.RELEASE</version>
 44       </dependency>
 45       <!-- JSR-330的标准注解 -->
 46       <!-- <dependency>
 47           <groupId>javax.inject</groupId>
 48           <artifactId>javax.inject</artifactId>
 49           <version>1</version>
 50       </dependency> -->
 51       <!-- spring aspects依赖,AOP用到 -->
 52       <dependency>
 53         <groupId>org.springframework</groupId>
 54         <artifactId>spring-aspects</artifactId>
 55         <version>4.2.9.RELEASE</version>
 56     </dependency>
 57     <!-- 配置数据源的链接dbcp( 提供链接池功能)-->
 58       <dependency>
 59         <groupId>commons-dbcp</groupId>
 60         <artifactId>commons-dbcp</artifactId>
 61         <version>1.3</version>
 62     </dependency>
 63     <!-- mysql的链接的驱动包 -->
 64     <dependency>
 65         <groupId>mysql</groupId>
 66         <artifactId>mysql-connector-java</artifactId>
 67         <version>5.1.40</version>
 68     </dependency>
 69     <!-- spring-jdbc配置数据源 -->
 70     <dependency>
 71         <groupId>org.springframework</groupId>
 72         <artifactId>spring-jdbc</artifactId>
 73         <version>4.2.9.RELEASE</version>
 74     </dependency>
 75     <!-- <dependency>
 76         <groupId>org.springframework</groupId>
 77         <artifactId>spring-jdbc</artifactId>
 78         <version>3.1.0.RELEASE</version>
 79     </dependency> -->
 80     <!-- spring orm -->
 81     <!-- <dependency>
 82         <groupId>springframework</groupId>
 83         <artifactId>spring-orm</artifactId>
 84         <version>1.1.3</version>
 85     </dependency> -->
 86     <!-- spring orm -->
 87     <!-- <dependency>
 88         <groupId>org.springframework</groupId>
 89         <artifactId>spring-orm</artifactId>
 90         <version>4.2.9.RELEASE</version>
 91     </dependency> -->
 92     <!-- mybatis jar -->
 93     <dependency>
 94         <groupId>org.mybatis</groupId>
 95         <artifactId>mybatis</artifactId>
 96         <version>3.2.2</version>
 97     </dependency>
 98     <!-- mybatis spring jar -->
 99     <dependency>
100         <groupId>org.mybatis</groupId>
101         <artifactId>mybatis-spring</artifactId>
102         <version>1.3.0</version>
103     </dependency>
104     <!-- spring mvc的jar包 -->
105     <dependency>
106         <groupId>org.springframework</groupId>
107         <artifactId>spring-webmvc</artifactId>
108         <version>4.2.8.RELEASE</version>
109     </dependency>
110
111     <!-- 编写测试用例用到,初次用 -->
112     <dependency>
113         <groupId>org.mockito</groupId>
114         <artifactId>mockito-all</artifactId>
115         <version>1.10.19</version>
116     </dependency>
117
118
119   </dependencies>
120
121
122
123   <build>
124         <!-- 配置插件 -->
125         <plugins>
126             <plugin>
127                 <groupId>org.apache.tomcat.maven</groupId>
128                 <artifactId>tomcat7-maven-plugin</artifactId>
129                 <configuration>
130                     <port>8080</port>
131                     <path>/</path>
132                     <url>localhost:8080/</url>
133                     <username>tomcat</username>
134                     <password>tomcat</password>
135                 </configuration>
136             </plugin>
137         </plugins>
138     </build>
139
140 </project>

View Code

  2.3 介绍一个逆向工程的工具(有点吊,很好使)下载地址

  

 下面是generatorConfig.xml配置:1、配置数据库的连接信息,我的user表在test库里面,2、配置生成的po(其实就是model了,我习惯了model)类的位置,3、配置生成的mapper接口(其实就是dao层的接口)的位置,4、配置mapper映射文件的位置(mybatis主要就是写这个mapper.xml文件,但是有逆向工程了,还写个毛线),5、配数据库中要使用的表名,这几个配置好,直接运行GeneratorSqlmap.java中的main方法,就会生成了(若是没有看到,请刷新工程),如下图:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration
 3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 5
 6 <generatorConfiguration>
 7     <context id="testTables" targetRuntime="MyBatis3">
 8         <commentGenerator>
 9             <!-- 是否去除自动生成的注释 true:是 : false:否 -->
10             <property name="suppressAllComments" value="true" />
11         </commentGenerator>
12         <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
13         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
14             connectionURL="jdbc:mysql://localhost:3306/test" userId="root"
15             password="mysql">
16         </jdbcConnection>
17         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
18             NUMERIC 类型解析为java.math.BigDecimal -->
19         <javaTypeResolver>
20             <property name="forceBigDecimals" value="false" />
21         </javaTypeResolver>
22
23         <!-- targetProject:生成PO类的位置 -->
24         <javaModelGenerator targetPackage="com.springinaction.model"
25             targetProject=".\src">
26             <!-- enableSubPackages:是否让schema作为包的后缀 -->
27             <property name="enableSubPackages" value="false" />
28             <!-- 从数据库返回的值被清理前后的空格 -->
29             <property name="trimStrings" value="true" />
30         </javaModelGenerator>
31         <!-- targetProject:mapper映射文件生成的位置 -->
32         <sqlMapGenerator targetPackage="com.springinaction.mapper"
33             targetProject=".\src">
34             <!-- enableSubPackages:是否让schema作为包的后缀 -->
35             <property name="enableSubPackages" value="false" />
36         </sqlMapGenerator>
37         <!-- targetPackage:mapper接口生成的位置 -->
38         <javaClientGenerator type="XMLMAPPER"
39             targetPackage="com.springinaction.mapper"
40             targetProject=".\src">
41             <!-- enableSubPackages:是否让schema作为包的后缀 -->
42             <property name="enableSubPackages" value="false" />
43         </javaClientGenerator>
44         <!-- 指定数据库表 -->
45         <table schema="" tableName="user"></table>
46
47
48     </context>
49 </generatorConfiguration>

View Code

3、配置一些xml文件:

  3.1配置mybatis的sqlMapConfig.xml,在src/main/resources下面,创建mybatis/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
7 </configuration>

View Code

  3.2在src/main/resources创建resource/db.properties的数据库连接配置文件

1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
3 jdbc.username=root
4 jdbc.password=mysql

View Code

  3.3在spring文件夹配置dao层(即mapper接口层)的spring bean容器applicationContext-dao.xml,里面主要配置数据源,和扫描mapper接口的bean配置(这里只是扫描mapper接口,而mapper.xml却扫描不到,下面有关于这个问题的处理):

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
 3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
 7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
 8     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
 9
10     <!-- 数据库链接池 -->
11     <!-- 加载配置文件 -->
12     <context:property-placeholder location="classpath:resource/*.properties"/>
13     <bean  id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
14         <property name="url" value="${jdbc.url}"></property>
15         <property name="username" value="${jdbc.username}"></property>
16         <property name="password" value="${jdbc.password}"></property>
17         <property name="driverClassName" value="${jdbc.driver}"></property>
18         <property name="initialSize" value="5"></property>
19          <property name="maxActive" value="10"></property>
20     </bean>
21
22     <!-- 配置SqlSessionFactory -->
23     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
24
25         <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"></property>
26         <property name="dataSource" ref="dataSource"></property>
27     </bean>
28     <!-- 配置扫描包 -->
29     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
30         <property name="basePackage" value="com.springinaction.mapper"></property>
31     </bean>
32
33 </beans>

View Code

  3.4在spring文件夹配置service的spring bean容器applicationContext-service.xml,这里主要扫面service实现类,

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
 3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
 7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
 8     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
 9
10         <!-- 扫描包加载Service实现类 -->
11         <context:component-scan base-package="com.springinaction.service"></context:component-scan>
12
13 </beans>

View Code

  3.5在spring文件夹中配置事务的spring bean容器applicationContext-trans.xml,这里主要是配置事务管理的:

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
 3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
 7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
 8     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
 9
10     <!-- 事务管理器 -->
11     <bean id="transactionManager"
12             class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
13         <property name="dataSource" ref="dataSource"></property>
14     </bean>
15
16     <!-- 通知 -->
17     <tx:advice id="txAdvice" transaction-manager="transactionManager">
18         <tx:attributes>
19             <!-- 传播行为 -->
20             <tx:method name="save*" propagation="REQUIRED"/>
21             <tx:method name="insert*" propagation="REQUIRED"/>
22             <tx:method name="add*" propagation="REQUIRED"/>
23             <tx:method name="create*" propagation="REQUIRED"/>
24             <tx:method name="delete" propagation="REQUIRED"/>
25             <tx:method name="update*" propagation="REQUIRED"/>
26             <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
27             <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
28             <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
29         </tx:attributes>
30     </tx:advice>
31
32     <!-- 切面 -->
33     <aop:config>
34         <aop:advisor advice-ref="txAdvice"
35             pointcut="execution(* com.springinaction.service.*.*(..))"/>
36     </aop:config>
37
38
39 </beans>

View Code

以上的几个配置文件其实可以直接集中配置到springmvc.xml中,不过分离后,层面更加清晰,分离之后这几个文件还要在web.xml文件中配置一项,让其加载进来:

4.配置web.xml,如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>chapter07</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11
12
13
14   </welcome-file-list>
15   <!-- 配置前端控制器 -->
16   <!-- <servlet>
17        <servlet-name>spitter</servlet-name>
18        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
19       <load-on-startup>1</load-on-startup>
20   </servlet>
21   <servlet-mapping>
22       <servlet-name>spitter</servlet-name>
23       <url-pattern>/</url-pattern>
24   </servlet-mapping> -->
25
26   <!-- 前端控制器的第二种配法 -->
27
28   <servlet>
29        <servlet-name>springmvc</servlet-name>
30        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
31        <!-- 注意这里和上面的配置不一样,若是采取第二种配置,必须配置初始化参数的位置,加载springmvc.xml-->
32       <init-param>
33           <param-name>contextConfigLocation</param-name>
34           <param-value>classpath:spring/springmvc.xml</param-value>
35       </init-param>
36       <load-on-startup>1</load-on-startup>
37   </servlet>
38   <servlet-mapping>
39       <servlet-name>springmvc</servlet-name>
40       <url-pattern>/</url-pattern>
41   </servlet-mapping>
42
43   <!-- 加载spring容器 -->
44   <context-param>
45       <param-name>contextConfigLocation</param-name>
46       <param-value>classpath:spring/applicationContext-*.xml</param-value>
47   </context-param>
48   <listener>
49       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
50   </listener>
51 </web-app>

View Code

下面maven build运行一下,可以访问到index.jsp页面,maven build在搭建maven工程里面有涉及,说明目前配置没多大问题,我们进行开发了:

首先将刚才逆向工程的文件copy进来,然后开发service、controller

UserService:

 1 package com.springinaction.service;
 2
 3 import java.util.List;
 4
 5 import com.springinaction.model.User;
 6
 7 public interface UserService {
 8
 9     List<User> selectAllUser();
10
11 }

View Code

UserServiceImpl:

 1 package com.springinaction.service.impl;
 2
 3 import java.util.List;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7
 8 import com.springinaction.mapper.UserMapper;
 9 import com.springinaction.model.User;
10 import com.springinaction.service.UserService;
11
12 @Service
13 public class UserServiceImpl implements UserService {
14
15     //mapper是逆向工程生成的,方法也是,所以直接调用里面的方法就可以
16     @Autowired
17     private UserMapper userMapper;
18
19     @Override
20     public List<User> selectAllUser() {
21
22         return userMapper.selectByExample(null);
23     }
24
25 }

View Code

UserController:

 1 package com.springinaction.controller;
 2
 3 import java.util.List;
 4
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8
 9 import com.springinaction.model.User;
10 import com.springinaction.service.UserService;
11
12 @Controller
13 public class UserController {
14
15     @Autowired
16     private UserService userService;
17
18     @RequestMapping("/user/userList")
19     public List<User> selectAllUser(){
20         System.out.println(userService.selectAllUser());
21         return userService.selectAllUser();
22     }
23
24 }

View Code

然后开启服务,进行访问,报错:

上面图中说插件不准确,是在pom.xml中的<build>标签中配置一个<resources></resources>,具体如下:

 1 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉 -->
 2         <resources>
 3             <!-- 坑就在这里,视频里就配置第一个resource
 4                 他的目的是把src/main/java/**下面的所有的properties、xml文件拷贝到
 5                 \chapter07\target\classes\com\springinaction\下面对应的文件夹中,
 6              -->
 7             <resource>
 8                 <directory>src/main/java</directory>
 9                 <includes>
10                     <include>**/*.properties</include>
11                     <include>**/*.xml</include>
12                 </includes>
13                 <filtering>false</filtering>
14             </resource>
15             <!-- 我只配了上面那个就报错了,所示找不到spring/文件夹下的spring bean容器文件,
16                 结果我查看\chapter07\target\classes\,确实是哪些文件没有被拷贝进来,于是上面的写法
17                 配置了如下的resource,他就把src/main/resources文件下的哪些配置文件拷贝到\chapter07\target\classes\下面了
18             -->
19             <resource>
20                 <directory>src/main/resources</directory>
21                 <includes>
22                     <include>**/*.properties</include>
23                     <include>**/*.xml</include>
24                 </includes>
25                 <filtering>false</filtering>
26             </resource>
27         </resources>
28         

View Code

这时候访问路径localhost:8080/user/userList,由于没有jsp页面所以报错,但是控制台打印出了从数据库拿到的数据:

源码下载(里面有逆向工程的工具)

下一篇:第7章 使用Spring MVC构建Web程序(二),前端用jquery-EasyUi显示,运用分页插件,进行分页处理。

转载于:https://www.cnblogs.com/huaxueyihao/p/6671287.html

第7章 使用Spring MVC构建Web程序(一)相关推荐

  1. 第22章 迈向Spring MVC的旅程

    第22章 迈向Spring MVC的旅程 本章内容 Servlet独行天下的时代 繁盛一时的JSP时代 Servlet与JSP的联盟 数英雄人物,还看今朝 "子曰:温故而知新",如 ...

  2. 深入解析Spring MVC与Web Flow

    深入解析Spring MVC与Web Flow 诚邀加入图灵俱乐部:http://groups.csdn.net/Turingbooks "本书为Spring社区弥补了一大空白." ...

  3. ssm 上传图片到mysql_ssm(Spring+Spring MVC+MyBatis)+Web Uploader开发图片文件上传实例,支持批量上传,拖拽上传,复制粘贴上传...

    项目描述 ssm开发一个上传图片的项目 用百度的插件 Web Uploader 上传,不会的去它的官网找API文档 官网的API文档还是比较 坑的.... 百度插件  Web Uploader 上传文 ...

  4. restful api_将Spring MVC RESTful Web服务迁移到Spring 4

    restful api 1引言 Spring 4为MVC应用程序带来了一些改进. 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试 ...

  5. Idea 七步建立Spring Mvc 的web项目,极其简单

     Idea 7步建立Spring Mvc 的web项目   1.新建项目 新建的结构是这样的 2. 添加controller的包.文件:添加jsp的文件夹和jsp文件 文件名为HelloWorldCo ...

  6. Spring MVC 搭建web项目示例

    转载自:Bird鸟人 的博文<Spring MVC 搭建web项目示例> https://blog.csdn.net/wcc27857285/article/details/8174903 ...

  7. 将Spring MVC RESTful Web服务迁移到Spring 4

    1引言 Spring 4为MVC应用程序带来了一些改进 . 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试这些改进.以下几点总结 ...

  8. wadl 生成java_在Spring MVC REST应用程序中自动生成WADL

    wadl 生成java 上一次我们学习了WADL的基础知识 . 语言本身并没有那么有趣,只写了一篇有关它的文章,但是本文的标题揭示了为什么我们需要这些知识. JSR 311的许多实现:JAX-RS:R ...

  9. 在Spring MVC REST应用程序中自动生成WADL

    上一次我们学习了WADL的基础知识 . 语言本身并没有那么有趣,只写了一篇有关它的文章,但是本文的标题揭示了为什么我们需要这些知识. JSR 311的许多实现:JAX-RS:RESTful Web服务 ...

最新文章

  1. memcached 实验论文
  2. mybatis增删改查快速实现!!!
  3. 创建新的option
  4. android中可以有两个焦点吗,android – 如何通过焦点在屏幕上调整两个片段的大小?...
  5. 远控免杀专题6---Venom免杀
  6. 数据结构学不会?视频+项目+网站大全,还有独家学习方法
  7. mysql libs 5.1.73_【MySQL案例】mysql-libs-5.1.73-3.el6
  8. 第九周项目6-穷举法之换分币
  9. Ubuntu系统详细分析【1-10】
  10. doubango的帧率太低,怎么解决?
  11. ddm模型公式_绝对估值法DDM、DCF模型和RNAV简介
  12. jenkins定时构建
  13. 覆盖和覆盖D2D通信网络的传输容量分析(Matlab代码实现)
  14. PHP格式化数组输出样式
  15. 单幅散焦图像的深度恢复
  16. 各大电商平台竞价比价API,实时监控类目大数据
  17. 解决阿里云盾控制台wordpress IP验证不当漏洞
  18. 《数字营销实战》思维导图
  19. 计算机勾兑双绝是谁发明,舌尖上的五粮液——记勾兑大师范玉平(图)
  20. Mac系统显示已连接(可以打开qq)但是无法打开浏览器解决方案

热门文章

  1. SQLi LABS Less-21
  2. java valueof null,String.valueOf(null) 遇到的坑
  3. python爬虫之json数据处理
  4. CentOS7 修改静态IP
  5. RequireJS模块化后JS压缩合并
  6. Using Swift with Cocoa and Objective-C(Swift 2.0版):开始--基础设置-备
  7. python--httplib模块使用
  8. 【java】求两个字符串的最长公共子串
  9. 系统维护好帮手—Starter
  10. C++ string类常用函数