Spring MVC的配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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
又跳转一次而已。整个过程描述完毕。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
26天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
169 73
|
3月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
66 4
|
2月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
73 0
|
3月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
72 0
|
1天前
|
监控 Java 数据库连接
Spring c3p0配置详解
在Spring项目中配置C3P0数据源,可以显著提高数据库连接的效率和应用程序的性能。通过合理的配置和优化,可以充分发挥C3P0的优势,满足不同应用场景的需求。希望本文的详解和示例代码能为开发者提供清晰的指导,帮助实现高效的数据库连接管理。
24 10
|
26天前
|
Java Spring
【Spring配置相关】启动类为Current File,如何更改
问题场景:当我们切换类的界面的时候,重新启动的按钮是灰色的,不能使用,并且只有一个Current File 项目,下面介绍两种方法来解决这个问题。
|
26天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
26天前
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
1月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
106 14
|
1月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
66 6