SpringMVC框架(1)

MVC框架

MVC框架开发的项目一定是MVC结构的,其开发是Controller层代码,底层还是Servlet

常见的框架:Struts框架,Struts2框架,SpringMVC框架

 

SpringMVC框架本身就是spring,能和Spring框架无缝整合,提供了Controller基本的功能的简单操作,提供文件上传下载的功能,Ajax处理的简单操作,拦截器功能。

 

MVC框架具有的功能:

1.搭建框架,实现客户端通过url方法到MVC框架的控制器

2.从客户端向控制器发送请求参数

3.控制器向视图层或控制器层进行跳转

4.控制器向视图层或控制器层传值

5.多业务方法的实现

6.如何调用ServletAPl

7.具备文件的上传和下载功能

8.拦截器功能

9.对Ajax请求响应的处理

 

SpringMVC框架的工作过程

 

浏览器发送请求给核心控制器DispatcherServlet。到HandlerMapping中查找是否有请求URL映射的控制器方法

如果没有响应404,如果存在,先经过HandlerAdapter对请求进行处理(参数值注入,参数值的类型处理),有

映射的控制器方法处理请求,控制器向核心控制器DispatcherServlet发送一个ModelAndView对象,其中包括了

发个视图层的数据和跳转地址,核心控制器经过视图解析对地址进行处理(为地址添加前缀和后缀),最后由

核心控制器完成向视图层传值并跳转的实现,视图层将html代码和数据发给客户端。

 

1.SpringMVC的搭建

 (1)导入SpringMVC依赖

  <groupId>com.oracle</groupId>    <artifactId>SpringMVCDemo</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>pom</packaging>    <properties>        <org.springframework.version>4.3.12.RELEASE</org.springframework.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>${org.springframework.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>            <version>${org.springframework.version}</version>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.1-b08</version>        </dependency>    </dependencies>

(2)创建Mavenweb模块

(3)在Web.xml配置DispatcherServlet

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"         version="3.1">    <servlet>        <servlet-name>spring</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servletname>]-servlet.xml,如spring-servlet.xml        <init-param>            <param-name>contextConfigLocation</param-name>
4. 在resource下创建spring-servlet.xml并配置
 
2. 通过请求的URL访问Controller的方法 
1. 创建Controller类,一定要在扫描的包下(com.oracle.controller),一定要有@Controller注解,这个控制器就 会被注册在Spring容器中,配合@RequestMapping注解实现控制器方法和地址的映射
            <param-value>/WEB-INF/spring-servlet.xml</param-value>        </init-param>        -->        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:spring-servlet.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>
 
    <servlet-mapping>        <servlet-name>spring</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>
 
</web-app>

(4)在resource下创建spring-servlet.xml并配置

<beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"       xmlns:util="http://www.springframework.org/schema/util"       xsi:schemaLocation="    http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context-4.3.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd        http://www.springframework.org/schema/util        http://www.springframework.org/schema/util/spring-util-4.3.xsd">    <!-- 这个元素包含了 HandlerMapping 和 HandlerAdapter 两个bean的配置        开启注解模式    -->    <mvc:annotation-driven/>    <context:component-scan base-package="com.oracle.controller"></context:component-scan>    <!-- 由于客户端的所有请求交给SpringMVC核心控制器处理          有些静态资源(js、图片、样式)的路径引用也交给了核心控制器处理          对静态资源的地址进行定向处理        -->    <!--    <mvc:resources mapping="/js/**" location="/js/" />    <mvc:resources mapping="/style/**" location="/style/" />    <mvc:resources mapping="/upload/**" location="/upload/" />--> </beans>

(5)创建Controller模块

@RequestMapping("/demo") public class DemoController {    //test方法映射的地址是  /demo/test1    @RequestMapping("/test1")    public void test1(){        System.out.println(" 执行了 test1方法");    } }
 
@

 

2.跳转

 

控制器方法  有两种跳转写法

1.方法返回一个ModelAndView对象,将跳转的地址封装到这个对象。

 

 @RequestMapping("/test7")    public ModelAndView test7(){        //向project/list.jsp跳转  ,默认向jsp请求转发跳转        ModelAndView mav = new ModelAndView("/pages/project/list.jsp");        return mav;    }

 

 

 

 

2.控制器方法返回一个spring,就是跳转地址的字符串,SpringMVC也会将字符串自动封装为ModelAndView对象,交给DispathcerServlet(核心控制器)

 

 

 @RequestMapping("/test8")    public String test8(){        //默认向jsp请求转发跳转        return "/pages/project/add.jsp";    }

 

 

3.视图解析器

可以在springMVC的配置文件中配置一个事务解析器的bean,为跳转地址添加前缀和后缀

  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/pages/"></property>        <property name="suffix" value=".jsp"></property>    </bean>
    @RequestMapping("/test7")    public ModelAndView test7(){        //向project/list.jsp跳转  ,默认向jsp请求转发跳转        ModelAndView mav = new ModelAndView("/project/list");        return mav;    }    @RequestMapping("/test8")    public String test8(){        //默认向jsp请求转发跳转        return "/project/add";    }

 

 

在跳转的路径自字符串中可以加forward:或redirect:跳转就不经过视图解析器了

 

请求转发跳转和重定向跳转,一共有四种情况

 

1)控制器 请求转发 跳转视图层

经过视图解析器:写跳转地址的字符串

不经过视图解析器:forward:跳转地址

2.控制器 重定向  跳转到视图层

redirect:跳转的视图地址

3.控制器  请求转发 跳转到控制器

不能经过视图解析器,forward:跳转的控制器的地址

4.控制器  重定向  跳转到控制器  redirect:跳转的控制器的地址

 

  @RequestMapping("/test9")    public String test9(){        //跳转到index.jsp  请求转发方式        //return "forward:/index.jsp";        //跳转到index.jsp  重定向方式        //return "redirect:/index.jsp";        //跳转到 test1  请求转发方式        //return "forward:/demo/test1";        //跳转到 test1  重定向方式        return "redirect:/demo/test1";    }

 

 

4.向视图层传值

 

(1)方式一:

        通过返回ModelAndView对象,将数据封装到MOdelAndView对象中

  @RequestMapping("/test9")    public ModelAndView test9(){        ModelAndView mav = new ModelAndView("/project/list");        //向jsp传 name为tom         mav.addObject("name","tom");        return mav;    }
 

 

(2)方式二:

        通过Model对象传值

 @RequestMapping("/test9")    public String test9(Model model){        model.addAttribute("name","tom");        return "/project/list";    }
 

 

(3)方式三:

       通过Map对象传值

   @RequestMapping("/test9")    public String test9(@RequestParam Map map,Map m,HttpServletRequest request){        System.out.println(map);        m.put("name","tom");  //等同于request.setAttribute("name","tom")        //request.setAttribute("name","rose");
 
        return "/project/list";    }

 

 

 

posted @ 2021-07-23 08:02  LeoLxx  阅读(106)  评论(0编辑  收藏  举报