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>
在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>

还需要在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"); } }
访问的时候我们需要指定类中带注解的命名空间在接上方法上的url

最后请求会跳转到这里

三、静态资源的处理

四、form表单的映射
自定义类型转换器

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


映射的对象


这样就完成了一个自定义对象的转换
form表单的映射

通过URL地址中的参数取值

时间类型的转换器
方式一

方式二

在实体类中映射集合




浙公网安备 33010602011771号