上次介绍了关于SpringMVC的架构和工作流程,本篇基于上一篇来介绍关于SpringMVC的基本使用和配置。
不清楚的直接看:
http://blog.csdn.net/james_shu/article/details/54616120
下面分别以两种方式来介绍SpringMVC的开发流程,xml配置是老的项目的使用方式,更为流行的是Java代码和注解的配置方式。
SpringMVC中的组件主要的有DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver。
配置DispatcherServlet:
1.XML的配置方式:
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载SpringMVC所需的三大组件的配置文件,不配置的时候会自动加载WEB-INF下的'servletname-servlet.xml' -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>springmvc.xml</param-value>
</init-param>
<!-- 正整数表示该Servlet在应用程序启动的过程中就装载并且调用init方法 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
2.Java代码的配置方式:
/**
* @author BeautifulSoup
* AbstractAnnotationConfigDispatcherServletInitializer会同时创建两个应用的上下文,
* getRootConfigClasses返回带有注解@Configuration的配置类,此类用于加载后端的中间层和数据层的组件;
* getServletConfigClasses返回带有注解@Configuration的配置类,此类用于加载DispatcherServlet等Web组件的bean
*/
public class SpittrWebAppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
@Override
protected String[] getServletMappings() {
// 将Dispatcher的拦截设置为 /
return new String[] { "/" };
}
}
SpringMVC基本组件的配置:
1.XML的配置方式:
<?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:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/beans/spring-beans-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/context
http://www.springframework.org/schema/context/spring-context-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/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 配置Handler -->
<bean id="demo1" name="/demo1" class="com.fuyunwang.demo1.ControllerTest" />
<!-- 配置处理器映射器,下面介绍两种处理器适配器 -->
<!-- 这一个HandlerMapping用于匹配请求XXX.action中容器的BeanName,处理器映射器可以不配置,此时默认使用该处理器映射器 -->
<!-- <bean
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/item1.action">demo1</prop>
</props>
</property>
</bean>
<!-- 配置处理器适配器,下面配置两个处理器适配器 -->
<!-- 根据不同的适配器来编写相应的Action,下面的适配器表明Action应该实现Controller接口,处理器适配器可以不用配置,此时默认使用该处理器适配器 -->
<bean
class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<!-- 根据不同的适配器来编写相应的Action,下面的适配器表明Action应该实现HttpRequestHandler接口 -->
<!-- <bean class="org.springframework.web.servlet.mvc.HttpRequestHandler"/> -->
<!-- 配置视图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
2.Java代码方式的配置:
package com.fuyunwang.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/**
* @author BeautifulSoup
* 声明配置类
* 启用SpringMVC中的组件
* 启用组件扫描,扫描编写的Controller(带有@Controller注解的类)
*/
@Configuration
@EnableWebMvc
@ComponentScan("com.fuyunwang")
public class WebConfig extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver viewResolver(){ //配置视图解析器
InternalResourceViewResolver resolver=new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) { //配置静态资源的处理
configurer.enable();
}
}
package com.fuyunwang.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages={"com.fuyunwang"},excludeFilters={
@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)
})
public class RootConfig {
}
Controller层的编写:
1.对于上述的xml的配置时,应该以实现某一特定的接口作为规范:
public class ControllerTest implements Controller{
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("demo1");
return modelAndView;
}
}
2.基于注解的Action的编写更能简化操作,这也是Java代码配置时推荐的使用方式:
@Controller
public class HomeController {
@RequestMapping(value="/home",method=RequestMethod.GET)
public String home(){
return "home";
}
}
Ok,经过以上的两种方式的三个步骤,完全按照XML的配置来编写SpringMVC的程序和完全按照Java代码的方式来编写程序的两种方式都能实现了相同的效果了。