构建一个spring mvc web程序

在学习spring secuity之前我们先构建一个spring mvc的web程序,以后的spring secuity就在这个web程序基础上去构建。

  • 加入依赖
    我们使用maven构建项目,我们加入了springmvcservlet相关的依赖,并且加入了jetty插件,可以不使用外部容器的情况下去运行启动项目,依赖如下:

        
            org.springframework
            spring-webmvc
            4.3.13.RELEASE
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
        
            javax.servlet.jsp
            jsp-api
            2.2
            provided
        
    


    
        springmvc-web
        
            
                org.apache.maven.plugins
                maven-war-plugin
                3.0.0
                
                    false
                
            
            
                org.eclipse.jetty
                jetty-maven-plugin
                9.4.3.v20170317
                
                    
                        8001
                    
                    //配置contextPath为/
                    
                        /
                    
                
            
        
    
  • 首先定义系统启动根类

配置的@EnableWebMvc注解的类需要继承WebMvcConfigurerAdapter,来做一下回调配置(比如说自己定义的类型转换器,自己定义的拦截器等),详细了解可以点击查看@EnableWebMvc的源码备注

@EnableWebMvc
@ComponentScan("com.zhihao.miao.mvc")
public class WebAppConfig extends WebMvcConfigurerAdapter {

    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        //配置默认的DefaultServletHttpRequestHandler(静态资源默认使用的servlet),DefaultServletHttpRequestHandler是HttpRequestHandler的默认实现,
        configurer.enable();
    }

}
  • 其他的一些配置
/**
 * 系统启动类,配置url过滤的url
 */
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class[] getRootConfigClasses() {
        //以我的理解就是以WebAppConfig来创建spring 容器上下文
        return new Class[]{WebAppConfig.class};
    }

    @Override
    protected Class[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/*"};
    }
}
  • 定义自己的Controller
@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        return "hello spring mvc web";
    }

    @GetMapping("/home")
    public String home(){
        return "home spring mvc web";
    }

    @GetMapping("/admin")
    public String admin(){
        return "admin spring mvc web";
    }
}
  • 测试

访问下面三个接口,都可以访问,

http://localhost:8001/hello
http://localhost:8001/home
http://localhost:8001/admin
  • url的组成

这边说明一下url地址的一些组成,比如说http://127.0.0.1:8081/home,其可以看成http[s]://[host]:[port][request url][?queryString],而request url = [context path][servlet path][path info],url路径除了context pathservlet path之外就是path_info了,我们这边没有配置context pathservlet path

修改一下Controller,

@RestController
public class HelloController {

@GetMapping("/hello")
public String hello(HttpServletRequest req){
    System.out.println("==================");
    System.out.println(" req.getRequestURI(): " + req.getRequestURI());
    System.out.println(" req.getContextPath(): " + req.getContextPath());
    System.out.println(" req.getServletPath(): " + req.getServletPath());
    System.out.println(" req.getPathInfo(): " + req.getPathInfo());
    System.out.println("==================");
    return "hello spring mvc web";
}

@GetMapping("/home")
public String home(){
    return "home spring mvc web";
}

@GetMapping("/admin")
public String admin(){
    return "admin spring mvc web";
}

}

控制台打印:

==================
 req.getRequestURI(): /hello
 req.getContextPath(): 
 req.getServletPath(): 
 req.getPathInfo(): /hello
==================
  • 我们修改pom文件的jetty插件的context path

如下,


        springmvc-web
        
            
                org.apache.maven.plugins
                maven-war-plugin
                3.0.0
                
                    false
                
            
            
                org.eclipse.jetty
                jetty-maven-plugin
                9.4.3.v20170317
                
                    
                        8001
                    
                    
                        
                    

你可能感兴趣的:(构建一个spring mvc web程序)