Spring MVC的配置-阿里云开发者社区

开发者社区> pandamonica> 正文

Spring MVC的配置

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6328 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3951 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7576 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9306 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
10711 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
2901 0
+关注
147
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载