Spring MVC的配置

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
21天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
119 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
8天前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
9天前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
|
22天前
|
Java 数据库连接 Maven
Spring基础1——Spring(配置开发版),IOC和DI
spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI
Spring基础1——Spring(配置开发版),IOC和DI
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
1月前
|
IDE Java 开发工具
还在为繁琐的配置头疼吗?一文教你如何用 Spring Boot 快速启动,让开发效率飙升,从此告别加班——打造你的首个轻量级应用!
【9月更文挑战第2天】Spring Boot 是一款基于 Spring 框架的简化开发工具包,采用“约定优于配置”的原则,帮助开发者快速创建独立的生产级应用程序。本文将指导您完成首个 Spring Boot 项目的搭建过程,包括环境配置、项目初始化、添加依赖、编写控制器及运行应用。首先需确保 JDK 版本不低于 8,并安装支持 Spring Boot 的现代 IDE,如 IntelliJ IDEA 或 Eclipse。
87 5
|
2月前
|
Java 微服务 Spring
Spring Cloud全解析:配置中心之解决configserver单点问题
但是如果该configserver挂掉了,那就无法获取最新的配置了,微服务就出现了configserver的单点问题,那么如何避免configserver单点呢?
|
2月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
下一篇
无影云桌面