Spring MVC的配置

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Spring MVC 在Spring的体系中和JdbcTemplate互相独立,分属于不同的jar包,使用默认位置不同的spring配置文件。 Spring JdbcTemplate基本上完全可以单独拿来使用。

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的依赖
screenshot

之前我们已经了解过eclipse这个开发环境中如何配置tomcat服务器
既然要做的是一个运行在java服务器上的web项目,那么一切的祖宗都是Java EE,这种项目的配置文件(不管你使用spring做项目还是手写jsp代码)都是标准的web.xml文件,这个文件位于webapp的 WEB-INF根目录中
screenshot

所有的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>

其中
screenshot
这一部分用来为你的项目安排一个spring mvc专用的配置文件,告诉你这个jar在哪里,然后看到名字叫做ruku,所以你的web.xml同一个目录下,必须有一个名字叫做ruku-servlet.xml的文件,这个文件就是spring-mvc的spring配置文件。

screenshot
到这一步为止,我们的项目已经有了两个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
screenshot
我们看看
screenshot
默认访问文件是根目录下的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
screenshot

下面看看ruku-servle.xml
screenshot
这个文件只配置了一个web层路径,也就是,只有这个目录下 添加了@Controller标识的POJO才会被spring认为是 handler
screenshot
spring容器一看,我靠,就一个文件:UserController.java
screenshot
spring容器让UserController.java文件的highfive()方法出来接客,要做的工作很简单,直接跳转到
screenshot
我靠,spring mvc怎么知道这串神秘代码的含义就是要跳转到那个jsp呢?
因为你在ruku-servlet.xml中配置过啊:
screenshot
学名叫做 视图解析器,英文名字叫做:ViewResolver
这只是众多视图解析器中的一个,它是spring默认的视图解析器
screenshot
所以你一开始看到的table就是
screenshot
form提交以后,交给changepwd.html这个url
重复上面的过程,由spring mvc的配置文件DispatcherServlet来统一过滤。
这一次,还是交给UserController.java
screenshot
这个方法的代码我们来看看:

    @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
又跳转一次而已。整个过程描述完毕。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
SQL Java 数据库连接
(自用)Spring常用配置
(自用)Spring常用配置
13 0
|
29天前
|
缓存 前端开发 Java
Spring MVC 面试题及答案整理,最新面试题
Spring MVC 面试题及答案整理,最新面试题
85 0
|
28天前
|
SQL JavaScript Java
springboot+springm vc+mybatis实现增删改查案例!
springboot+springm vc+mybatis实现增删改查案例!
23 0
|
28天前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
35 1
|
9天前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
6天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
20 3
|
6天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
13 1
|
6天前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
20 3
|
6天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
13 1
|
6天前
|
Java 数据库连接 Spring
简化配置,提高灵活性:Spring中的参数化配置技巧
简化配置,提高灵活性:Spring中的参数化配置技巧
15 0