zoukankan      html  css  js  c++  java
  • spring和springmvc配置分离

    在配置springmvc的时候,我们可以把所有配置配置到springmvc的xml文件中, 也可以分多个 Spring 的配置文件, 然后使用 import 节点导入其他的配置文件。

    但是,通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中),实际上应该放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao。

    一、

    配置spring配置文件的本质是单独加入Spring 的 IOC 容器,来管理数据源,Service,Dao这些“属于spring自身”的bean,而让springmvc的IOC容器专心管理Controller,视图解析器 等属于springmvc自己的内容。

    那么如何在springmvc项目中配置spring的配置文件呢,只需在web.xml文件中做如下配置本质就是配置启动 Spring IOC 容器的 ContextLoaderListener,

    其中的spring-context.xml就是spring的配置文件,也可看作是它的IOC容器。配置文件中主要配置扫描serivce,dao的包,数据源信息,事务等。

    <!-- 配置启动 Spring IOC 容器的 Listener -->
        <!-- needed for ContextLoaderListener -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-context.xml</param-value>
        </context-param>

        <!-- Bootstraps the root web application context before servlet initialization -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    二、

    下面是web.xml中对springmvc的配置,其中的springmvc.xml就是springmvc的配置文件,也可看作是它的IOC容器。开始说的把Service 和 Dao,数据源都可以放这里,只不过有些臃肿。一般情况下我们只在该文件中配置扫描Controller的包,视图解析器等。

    <servlet>
            <servlet-name>springDispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>springDispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

    补充:JS、CSS、Image静态资源的访问

    JS等静态文件夹位置放在webapp下面

     

    第一种:

    如果springDispatcherServlet 配置的拦截路径不是上面的"/",而是*.do或*.action等有后缀的路径,这样dispatchservlet 只拦截*.do或*.action的url. 并不拦截css,js等静态资源

    让SpringMVC只拦截动态请求,js、css、img等静态资源不经过Spring,直接让Web容器处理,静态资源不走Spring,也不走拦截器,性能当然是比较好的。

    第二种:

    如果springDispatcherServlet配置的拦截路径就是是上面的"/",拦截所有的请求url,静态资源不再由Tomcat处理,所以必须在SpringMVC中再次配置

     <mvc:resources mapping="/images/**" location="/images/"/>
     <mvc:resources mapping="/js/**" location="/js/"/>
     <mvc:resources mapping="/css/**" location="/css/"/>

    让SpringMVC把static静态资源也处理了。显然,让SpringMVC处理静态资源的性能没有Tomcat直接处理比较高。

    第三种:

    如果springDispatcherServlet配置的拦截路径就是是上面的"/",可以不用第二种方法,

    去掉 <mvc:resources mapping="/static/**" location="/static/" />,不做静态资源请求的映射。

    在web.xml里增加如下配置:

    <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/static/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.js</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>

      <!--   spring mvc配置   -->
        <servlet>
    		<servlet-name>springweb</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>classpath:spring/springweb-servlet.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
    	<servlet-name>springweb</servlet-name>
    	<url-pattern>/</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/static/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.js</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>
    

    激活Tomcat的defaultServlet来处理静态文件。这样 SpringMVC不再响应静态资源。

    补充:对springmvc项目,如果想直接访问 jsp页面,而不是通过控制器指定页面名字的方式访问,需让jsp页面别放到WEB-INF下即可。WEB-INF/是资源目录, 客户端不能直接访问

    放到WEB-INF下的jsp页面需要通过控制器指定页面路径(不包括后缀名.jsp)的方式访问

    没放在WEB-INF下的jsp页面可以直接通过url路径访问(需全路径包含后缀名.jsp),也可以通过控制器指定页面路径(不包括后缀名.jsp)的方式访问

    如:直接访问http://th5.yihu365.com:81/page/thridGh/index.jsp

    或通过控制器指定页面名称访问,http://th5.yihu365.com:81/yihudaojia/intoGHPage_V2?sign=8688CFF9B5A430AE005FD61329A002A9&partner=yixinxinxikeji&thirdPartId=1181&phone=15588886666

    通过控制器访问view,可以携带后台处理的数据如 model.addAttribute("SID", SID); 直接访问则不可以,因为没有后台。

  • 相关阅读:
    size_t类型
    sudo 安装 ——Debian 6
    Ubuntu10.10 上海交大及其他教育网更新源
    Linux 命令解决小问题
    VMware Player tools for linux 安装
    内核总结之内存管理api (转)
    volatile的使用
    二叉树层次遍历队列实现
    Ubuntu 11.04 下OpenCV安装
    Ubuntu 添加教育网更新源【转】
  • 原文地址:https://www.cnblogs.com/tyhj-zxp/p/8378432.html
Copyright © 2011-2022 走看看