Spring MVC 在Spring的体系中和JdbcTemplate互相独立,分属于不同的jar包,使用默认位置不同的spring配置文件。
Spring JdbcTemplate基本上完全可以单独拿来使用。也就是说,假如你在写一个Web项目,而且你打算用纯粹的JSP来实现网页的显示、逻辑处理也完全没有任何问题,你只需要在你的JSP页面中创建Spring JdbcTemplate的对象,使用它的方法,在SpringJdbc环境下编写java的方法,让你的JSP页面去使用这些方法,一点问题没有。
Spring JDBC相当于你过去所有对mysql oracle等等一堆数据库的DAO的代码的一个封装,你不必自己再写那些和数据库交互的垃圾代码了。“不用自己重造轮子”
相对应的,Spring MVC相当于你过去写的JSP文件。
但是我估计Spring MVC应该没办法单独拿出来与你之前写的POJO进行交互。也不一定。
下面我们图解一下,如何在eclipse中为你的maven项目配置Spring MVC,然后委托Spring MVC进行页面交互的工作。
既然是maven构建的项目,首先当然是整理pom.xml文件啦,这个文件是整个项目所有调用资源resource 的也就是jar文件的仓库,如下所示:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>RepositoryCheck</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>RepositoryCheck Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sf.ucanaccess</groupId>
<artifactId>ucanaccess</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.7-dmr</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<finalName>RepositoryCheck</finalName>
</build>
<groupId>tsmi.com</groupId>
</project>
下图所示这个dependency 是spring mvc的依赖
之前我们已经了解过eclipse这个开发环境中如何配置tomcat服务器
既然要做的是一个运行在java服务器上的web项目,那么一切的祖宗都是Java EE,这种项目的配置文件(不管你使用spring做项目还是手写jsp代码)都是标准的web.xml文件,这个文件位于webapp的 WEB-INF根目录中
所有的Java EE标准的网站,只要是运行在tomcat这种java服务器中,都会配置这个文件,服务器start的一开始也会第一时间去访问这个文件,所有的访问请求都需要依据这个文件配置的“拦截器”或者servlet来被判断,由哪个来进行响应。过去的struts就相当于这样的一种被web.xml文件来配置成“拦截器”的技术。拦截器、过滤器、都差不多。
但是现在,我们不用struts了我们要用Spring MVC,Spring MVC相当于取代了Struts。
下面在web.xml中配置Spring MVC
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>RepositoryCheck HUB</display-name>
<!-- dao和service层的Spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- web层的Spring配置文件 -->
<servlet>
<servlet-name>ruku</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ruku</servlet-name>
<url-pattern>*.html</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>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<!-- 默认入口访问文件 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
其中
这一部分用来为你的项目安排一个spring mvc专用的配置文件,告诉你这个jar在哪里,然后看到名字叫做ruku,所以你的web.xml同一个目录下,必须有一个名字叫做ruku-servlet.xml的文件,这个文件就是spring-mvc的spring配置文件。
到这一步为止,我们的项目已经有了两个spring配置文件:
1.dao和service这两个层次使用的配置文件,这个配置文件我命名为它最常见的名字applicationContext.xml,它位于maven项目resouces文件夹下
<?xml version="1.0" encoding="UTF-8"?>
<!-- dao和service层的Spring配置文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
classpath:/org/springframework/beans/factory/xml/spring-beans.xsd
http://www.springframework.org/schema/context
classpath:/org/springframework/context/config/spring-context.xsd
http://www.springframework.org/schema/aop
classpath:/org/springframework/aop/config/spring-aop.xsd
http://www.springframework.org/schema/tx
classpath:/org/springframework/transaction/config/spring-tx.xsd">
<context:component-scan base-package="com.tsmi.RepositoryCheck.dao"/>
<context:component-scan base-package="com.tsmi.RepositoryCheck.service"/>
<context:component-scan base-package="com.tsmi.RepositoryCheck.web"/>
<!-- 配置ucanaccess数据源 -->
<bean id="dsmysql" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="net.ucanaccess.jdbc.UcanaccessDriver"
p:url="jdbc:ucanaccess://\\\\172.16.90.105\\share\\入库检验be.mdb"
p:username="admin"
p:password=""
p:defaultAutoCommit="true" />
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dsmysql" />
<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dsmysql" />
</beans>
2.spring mvc专用的配置文件,这个配置文件的名字很讲究,必须是 名字+“后缀”的形式。其中后缀是-servlet.xml,名字就是web.xml文件中手动命名的名字。
spring mvc配置文件的内容大概是这样:
<!--web层spring配置文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
classpath:/org/springframework/beans/factory/xml/spring-beans.xsd
http://www.springframework.org/schema/context
classpath:/org/springframework/context/config/spring-context.xsd
http://www.springframework.org/schema/mvc
classpath:/org/springframework/web/servlet/config/spring-mvc.xsd">
<!-- 装载web层的controller -->
<context:component-scan base-package="com.tsmi.RepositoryCheck.web" />
<!-- 为视图解析器 配置前缀和后缀-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
</beans>
目前主要的功能就是 把web层的controller向上注册给spring 容器
然后配置了一个视图解析器
经过上述配置,你的项目就可以使用spring mvc进行搭建了,我们安排的访问过程:
1.浏览器中输入url
2.浏览器中显示一个table,让我们输入用户名和密码
3.如果我们输入正确,后台service代码就把密码改成20171030这个字符串。
打开eclipse中配置的tomcat服务器,访问http://localhost:6054/RepositoryCheck/ 这个url
我们看看
默认访问文件是根目录下的index.html,这个文件十分清爽
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index page</title>
</head>
<body>
</body>
</html>
空无一物的文件有个调用?你的web.xml文件已经说了,所有html后缀的文件,必须交给org.springframework.web.servlet.DispatcherServlet来统一过滤、拦截、判断,事实上也就是交给了ruku-servlet.xml
下面看看ruku-servle.xml
这个文件只配置了一个web层路径,也就是,只有这个目录下 添加了@Controller标识的POJO才会被spring认为是 handler
spring容器一看,我靠,就一个文件:UserController.java
spring容器让UserController.java文件的highfive()方法出来接客,要做的工作很简单,直接跳转到
我靠,spring mvc怎么知道这串神秘代码的含义就是要跳转到那个jsp呢?
因为你在ruku-servlet.xml中配置过啊:
学名叫做 视图解析器,英文名字叫做:ViewResolver
这只是众多视图解析器中的一个,它是spring默认的视图解析器
所以你一开始看到的table就是
form提交以后,交给changepwd.html这个url
重复上面的过程,由spring mvc的配置文件DispatcherServlet来统一过滤。
这一次,还是交给UserController.java
这个方法的代码我们来看看:
@RequestMapping("/changepwd")
public ModelAndView createUser(User user1) {
uss.updateUserPWD(user1.getSrName(), user1.getSrPwd(), "20171030");
ModelAndView m1 = new ModelAndView();
m1.setViewName("bingo");
m1.addObject("user", user1);
return m1;
}
这个方法,调用了spring 的底层内容,也就是之前写的dao和service
返回值是一个ModelAndView
又跳转一次而已。整个过程描述完毕。