zoukankan      html  css  js  c++  java
  • SpringMVC—Web.xml中DispatcherServlet配置文件以及Maven搭建

    执行流程:

      url地址发送请求 –> 通过web.xml判断是否为 .action结尾的路径->将请求提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作 -> 进入spring配置文件 ->查询一个或多个HandlerMapping这个类的配置 -> 通过配置找到请求的key -> 再找到这个key 的值的对应id名的bean配置 -> 通过这个bean,进入controller类进行处理 -> 返回一个视图ModelAndView(比如“hello”) -> Dispathcher查询一个或多个ViewResolver视图解析器 –> 并按ModelAndView的要求找到对应的视图对象文件 -> 响应(视图对象负责渲染返回给客户端)。

    SpringMVC框架,最关键的其中一个任务就是配置DispatcherServlet

    DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

    但是,我们在搭建SpringMVC框架时,往往总是把DispatcherServlet的配置文件放错位置。网上有的说:springMVC.xml(暂且命名这么一个springDispatcherServletMVC的dispatchservlet配置文件)应该放在WEB-INF下面(与web.xml放一起);有的说:应该直接把springMVC.xml放在src文件夹下面;有的说:在java resources下面新建一个config的resource folder,把配置文件都放在这个资源文件夹下面。那么到底哪种是正确的呢?答案是:这个要根据web.xml中DispatcherServlet的配置声明有关系。
    DispatcherServlet前端控制器配置文件contextConfigLocation存放位置:

      1.当web.xml中DispatcherServlet,没有明确DispatcherServlet前端控制器配置文件的位置时,则系统默认DispatcherServlet前端控制器配置文件放在WEB-INF文件夹下。

    <!-- org.springframework.web.servlet.DispatcherServlet 拦截所有请求 -->
        <servlet>
            <servlet-name>springDispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <servlet-mapping>
         <servlet-name>springmvc</servlet-name>
         <url-pattern>*.action</url-pattern>
       </servlet-mapping>

      2.当web.xml中DispatcherServlet,已经明确DispatcherServlet前端控制器配置文件的位置时,则必须将前端控制器的配置文件放在src下面,或者在java resources下面新建一个config的resource folder,把配置文件都放在这个资源文件夹下面。

    <!-- org.springframework.web.servlet.DispatcherServlet 拦截所有请求 -->
        <servlet>
            <servlet-name>springDispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <!--contextConfigLocation: DispatcherServlet的属性,默认contextConfigLocation -->
                <param-name>contextConfigLocation</param-name>
                <!-- 项目启动,加载springmvc.xml(命名要一致) -->
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!-- Map all requests to the DispatcherServlet for handling -->
        <!-- 将所有请求映射到 DispatcherServlet 进行处理 -->

        <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>*.action</url-pattern>
        </servlet-mapping>

      3.如果有多个配置文件,可以在 <param-value>标记中用逗号作分隔符。在web.xml里配置Listener。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      version="3.1">
        <!-- spring上下文装载器(监听器),自动加载配置文件 -->
        <listener>
             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>   
        </listener>
        <!-- Spring 加载配置文件位置,使用*匹配 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:resource/spring/spring*.xml</param-value>
        </context-param>
        
        <!-- <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring-base.xml,classpath:spring-another.xml</param-value>
        </context-param> -->
        
       <!--  <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:**/spring*.xml</param-value>
        </context-param> -->
        
        <!--   多个配置文件可以在web.xml里用逗号分隔写入-->
        <!-- <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:resource/spring/springmvc.xml,resource/spring/springmvc.xml</param-value>
        </context-param> -->
    </web-app>    

      多个配置文件里的交叉引用可以用ref的external或bean解决

    <bean id="userService" class="domain.user.service.impl.UserServiceImpl"> 
            <property name="entity">
                 <ref bean="dbBean"/>
             </property> 
        </bean>

    如果指定了要加载的文件,则会去加载相应的xml,而不会去加载/WEB-INF/下的配置文件。 如果没有指定的话,默认会去/WEB-INF/下加载配置文件。


     spring文件配置,这里放在resource目录下

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:task="http://www.springframework.org/schema/task"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
      http://www.springframework.org/schema/mvc      
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
      http://www.springframework.org/schema/task
      http://www.springframework.org/schema/task/spring-task-3.0.xsd" >
      
        <!-- 映射处理器,simpleUrlHandlerMapping(实现org.springframework.web.servlet.mvc.Controller)
            和BeanNameUrlHandlerMapping(继承AbstractController)使用较多;
          ControllerClassNameHandlerMapping:
            支持惯例优先原则 在它的应用上下文中找出所有不同的处理器(handler)(或Controller)bean, 并去掉名称中的Controller,来定义它的处理器映射。
          Removed "Controller" from class name 全部转为小写 前面加 “/” 后面附 "*“ ,结合multiActionController使用
    -->
       <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <props>
                    <prop key="/index.action">startControl</prop>
                </props>
            </property>    
        </bean>
        <!-- 定义处理类 -->
        <bean id="startControl" class="com.zzk.Controller"></bean>
        <!-- 用于逻辑视图到真正视图的隐射 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>

    pom.xml文件

    <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>
      <groupId>com.shop</groupId>
      <artifactId>mavenTest</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>mavenTest 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>org.springframework</groupId>
            <artifactId>org.springframework.web.servlet</artifactId>
            <version>3.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>org.springframework.expression</artifactId>
            <version>3.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
                <artifactId>org.springframework.web</artifactId>
                <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
      </dependencies>
    
    </project>

    然后就是写controller和jsp,只要目录正确,搭建任务就成功了。

     如果要在一个controller中处理多个请求,则必须继承MultiActionController。

  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/chen2608/p/13169310.html
Copyright © 2011-2022 走看看