SpringMVC框架入门(三)---解读<url-pattern/>

目录

第三章、解读url-pattern

3.1 配置详解

3.1.3 *.do

3.1.2 /

3.2 使用/时访问静态资源文件的方式

3.2.1 添加静态资源文件

3.2.2 index.jsp文件

3.2.3 Controller对象

3.2.4 第一种解决方式---使用

3.2.5 第二种解决方式---使用

3.3 路径问题

3.3.1 地址分类


第三章、解读url-pattern

3.1 配置详解

3.1.3 *.do

   在没有特殊要求的情况下,SpringMVC的中央调度器DispatcherServlet的常使用后辍匹配方式,如写为*.do 或者 *.action, *.mvc 等。这种方式可以访问静态资源文件

3.1.2 /

   可以写为/,因为DispatcherServlet会将向静态资源的获取请求,例如.css、.js、.jpg、.png等资源的获取请求,当作是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然也是找不到的,所以在这种情况下,所有的静态资源获取请求也均会报404错误

3.2 使用/时访问静态资源文件的方式

3.2.1 添加静态资源文件

SpringMVC框架入门(三)---解读<url-pattern/>_第1张图片

3.2.2 index.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    


    
姓名:
年龄:


我是一个静态资源文件,不能显示

3.2.3 Controller对象

@Controller
public class  MyController {
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome(String name,Integer age){
        System.out.println("doSome,name = " + name + ",age = " + age);
        ModelAndView mv = new ModelAndView();
        mv.addObject("myname",name);
        mv.addObject("myage",age);
        mv.setViewName("show");
        return mv;
    }
}

3.2.4 第一种解决方式---使用

   声明了后,springmvc框架会在容器中创建DefaultServletHttpRequestHandler处理器对象。它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理。一般的服务器都有默认的Servlet。

   在Tomcat中,有一个专门用于处理静态资源访问的Servlet名叫DefaultServlet。其为default。可以处理各种静态资源访问请求。该Servlet注册在Tomcat服务器的web.xml文件中,该文件位于Tomcat安装目录/conf/web.xml。

SpringMVC框架入门(三)---解读<url-pattern/>_第2张图片

SpringMVC框架入门(三)---解读<url-pattern/>_第3张图片

   DefaultServlet的作用:The default servlet for all web applications, that serves static resources. It processes all requests that are not mapped to other servlets with servlet mappings (defined either here or in your own web.xml file).

        ①处理静态资源文件

        ②处理未映射到其他servlet的请求。  

        /就表示静态资源和未映射的请求都由这个default来处理。

   此时自己定义的项目中的web.xml文件中也使用了"/",会替换掉Tomcat的default。导致无法访问静态资源文件。




    
        myWeb
        org.springframework.web.servlet.DispatcherServlet

        
        
            
            contextConfigLocation
            
            classpath:springmvc.xml
        
        1
    
    
    
        myWeb
        
        /
    

   在SpringMVC的配置文件中增加设置:




    
    

    
    
        
        
        
        
    

    
    
    

    
    

3.2.5 第二种解决方式---使用

   在Spring3.0版本后,Spring定义了专门用于处理静态资源访问请求的处理器ResourceHttpRequestHandler。并且添加了标签,专门用于解决静态资源无法访问问题。需要在 springmvc 配置文件中添加如下形式的配置:     

        location:表示静态资源所在目录。当然,目录不要使用/WEB-INF/及其子目录

        mapping:表示对该资源的请求(以/images/开始的请求如/image/beauty.jpg、/images/car.png

      等)。注意,后面是两个星号**。




    
    

    
    
        
        
        
        
    

    
    
    
    

    
    

    
    

3.3 路径问题

   解决jsp页面中的路径问题,用"/"还是不用。

   有一个Controller对象:

@Controller
public class MyController {
    @RequestMapping(value = "/user/some.do")//第一个"/"代表项目的根
    public ModelAndView doSome(HttpServletRequest request){
        ModelAndView mv = new ModelAndView();

        mv.addObject("msg","欢迎使用springmvc做web开发" + request.getParameter("name"));
        mv.addObject("fun","执行的是doSome方法");

        mv.setViewName("show");

        return mv;
    }
}

3.3.1 地址分类

   1.绝对地址带有协议名称开头的。如:http://www.baidu.com   ftp://202.122.23.1

   2.相对地址:没有协议开头的,如:user/some.do   /user/some.do

        相对地址不能独立使用,必须有一个参考地址,通过参考地址+相对地址本身才能指定资源。

        在jsp、html中使用的地址,都是在前端页面中的地址,都是相对地址。

   3.参考地址:http://localhost:8080/myWeb/就可以作为参考地址。

        ①在你的页面中的,访问地址不加"/"

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

第一个springmvc项目

发起user/some.do的get请求


        比如访问:http://localhost:8080/myWeb/index.jsp

                路径:http://localhost:8080/myWeb/

                资源:index.jsp

        在index.jsp页面发起user/some.do请求,访问地址变为http://localhost:8080/myWeb/user/some.do

                当你的地址没有/开头,例如user/some.do,当你点击链接时,访问地址是当前页面的路

              径地址http://localhost:8080/myWeb/加上链接的地址

                参考地址是http://localhost:8080/myWeb/。

        在这种情况下,如果将some.do方法的返回视图设置为index.jsp,此时再点击一次链接发起

      user/some.do请求,此时访问地址会变为http://localhost:8080/myWeb/user/user/some.do导致

      访问失败,此时的路径地址变为http://localhost:8080/myWeb/user/

        解决方案:

                1.加入${pageContext.request.contextPath};

                2.加入一个base标签,是HTML语言中的标签,表示当前页面中访问地址的基地址。页

              面中所有没有"/"开头的地址,都是以base标签中的地址作为参考地址的。

                        使用base中的地址+user/some.do组成访问地址。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--只针对当前页面有效--%>
<%     
        String basePath = request.getScheme() + "://" +
        request.getServerName() + ":" + request.getServerPort() +
        request.getContextPath() + "/";
%>


    Title
    


    

第一个springmvc项目

发起user/some.do的get请求


发起user/some.do的get请求


        ②在你的页面中,访问地址加"/"

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

第一个springmvc项目

发起/user/some.do的get请求


         比如访问:http://localhost:8080/myWeb/index.jsp

                路径:http://localhost:8080/myWeb/

                资源:index.jsp

        在index.jsp页面发起/user/some.do请求,访问地址变为http://localhost:8080/user/some.do

                参考地址是服务器地址http://localhost:8080,此时访问也有问题。

                要将前端文件中的地址改为:这种方式不灵活,项目名字固定了,如果之后修改项目名

              称,也要修改对应的前端文件中的地址,可以利用EL表达式进行改进。加入${pageContext.request.contextPath}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

第一个springmvc项目

发起/user/some.do的get请求


<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

第一个springmvc项目

发起user/some.do的get请求


PS:根据动力节点课程整理,如有侵权,联系删除。 

你可能感兴趣的:(java框架,springmvc)