SpringMVC

作者: 虫儿飞ZLEI | 来源:发表于2018-11-09 21:47 被阅读0次

    1.基本组件

    1.1 介绍

    传统的servlet做的事情是:

    匹配url路径,然后浏览器里面输入相应的路径,进入到servlet里面,在servlet里面做相应的处理,在请求转发,重定向等等。

    SpringMVC做的事情也是这些,它只是对传统的servlet的优化,使用SpringMVC可以更加方便,当然它不只我说的这么简单。

    SpringMVC的流程:

    有一个前端控制器,所有的浏览器输入的路径访问都会到它这里。然后呢它获取到不同的路径,然后判断这些路径对应哪个方法去处理(这里的方法就相当于传统的servlet类),然后呢调用相应的方法,最后呢,方法处理完了,跳转到具体的物理视图中去。

    1.2组件

    • DispatcherServlet:前端控制器,接受所有的路径请求(可以通过配置,让访问jsp的请求不处理,这样浏览器可以直接获取到jsp页面)。
    • HandlerMapping:解析请求的路径,去判断要执行哪个方法。
    • HandlerAdapter:去调用具体的那个方法。
    • ViewResovler:视图解析器,解析结果,准备跳转到具体的物理视图。


      图解

    2.纯配置文件搭建SpringMVC运行环境(看看)

    2.1首先需要在web.xml文件中配置(idea会自己配置好)

        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--自启动,不配的话,访问的时候才加载-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    

    因为前端控制器需要处理所有的url访问,所以这个DispatcherServlet需要配置一下。

    2.2然后配置SpringMVC的配置文件

    默认情况下在WEB-INF文件下会自动生成dispatcher-servlet.xml,这个就是SpringMVC的配置文件,这个文件的名字是根据web.xml中配置的DispatcherServlet的名字来生成的。


    SpringMVC的配置文件的名称
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="xxxx" class="controller.xxxController"></bean>
    
        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="urlMap">
                <map>
                    <entry key="xxx" value-ref="xxxx"/>
                </map>
            </property>
        </bean>
    </beans>
    

    配置好以后,访问http://localhost:8080/xxx就会,进入到xxxController。

    下面是xxxController的代码

    public class xxxController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            System.out.println("xxx");
            ModelAndView modelAndView = new ModelAndView("a.jsp");
            return modelAndView;
        }
    }
    

    进来了xxxController以后先打印xxx,然后转发到a.jsp页面

    2.3修改SpingMVC 的默认配置文件的名称和位置

        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--修改SpringMVC的配置文件路径-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>
            <!--自启动,不配的话,访问的时候才加载-->
            <load-on-startup>1</load-on-startup>
        </servlet>
    

    这样在src下面建一个springmvc.xml即可,这个就是SpringMVC的配置文件了。

    3.SpringMVC 容器和Spring容器是父子关系

    意思就是说在Spring中的对象,在SpringMVC中是可以直接@Resource获取到对象的

    4注解搭建SpringMVC 的环境

    4.1web.xml还是一样的配置,同上

    4.2配置SpringMVC的配置文件

    <?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/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!--扫描注解-->
        <context:component-scan base-package="com.test.controller"/>
        <!--注解驱动-->
        <!--配置了这个就有了HandlerMapping和HandlerAdapter-->
        <mvc:annotation-driven/>
        <!--静态资源自动放行,js/**表示js文件夹下的所有的文件和子文件夹里面文件-->
        <mvc:resources mapping="/js/**" location="/js/**"/>
    </beans>
    

    4.3Controller代码

    @Controller
    public class XXXController {
        @RequestMapping("xxx")
        public String xxx(){
            System.out.println("执行demo方法");
            return "a.jsp";
        }
    }
    

    这样子,浏览器访问http://localhost:8080/xxx,就可以进入到xxx()方法了。

    5传参

    比如前端会传进来2个值,name和age

        @RequestMapping("xxx")
        public String xxx(String name, int age){
            System.out.println("执行demo方法"+name+"--"+age);
            return "a.jsp";
        }
    

    或者用一个pojo类接收,springmvc还会把name和age自动注入到pojo类里。同时还可以选择把name和age再接收到变量里面

        @RequestMapping("xxx")
        public String xxx(String name, int age, User user){
            System.out.println("执行demo方法"+name+"--"+age+"--"+user);
            return "a.jsp";
        }
    

    如果前端传进来的变量的名称和接收方法的变量名称不一致,可以使用@RequestParam


    如果需要传入的参数有默认值或者必传,也可以如下:


    如果前端传进来的几个参数重名,可以如下:


    前端传了好几个参数都叫hover,可以把他们放在list里面

    还可以前端传“对象.属性”的参数,比如xx.yy
    其实就是把接收的对象里面有一个XX类的对象xx,给xx的yy属性赋值。
    比如有个User,User里面引用了xx对象,用User接收参数,这个参数会直接赋值给xx的yy属性。

    6.转发方式

    转发方式有请求转发和重定向两种,默认的是请求转发。

        @RequestMapping("xxx")
        public String demo( int age,String name){
            return "redirect:/a.jsp";//请求转发,默认
            return "forward:/a.jsp";//重定向
        }
    

    7.自定义视图解析器(不写的话,SpringMVC有默认的)

    之前的return是这样的:

    return "/a.jsp";
    

    在SpringMVC的配置文件上加上视图解析器:

        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    

    之后的return就可以这样了:

    return "a";
    

    会自动前面加上/,后面加上.jsp

    当指定了转发方式的时候(redirect:/a.jsp,forward:/a.jsp),这个自定义视图解析器就不起作用了,走默认的视图解析器。很好理解,因为再拼接前缀后缀就不对了。

    8.@ResponseBody

    在方法上面直接加@RequestMapping,无论返回什么,都是被认为要跳转的
    给加上@ResponseBody,就不会跳转,而是把返回值转换为json串以输出流响应给客户端。(需要导包)

    ps:这里可能会出现乱码问题:


    解决乱码

    相关文章

      网友评论

        本文标题:SpringMVC

        本文链接:https://www.haomeiwen.com/subject/dvyoxqtx.html