springMVC

1.Spring MVC概述:

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

处理器映射:选择使用哪个控制器来处理请求 
视图解析器:选择结果应该如何渲染

通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。

2.spring MVC配置及使用

  (1)需要使用的包(spring的lib包下找)

  (2)配置:

    在src下: 建立 Spring Bean Configuration File文件(xml文件)名字没有特殊要求

  需要勾选的几个项  beans   context   mvc

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
    <!--建立扫描器 -->
    <context:component-scan base-package="com.*" />
    
    <!--开启spring MVC  的注解驱动-->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/page/"></property>        <!--请求的前缀-->
        <property name="suffix" value=".jsp"></property>        <!--请求的后缀-->
    </bean>
</beans>

Spring mvc的配置完成,但是并不能执行,我们还需要在web.xml中配置,使项目启动时,加载上面的配置文件才能执行

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    
    <!-- spring提供的中文乱码过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    
    <!--加载spring-all.xml 刚才配置的那个文件-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--参数,加载时,需要装载的内容 param-name 中的名字是固定的不能改变-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-all.xml</param-value>
        </init-param>
        <!-- 让其启动时就加载 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
        <!--映射,名字要与上面对应起来   url 中的*.do  表示只过滤这种形式的请求  比如   add.do--->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

以上为执行spring MVC需要的所有配置

测试一下:

建立一个类,加入注解

package com.controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller        //核心控制器
public class PersonController {

    //加入注解当页面访问test.do的请求时,会自动找到这个类
    @RequestMapping(value="test")
    public String test(){
        System.out.println("这是一个测试方法");
        return "success";
      }
}

建立一个jsp页面 做一个a标签,跳转

<a href="test.do">测试链接(页面跳转)</a><br>

 其他的一些例子

   @RequestParam 注解 表示前台传过来的值
    //传值, 字符串和数字
    @RequestMapping(value="test1")
    public String test1(@RequestParam("str")String str, 
            @RequestParam("num")int num) {
        
        System.out.println("str: "+str);
        System.out.println("num: "+num);
        return "error";
    }
    @RequestMapping(value="test0/{str}")
    public String test0(@PathVariable("str")String str) {
        
        System.out.println("str: "+str);
        //System.out.println("num: "+num);
        return "error";
    }
    
    //测试post传送方式
    @RequestMapping(value="test2")
    public String test2(@RequestParam("str")String str, 
            @RequestParam("num")int num) {
        
        System.out.println("str: "+str);
        System.out.println("num: "+num);
        return "error";
    }
    
    //传日期型参数
    @RequestMapping("test3")
    public String test3(@RequestParam("date")
    @DateTimeFormat(pattern="yyyyMMdd")Date date) {
        System.out.println(date);
        return "success";
    }
    
    //传递实体类 前端只需要传成员即可  例如实体类中有成员     id    那么前端传id过来就能接收
    @RequestMapping("test4")
    public String test4(Person p) {    //传实体类,参数不用加@RequestParam
        System.out.println(p);
        return "success";
    }
    
    //传递数组
    @RequestMapping("test5")
    public String test5(@RequestParam("strs[]")String[] strs) {
        for(String s : strs) {
            System.out.println(s);
        }
        return "success";
    }
    
    //带日期型参数的实体类  在实体类的时间类型上加一个注解@DateTimeFormat(pattern="yyyyMMdd")
    @RequestMapping("test6")
    public String test6(Person p) {
        System.out.println(p);
        return "success";
    }
    

    //带日期型参数的实体类
    
    @ResponseBody    //把返回的数据打到前台
    @RequestMapping("test7")
    public String test7(Person p) {
        System.out.println(p);
        String json = "{"success":true}";
        return json;
    }
    
原文地址:https://www.cnblogs.com/zhaotiancheng/p/6691603.html