springMVC框架简介

1.SpringMVC概述
      • Spring现层提供的基于MVC设计理念秀的Web框架,是 目前 最主流 MVC 框架 之一
      • Spring3.0后全面超越Struts2,成秀的MVC框架
      • Spring MVC一套MVC注解POJO为处求的控制器,而无须实现任何接口。
      • 支持RESTURL
      • 采用了松散合可插拔结构,比其他MVC框架更具展性和活性

2.HelloWorld 

(1)

      –  加入 jar
       –  web.xml 中配置 DispatcherServlet
       –  加入 Spring MVC 的配置文件
       –  求的 理器,并 标识为处 理器
       –  视图
 (2)jar
       – commons-logging-1.1.3.jar
       – spring-aop-4.0.0.RELEASE.jar
       – spring-beans-4.0.0.RELEASE.jar
       – spring-context-4.0.0.RELEASE.jar
       – spring-core-4.0.0.RELEASE.jar
       – spring-expression-4.0.0.RELEASE.jar
       – spring-web-4.0.0.RELEASE.jar
       – spring-webmvc-4.0.0.RELEASE.jar

 (3)在web.xml中配置DispatcherServlet
      DispatcherServlet/WEB-INF/<servletName-servlet>.xmlSpring 配置文件 , 启动 WEB Spring 容器 。可以通 contextConfigLocation 初始化参数自定 配置文件的 位置 和名称
    <!-- 配置 DispatcherServlet -->  
        <servlet>  
            <servlet-name>helloworld</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <!-- 配置DispatcherServlet初始化参数:配置springmvc配置文件的位置和名称 -->  
            <!--   
                实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件, 而使用默认的.  
                默认的配置文件为: /WEB-INF/<servlet-name>-servlet.xml  
                这样配置文件就不是放在src下了,而是放在WEB-INF下,此时名字叫做helloworld-servlet.xml  
            -->  
            <init-param>  
                <param-name>contextConfigLocation</param-name>  
                <param-value>classpath:springmvc.xml</param-value>  
            </init-param>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
      
        <servlet-mapping>  
            <servlet-name>helloworld</servlet-name>  
            <url-pattern>/</url-pattern>  
        </servlet-mapping>  
(4)创建Spring MVC配置文件
       –配置自动扫描的包
       –配置视图解析器视图名称解析器:将视图逻辑名解析: /WEB-INF/pages/<viewName>.jsp
    <!-- 配置自动扫描的包 -->  
        <context:component-scan base-package="com.starfish.springmvc"></context:component-scan>  
      
        <!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 -->  
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
            <property name="prefix" value="/WEB-INF/views/"></property>  
            <property name="suffix" value=".jsp"></property>  
        </bean>  

(5)创建请求处理器类

    @Controller  
    public class HelloWorld {  
        /** 
         * 1. 使用 @RequestMapping  注解来映射请求的 URL(这里的请求就是:href="helloWorld") 
         * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于 InternalResourceViewResolver 视图解析器, 会做如下的解析: 
         * 通过 prefix + returnVal + 后缀 这样的方式得到实际的物理视图, 然会做转发操作 
         *  
         * /WEB-INF/views/success.jsp 
         */  
        @RequestMapping("/helloWorld")  
        public String helloWorld(){  
            System.out.println("springMVC HelloWorld!");  
            return "success";  
        }  
    }  

3.使用@RequestMapping映射请求

      • Spring MVC 使用@RequestMapping注解为控制器指定可以处理哪些URL 请求

     • 在控制器的类定义及方法定义处都可标注@RequestMapping

        – 类定义处:提供初步的请求映射信息。相对于WEB 应用的根目录

         – 方法处:提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注@RequestMapping,则方法处标记的URL 相对于WEB 应用的根目录

     • DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。

(1)使用@RequestMapping映射请求示例

        
 (2)映射请求参数、请求方法或请求头
     • 标准的HTTP请求报头
         

     • @RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数及请求头映射请求

     • @RequestMappingvaluemethodparamsheads 分别表示请求URL请求方法请求参数及请求头的映射条件,他们之间是的关系,联合使用多个条件可让请求映射更加精确化

     • paramsheaders支持简单的表达式:

        – param1表示请求必须包含名为param1 的请求参数

         – !param1表示请求不能包含名为param1 的请求参数

         – param1 != value1表示请求包含名为param1 的请求参数,但其值不能为value1

         {“param1=value1”, “param2”}请求必须包含名为param1 param2 的两个请求参数,且param1 参数的值必须为value1

    @Controller  
    @RequestMapping("springmvc")  
    public class SpringMVCTest {  
        private static final String SUCCESS = "success";  
    //了解:不常用, 可以使用params和header来更加精确的映射请求,他两支持简单的表达式  
        @RequestMapping(value="testParamsAndHeader",params={"username","age!=24"},headers={"Accept-Language=zh-CN,zh;q=0.8"})  
        public String testParamsAndHeader(){  
            System.out.println("testParamsAndHeader...");  
            return SUCCESS;  
        }}  
