构建Spring web 应用程序 (一)

一、配置DispatcherServlet

1.使用 java 将 DispatcherServlet 配置在 Servlet 中

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
 * 注意:该种配置方法是传统web.xml 方式的替代方案。只能部署到支持 Servlet3.0的服务器中才能正常工作(既Tomcat7或更高版本才可以)
 * 
 * 只要扩展了 AbstractAnnotationConfigDispatcherServletInitializer 类,容器会自动发现该种类,并用它类配置 Servlet 上下文。
 * AbstractAnnotationConfigDispatcherServletInitializer 会同时创建 DispatcherServlet 和 ConetxtLoaderListener
 */
public class MySpringDispatcherServlet extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // 这个方法带回的带有 @Configuration 注解的类将会用来配置 ConetxtLoaderListener 创建的应用上下文中的 bean.
        System.out.println("pppppppppp");
        return new Class<?>[] {RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        System.out.println("hhhhhhhhh");
        // 指定配置类
        //当 DispatcherServlet 启动时,会创建 Spring 应用上下文,并加载配置文件或配置类中所声明的 bean .这里要求 DispatcherServlet 加载上下文时使用定义在 WebConfig 配置类中的 bean 。
        return new Class<?>[] {WebConfig.class};
    }

    //该方法的作用是将一个或多个路径映射到 DispatcherServlet 上,这里映射的是 "/" ,这表示它是应用的默认 Servlet 它会处理进入应用的所有请求。
    @Override
    protected String[] getServletMappings() {
        System.out.println("vvvvvvvvvv");
        // 将DispatcherServlet 映射到 "/"
        return new String[] {"/"};
    }

}

WebConfig 类

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;

@Configuration
@EnableWebMvc //启用SpringMVC
@ComponentScan(basePackages={"config", "controller", "data"}) //启用组件扫描 指定了扫描路径
public class WebConfig extends WebMvcConfigurerAdapter {

    //配置视图解析器
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        //prefix属性指定资源页面的前缀  这里直接把资源位置定位到项目的/WEB-INF/下面
        resolver.setPrefix("/WEB-INF/views/");
        //suffix属性指定资源页面的后缀
        resolver.setSuffix(".jsp");
        //exposeContextBeansAsAttributes属性以将当前spring 环境中的 beans作为request   attritbutes来暴露到页面上。
        //exposedContextBeanNames属性来限制能够暴露到页面上的spring bean的名称列表。
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }
    
    //配置静态资源的处理
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        //该方法作用是 DispatcherServlet 将对静态资源的请求转发到 Servlet 容器中默认的 Servlet 上
        configurer.enable();
    }
}

RootConfig 类

@Configuration
//开启自动扫描  可以指定多个包路径
@ComponentScan(basePackages={"com"}, excludeFilters={@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)})
public class RootConfig { 
    
}

然后我们编写一个控制器 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller  //声明为一个控制器
@RequestMapping("homepage")  
//@RequestMapping({"/", "homepage"})   //将处理器映射到"/" 和 homepage
public class HomeController { //@RequestMapping(value="/",method=RequestMethod.GET) //处理对"/"的 GET 请求 方法级别的请求处理 //@RequestMapping(method=RequestMethod.GET) @RequestMapping(value="/register",method=RequestMethod.GET) public String home() { System.out.println("ssssssssssssssssssssss"); System.out.println("llllllllllllll"); return "home"; //这里就解析为 /WEB-INF/views/home.jsp } }

遇到的问题:

1.访问不到首页    原因:默认的首页访问是放在 WebContent 目录下的,而不是  WEB-INF  目录下

2.默认访问页是按照 web.xml 中配置的顺序起作用的

例如:

 <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

如果 WebContent  目录下同时有 index.html 和 index.jsp 的话,则会显示 index,html

3.在用纯java 配置 spring mvc 时,要将相关jar包放在 WEB-INF/lib 路径下,不然不会加载 AbstractAnnotationConfigDispatcherServletInitializer 的实现类。

猜你喜欢

转载自www.cnblogs.com/codefeng/p/8685005.html