SpringMVC学习笔记

使用SpringMVC映射请求

一、需要导入响应的Spring和SpringMVC的jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>edu.nf</groupId>
    <artifactId>springmvc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>ch01</module>
        <module>ch02</module>
        <module>ch03</module>
        <module>ch04</module>
        <module>ch05</module>
        <module>ch06</module>
        <module>ch07</module>
        <module>ch08</module>
        <module>ch09</module>
        <module>ch10</module>
        <module>ch11</module>
    </modules>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
        <!-- spring版本 -->
        <spring.version>5.1.1.RELEASE</spring.version>
        <servlet.version>4.0.1</servlet.version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- Spring mvc依赖,会传递依赖context、core等核心包-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <!-- war插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <warSourceDirectory>web</warSourceDirectory>
                    <!-- 指定web.xml路径 -->
                    <!--<webXml>web\WEB-INF\web.xml</webXml>-->
                    <!-- 打包时忽略web.xml文件-->
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>

    </build>

</project>
pom.xml

在resources资源文件下建一个 dispatcher-servlet.xml 文件

贴上需要配置的东西

<?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="edu.nf.ch01.controller"/>
    <!-- 启用mvc注解驱动-->
    <!-- 这个注解驱动注册了RequestMappingHandlerMapping(请求映射处理器)
    和一个RequestMappingHandlerAdapter(请求映射适配器),同时启用了
    @RequestBody,@ResponseBody注解以及表单验证的等功能-->
    <mvc:annotation-driven/>

    <!-- 配置视图解析器,spring有很多种视图解析器,不同的解析器用于解析成不同的视图对象
         其中有一个叫做InternalResourceViewResolver(内部资源解析器)
         ,用于解析内部的jsp资源-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 给这个视图解析器注入两个属性 -->
        <!-- 指定资源目录的前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 指定资源的后缀-->
        <property name="suffix" value=".jsp"/>
        <!-- 这个解析器默认解析的视图对象为InternalResourceView,
         如果需要在JSP中使用jstl标签库,那么可以设置为JstlView,
         它是InternalResourceView的子类-->
        <!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>-->
    </bean>
</beans>
dispatcher-servlet

还需要在web.xml中配置请求总控器 

<?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_4_0.xsd"
         version="4.0">
    
    <!-- 配置请求总控器,由Spring-webmvc提供,它负责接收所有客户端的请求
         ,然后通过解析url并交给后端控制器(Controller)进行请求处理-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- springmvc默认会从WEB-INF下查找名为
        [servlet-name]-servlet.xml的配置文件,
        也可以通过init-param重新指定配置文件的路径-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!-- 指定从classpath中查找 -->
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

配置文件中指向的就是需要跳转的地址

后端控制器代码

package edu.nf.ch01.controller;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author wangl
 * @date 2018/10/26
 * 后端控制器
 */
@Controller
@Scope("prototype")
public class HelloController {

    /**
     * 通过@RequestMapping来映射请求的url
     * @return
     */
    @RequestMapping("/hello")
    public ModelAndView hello(){
        System.out.println("hello spring");
        ModelAndView mv = new ModelAndView("index");
        return mv;
    }
}

请求此url之后将会跳转到 index.jsp

二、请求的不同写法

package edu.nf.ch03.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/**
 * @author wangl
 * @date 2018/10/29
 */
@Controller
/**
 * @RequestMapping也可以标注在类上,
 * 通常用来指定请求的命名空间
 */
@RequestMapping("/user")
public class RequestMapController {

    /**
     * method属性用于指定能支持的请求方法,它的值为一个数组
     * @return
     */
    @RequestMapping(value = "/getUser", method = RequestMethod.GET)
    public ModelAndView getUser(){
        System.out.println("getUser...");
        return new ModelAndView("index");
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public ModelAndView login(){
        System.out.println("login...");
        return new ModelAndView("index");
    }

    @RequestMapping(value = "/reg", method = {RequestMethod.POST,RequestMethod.GET})
    public ModelAndView reg(){
        System.out.println("reg...");
        return new ModelAndView("index");
    }

    /**
     * 在spring4.0之后,加入了明确的方法请求处理的注解
     * @return
     */
    @GetMapping("/login2")
    public ModelAndView getUser2(){
        System.out.println("getUser2...");
        return new ModelAndView("index");
    }

    @PostMapping("/reg2")
    public ModelAndView reg2(){
        System.out.println("login2...");
        return new ModelAndView("index");
    }
}
RequestMapController

访问的时候我们需要指定类中带注解的命名空间在接上方法上的url

 

最后请求会跳转到这里

三、静态资源的处理 

四、form表单的映射

自定义类型转换器

需要在配置文件中配置转换器

 

映射的对象

 

这样就完成了一个自定义对象的转换

 

form表单的映射 

通过URL地址中的参数取值

时间类型的转换器

方式一

方式二

 在实体类中映射集合

 

posted @ 2018-11-07 23:27  wangf98  阅读(151)  评论(0)    收藏  举报