4. 映射求参数&求参数
 
 (1)

请求处理方法签名


     • SpringMVC 通过分析处理方法的签名,将HTTP请求信息绑定到处理方法的相应人参中
     • Spring MVC  对控制器处理方法签名的限制是很宽松的, 几乎可以按喜欢的任何方式对方法进行签名。
     • 必要时可以对方法及方法入参标注相应的注解( @PathVariable@RequestParam@RequestHeader )、 Spring MVC  框架会将 HTTP  请求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理
    ————————————————jsp————————————————————————————————————  
    <a href="springmvc/testRequestParam?userName=starfish&age=22">Test RequestParam</a>  
    ————————————————action——————————————————————————————————  
       @Controller  
    @RequestMapping("springmvc")  
    public class SpringMVCTest {  
      
        private static final String SUCCESS = "success";  
      
        @RequestMapping("/testRequestParam")  
        public String testRequestParam(@RequestParam(value="userName") String userName,  
                @RequestParam(value="age",required=false,defaultValue="18") int age){  
            System.out.println("testRequestParam--> userName :"+ userName + ", age:"+ age);  
            return SUCCESS;  
        }  
(2)使用@RequestParam绑定请求参数值
      • 在处理方法入参处使用@RequestParam可以把请求参数传递给请求方法
           – value:参数名
            – required:是否必须。默认为true, 表示请求参数中必须包含对应的参数,若不存在,将抛出异常
 @Controller  
    @RequestMapping("springmvc")  
    public class SpringMVCTest {  
      
        private static final String SUCCESS = "success";  
      
        @RequestMapping("/testRequestParam")  
        public String testRequestParam(@RequestParam(value="userName") String userName,  
                @RequestParam(value="age",required=false,defaultValue="18") int age){       //integer age可以不用写默认值  
            System.out.println("testRequestParam--> userName :"+ userName + ", age:"+ age);  
            return SUCCESS;  
        }  
    ——————————————————  
    jsp:  
    <a href="springmvc/testRequestParam?userName=starfish&age=22">Test RequestParam</a>  
5.处理模型数据

 (1)Spring MVC 提供了以下几种途径输出模型数据

          – ModelAndView处理方法返回值类型为ModelAndView方法体即可通过该对象添加模型数据

          – Map Model入参为org.springframework.ui.Modelorg.springframework.ui.ModelMapjava.uti.Map时,处理方法返回时,Map 中的数据会自动添加到模型中。

         – @SessionAttributes将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性

           – @ModelAttribute方法入参标注该注解后入参的对象就会放到数据模型中

 
 (2) ModelAndView

     • 控制器处理方法的返回值如果为ModelAndView则其既包含视图信息,也包含模型数据信息

     • 添加模型数据:

        – MoelAndView addObject(String attributeName, Object attributeValue)

        – ModelAndView addAllObject(Map<String, ?> modelMap)

     • 设置视图:

         – void setView(View view)

         – void setViewName(String viewName)j

    ————————————action————————————————  
        /** 
         * 目标方法的返回值可以是 ModelAndView 类型。  
         * 其中可以包含视图和模型信息 
         * SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中.  
         * @return 
         */  
        @RequestMapping("/testModelAndView")  
        public ModelAndView testModelAndView(){  
            String viewName = SUCCESS;  
            ModelAndView modelAndView = new ModelAndView(viewName);  
      
            //添加模型数据到 ModelAndView 中.  
            modelAndView.addObject("time", new Date());  
      
            return modelAndView;  
        }  
    ——————————jsp——————————————————  
    <a href="springmvc/testModelAndView">Test ModelAndView</a>  
                success page:     time: ${requestScope.time }  
(3)Map及Model
     •  Spring MVC 在内部使用了一个org.springframework.ui.Model接口存储模型数据
     •  具体步骤:
         Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
        – 如果方法的入参Map Model Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据
    ————————————action————————————————  
       /** 
         * 目标方法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数.  
         * @param map 
         * @return 
         */  
        @RequestMapping("/testMap")  
        public String testMap(Map<String, Object> map){  
            System.out.println(map.getClass().getName());   
            map.put("names", Arrays.asList("Tom", "Jerry", "Mike"));  
            return SUCCESS;  
        }  
    ——————————jsp——————————————————  
    <a href="springmvc/testMap">Test testMap  
    </a>                       success page:       
    names: ${requestScope.name }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值