Springmvc加载静态文件和开启EL表达式的支持

一、静态文件加载问题

刚开始学习SpringMVC,发现静态文件无法加载

web.xml配置如下:


    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">
 
    Spring Web MVC Hello World Application
 
    
        spring
            class>
                org.springframework.web.servlet.DispatcherServlet
            class>
        1
    
 
    
        spring
        /
    
 

该配置会将一切资源的请求都交给SpringMVC去处理,而SpringMVC会将URL映射到对应的控制器去处理,对静态文件的请求会报 没有对应映射 的错误。

解决方法我目前只查到以下两种:

1.配置web.xml,在其中加入如下片段:

  
        default  
        *.css  
      
  
      
        default  
        *.gif  
      
  
      
        default  
        *.jpg  
      
  
      
        default  
        *.js  
    

表示对于css、js、gif和jpg格式的图片不使用spring的过滤器,这样就可以找到对应的文件了。

2.修改spring-servlet.xml,这种情况下不需要修改web.xml的配置:

   
        location="/static_resources/javascript/"/>    
           
        location="/static_resources/css/"/>    
           
        location="/static_resources/images/"/>    
        default-servlet-handler /> 

当请求js文件时,就去网站目录下的js文件夹下去寻找,其他类型的静态文件也是类似的形式。当然,这里还必须加上mvc标签的声明:

xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation=“http://www.springframework.org/schema/mvc   
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd”

但是,配置到这里的确可以找到静态文件,却找不到控制器了,还需要加上一句:

至此方法2才算是配置完成。

 

二、向视图传值

从控制器向视图传值,大概有以下几种方式:

1.HttpServletRequest.sertAttribute()方法

@RequestMapping("/pass1")
    public String pass1(HttpServletRequest request){
        String name1 = request.getParameter("name");
        System.out.println(name1);
        request.setAttribute("name", name1);
        return "user";
    }

2.ModelAndView

@RequestMapping("/pass2")
    public ModelAndView pass2(){
        ModelAndView mav=new ModelAndView("user");
        mav.addObject("age", 24);
        return mav;
    }

3.使用Map

@RequestMapping("/pass3")
    public String pass3(Map map){
        map.put("sex", "boy");
        return "user";
    }

4.Model

@RequestMapping("/pass4")
    public String pass4(Model model){
        model.addAttribute("id", "111222333");
        return "user";
    }

但是遇到的问题是无论前台怎样写,都无法获取到设定的值,例如${name}会输出原样的${name},而不是控制器对name属性赋予的值,这是因为我使用的jsp版本默认关闭对EL表达式的支持,需要手动打开:

<%@ page  isELIgnored="false"%>

 

你可能感兴趣的:(Springmvc加载静态文件和开启EL表达式的支持)