完整的项目案例: springmvc.zip
目录
实例
除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
项目结构:
配置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"> <!-- 请求总控器 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcher-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
配置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.ch06.controller"/> <mvc:annotation-driven/> <mvc:default-servlet-handler/> <!-- springmvc提供了很多种视图解析器来完成不同的视图解析工作, 例如内部资源视图解析器、模板引擎的视图解析器、XML视图解析器等等 ,而在配置文件中是可以同时配置多个视图解析器的,那么Springmvc 在做视图响应的时候,会根据配置文件中的配置的所有视图解析器按照顺序 进行匹配,直到找到一个合适的视图解析器来完成解析。当有多个视图解析器存在时, 可以通过order属性来指定解析器的优先级(<property name="order" value="0"/>)--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
请求控制器Controller
(RedirectAttributesController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; /** * @author wangl * @date 2018/10/31 * 使用RedirectAttributes解决重定向传参的问题 * 这个对象是在Springmvc 3.1的版本加入的 */ @Controller public class RedirectAttributesController { /** * 重定向一个JSP页面,使用addAttribute的方式 * 将参数绑定在重定向的url后面带回到页面 * @param user * @param redirectAttributes * @return */ @PostMapping("/redirect3") public String redirectPage(Users user, RedirectAttributes redirectAttributes){ redirectAttributes.addAttribute("user", user.getUserName()); return "redirect:redirectattr.jsp"; } /** * 重定向一个新的请求,使用FlushAttribute的方式, * 将数据存入一个FlushMap中,它利用了Session的机制保存, * 在重定向完成之后会自动清除这个对象 * * @param user * @param redirectAttributes * @return */ @PostMapping("/redirect4") public String redirectReq(@ModelAttribute("user") Users user, RedirectAttributes redirectAttributes){ redirectAttributes.addFlashAttribute("user", user); return "redirect:redirectAction"; } /** * 从redirect4的请求重定向到这个方法 * @param user * @return */ @GetMapping("/redirectAction") public String getRedirectAttr(@ModelAttribute("user") Users user){ System.out.println(user.getUserName()); return "index"; } }
(ResponseBodyController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** * @author wangl * @date 2018/10/31 */ //@Controller /** * @RestController是在spring4.0后新加入的一个注解, * 同样用于标注一个类为控制器组件,如果当前控制器中所有的 * 请求处理方法都需要以ResponseBody的方式响应,那么 * 就是用这个注解,而不需要再每一个方法上都标注@ResponseBody注解 */ @RestController public class ResponseBodyController { /** * 使用@ResponseBody标注, * 表示将方法的返回值以Response输出流写回客户端, * 这时,springmvc就会将序列化的数据放入响应体中并写回 * @return */ @GetMapping("/getUser") public Users getUser(){ Users user = new Users(); user.setUserName("user1"); user.setAge(21); return user; } }
(RequestBodyController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; /** * @author wangl * @date 2018/10/31springmvc */ @RestController public class RequestBodyController { /** * 接收ajax提交的数据并做类型转换映射 * @param user * @return */ @PostMapping("/addUser") public String addUser(Users user){ System.out.println(user.getUserName()); System.out.println(user.getAge()); return "success"; } /** * 是用@RequestBody标注参数, * 表示将接收的json文本数据进行格式转换后映射到实体中 * @param user * @return */ @PostMapping("/addUser2") public String addUser2(@RequestBody Users user){ System.out.println(user.getUserName()); System.out.println(user.getAge()); return "success"; } }
(UserController)
package edu.nf.ch06.controller; import edu.nf.ch06.entity.Users; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; import java.util.Map; /** * @author wangl * @date 2018/10/31 */ @Controller public class UserController { /** * 转发视图 */ @GetMapping("/forwrd1") public ModelAndView forward1(){ //通过ModelAndView转发 return new ModelAndView("index"); } @GetMapping("/forwrd2") public String forward2(){ //通过ModelAndView转发 return "index"; } /** * 重定向视图 * @return */ @GetMapping("/redirect1") public ModelAndView redirect1(){ //在ModelAndView的构造方法传入一个RedirectView的视图对象来完成重定向 //return new ModelAndView(new RedirectView("redirect.jsp")); //简化 return new ModelAndView("redirect:redirect.jsp"); } @GetMapping("/redirect2") public String redirect2(Users user){ return "redirect:redirect.jsp"; } }