• 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"%>
  • 相关阅读:
    Android的activity的生命周期
    COCOS学习笔记--重力感应Acceleration
    【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(2)
    cocos2d-x改底层之获取UIListView的实际内容大小
    Android 使用ListView的A-Z字母排序功能实现联系人模块
    Netty3 源代码分析
    A002-开发工具介绍
    数据结构:二叉树(前,中,后,层次)非递归遍历。
    jQuery开发之Ajax
    cocos2d-x-3.6 引擎概述
  • 原文地址:https://www.cnblogs.com/NaLanZiYi-LinEr/p/5745261.html
Copyright © 2020-2023  润新知