SpringMVC 多控制器,静态资源访问,配置文件位置更改

SpringMVC 多控制器,静态资源访问,配置文件位置更改


1.配置文件名(springMVC-servlet.xml)称,位置更改:

上一篇博客中看到 是将 springMVC-servlet.xml 放置在 WEB-INF/springMVC-servlet.xml 下面的。这样做会有很多弊端(eg:不便于查找...)

为了配置方便和便于管理,我们将配置文件 springMVC-servlet.xml 放置在 src/config  目录下面。并且改名为 spring-servlet.xml.

为此我们需要在 web.xml 中指定该配置文件的位置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name></display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:config/spring*.xml</param-value>
		</init-param>
		<!-- 加载优先级 调到最高 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springMVC</servlet-name>
		<!-- 过滤的内容 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

在<servlet></servlet>中添加<init-param>属性可以在项目初始化的时候加载

<init-param>
	<param-name>contextConfigLocation</param-name>
       <!-- 代码编译后存放的位置,spring* 表示以 spring 开头的所有文件 -->
        <param-value>classpath*:config/spring*.xml</param-value>
</init-param>

package org.springframework.web.servlet;

@SuppressWarnings("serial")
public class DispatcherServlet extends FrameworkServlet {
/**
	 * Create a new {@code DispatcherServlet} that will create its own internal web
	 * application context based on defaults and values provided through servlet
	 * init-params. Typically used in Servlet 2.5 or earlier environments, where the only
	 * option for servlet registration is through {@code web.xml} which requires the use
	 * of a no-arg constructor.
	 * <p>Calling {@link #setContextConfigLocation} (init-param 'contextConfigLocation')
	 * will dictate which XML files will be loaded by the
	 * {@linkplain #DEFAULT_CONTEXT_CLASS default XmlWebApplicationContext}
	 * <p>Calling {@link #setContextClass} (init-param 'contextClass') overrides the
	 * default {@code XmlWebApplicationContext} and allows for specifying an alternative class,
	 * such as {@code AnnotationConfigWebApplicationContext}.
	 * <p>Calling {@link #setContextInitializerClasses} (init-param 'contextInitializerClasses')
	 * indicates which {@code ApplicationContextInitializer} classes should be used to
	 * further configure the internal application context prior to refresh().
	 * @see #DispatcherServlet(WebApplicationContext)
	 */
	public DispatcherServlet() {
		super();
	}
}

2.静态资源访问:

由于我们设置了 过滤内容为 <url-pattern>/</url-pattern> 即是对所有资源文件进行过率。可是在实际中我们不许要对一些静态资源(eg:CSS,JQuery,image等内容进行过滤)

<servlet-mapping>
	<servlet-name>springMVC</servlet-name>
	<!-- 过滤的内容 -->
	<url-pattern>/</url-pattern>
</servlet-mapping>
因此我们需要设置专门的方法来对一些资源不进行过滤。

我们需要在 spring-servlet.xml 文件中进行设置

<!-- 设置不过滤内容,比如:css,jquery,img 等资源文件 -->
<mvc:resources location="/js/*" mapping="/js/**" />
<mvc:resources location="/img/*" mapping="/img/*" />
该步骤需要 添加 Spring 的 mvc 命名空间。

<?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:aop="http://www.springframework.org/schema/aop" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:util="http://www.springframework.org/schema/util" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:cache="http://www.springframework.org/schema/cache" 
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util-3.2.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/jdbc
    http://www.springframework.org/schema/context/spring-jdbc-3.2.xsd
    http://www.springframework.org/schema/cache 
    http://www.springframework.org/schema/context/spring-cache-3.2.xsd">
<beans>

3.对于在同一个Conroller 中添加多个方法:

package com.aoeng.springmvc.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public class MultiController extends MultiActionController
{
	public ModelAndView add(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("-------add multi--------------");
		Map map = new HashMap();
		map.put("key1", "value1");
		map.put("key2", "value2");
		map.put("key3", "value3");
		map.put("key4", "value4");
		return new ModelAndView("/multi","map",map);
	}
	public ModelAndView execute(HttpServletRequest request, HttpServletResponse response){
		
		return new ModelAndView("/multi");
	}
}

在spring-servlet.xml 文件中需要添加

<bean name="/test/multi" class="com.aoeng.springmvc.controller.MultiController">
    <!-- methodNameResolver 为 MultiController 类的父类 MultiActionController 中的属性 -->
    <property name="methodNameResolver" ref="parameterMethodNameResolver" />

</bean>
<bean name="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    <property name="paramName" value="do" /><!-- 次属性的值不改变,将会默认使用 action -->
</bean>

multi.jsp 文件为

<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>

<script type="text/javascript">
	$(function(){
		alert("hello");
	});
</script>
</head>

<body>
	${map }<br>
	<c:forEach items="${map }" var="val">
	${val.key } -------> ${val.value} <br />
	</c:forEach>
	
	<img  src="img/img.png">
</body>

访问结果为



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值