Springmvc加載靜態文件和開啟EL表達式的支持


一、靜態文件加載問題

剛開始學習SpringMVC,發現靜態文件無法加載

web.xml配置如下:

<web-app id="WebApp_ID" version="3.0"
    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">
 
    <display-name>Spring Web MVC Hello World Application</display-name>
 
    <servlet>
        <servlet-name>spring</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
</web-app>

該配置會將一切資源的請求都交給SpringMVC去處理,而SpringMVC會將URL映射到對應的控制器去處理,對靜態文件的請求會報 沒有對應映射 的錯誤。

解決方法我目前只查到以下兩種:

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

<servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.css</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.gif</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.jpg</url-pattern>  
    </servlet-mapping>  
  
    <servlet-mapping>  
        <servlet-name>default</servlet-name>  
        <url-pattern>*.js</url-pattern>  
    </servlet-mapping>

表示對於css、js、gif和jpg格式的圖片不使用spring的過濾器,這樣就可以找到對應的文件了。

2.修改spring-servlet.xml,這種情況下不需要修改web.xml的配置:

<mvc:resources mapping="/javascript/**"   
        location="/static_resources/javascript/"/>    
        <mvc:resources mapping="/styles/**"   
        location="/static_resources/css/"/>    
        <mvc:resources mapping="/images/**"   
        location="/static_resources/images/"/>    
        <mvc: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”

但是,配置到這里的確可以找到靜態文件,卻找不到控制器了,還需要加上一句:

<mvc:annotation-driven/>

至此方法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"%>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM