完整的项目案例: 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";
}
}