接收请求参数
springMVC默认可以识别的日期字符串格式为: YYYY/MM/dd HH:mm:ss
通过@DateTimeFormat可以修改默认日志格式
@DateTimeFormat(pattern = "yyyy-MM-dd")
ParamContrallor.java
import entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Date;
/**
* 接收请求参数
*/
@Controller
@RequestMapping("param")
public class ParamContrallor {
// 基本类型参数
// 请求参数和方法的形参 同名即可
// http://localhost:8989/xxx/../test1?id=1&name=zzz&gender=false&birth=2018-12-12 12:20:30
@RequestMapping("/test1")
public String hello1(Integer id, String name, Boolean gender,@DateTimeFormat(pattern = "yyyy-MM-dd") Date birth) {
System.out.println("test1");
return "user";
}
// 实体收参
// 请求参数和实体的属性 同名即可
//http://localhost:8989/.../test2?id=1&name=zzz&gender=false&birth=2018-12-12 12:20:30
@RequestMapping("/test2")
public String test2(User user) {
System.out.println("test2");
return "index";
}
// 数组收参
//http://localhost:8989/.../test3?hobby=football&hobby=basketball
@RequestMapping("/test3")
public String test3(String[] hobby) {
System.out.println("test3");
return "index";
}
//集合收参
// <input type="text" name="users[0].id"/>
// post请求:http://...?users[0].id=1&users[0].name=zhangsan&users[0].birth=2018-12-12&users[1].id=2&....
@RequestMapping("/test4")
public String test4(String[] hobby) {
System.out.println("test4");
return "index";
}
/**
* 路径参数
* {abc}匹配价值 等于 * /test4/*
* {abc}会捕获其匹配到的内容 http://xxx/test4/1 1
* http://xxx/text4/zhangsan zhangsan
*
* @return http://xxxx/test4/10001
* @PathVariable("id") 将名为id的路径 捕获的值给handler的参数
*/
@RequestMapping("/test5/{id}")
public String test5(@PathVariable("id") Integer id) {
System.out.println("test5");
return "index";
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
hello world~~~
<hr>
<form action="${pageContext.request.contextPath}/param/test3">
<input type="checkbox" name="hobby" value="football"> 足球 <br>
<input type="checkbox" name="hobby" value="basketball"> 篮球 <br>
<input type="checkbox" name="hobby" value="volleyball"> 排球 <br>
<input type="submit" value="提交">
</form>
<hr>
<form action="${pageContext.request.contextPath}/param/test3">
<input type="text" name="addrs[0].id">
<input type="text" name="addrs[0].city"> <br>
<input type="text" name="addrs[1].id">
<input type="text" name="addrs[1].city"> <br>
<input type="submit" value="提交">
</form>
</body>
</html>
跳转
mvc.xml
<!-- 扫描 -->
<context:component-scan base-package="contrallor"/>
<!-- 注册 可以识别mvc相关注解的组件 -->
<mvc:annotation-driven/>
<!-- 视图解析器
1. 捕获handler的返回值 "user"
2. 解析,在返回值前后拼接 前后缀 : /user.jsp
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/><!-- 前缀 -->
<property name="suffix" value=".jsp"/><!-- 后缀 -->
</bean>
ForwardContrallor.java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 跳转
*/
@Controller
@RequestMapping("/forward")
public class ForwardContrallor {
@RequestMapping("/test1")
public String test1(){
System.out.println("test1");
// 转发到 user.jsp
return "user";
}
@RequestMapping("/test2")
public String test2(){
System.out.println("test2");
// 转发到 user.jsp
return "forward:/user.jsp";
}
@RequestMapping("/test3")
public String test3(){
System.out.println("test3");
// 转发到 /forward/test2
return "forward:/forward/test2";
}
@RequestMapping("/test4")
public String test4(){
System.out.println("test4");
// 重定向到 index.jsp
return "redirect:/index.jsp";
}
@RequestMapping("/test5")
public String test5(){
System.out.println("test5");
// 重定向到 /forward/test3
return "redirect:/forward/test3";
}
}
- 在增删改之后,为了防止请求重复提交,重定向跳转
- 在查询之后,可以做转发跳转
传值
DataContrallor.java
import entity.Address;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* 传值
*/
@Controller
@RequestMapping("/data")
@SessionAttributes({"addr4","id"})
public class DataContrallor {
@RequestMapping("/test1")
public String test1(HttpServletRequest request, HttpSession session){
Address address = new Address();
address.setId(1);
address.setCity("上海");
Address address2 = new Address();
address2.setId(2);
address2.setCity("北京");
// 传值
request.setAttribute("addr",address);
request.setAttribute("addr2",address2);
return "user";
}
@RequestMapping("/test2")
public String test2(Model model){
Address address = new Address();
address.setId(11);
address.setCity("上海11");
Address address2 = new Address();
address2.setId(22);
address2.setCity("北京22");
// 传值 model中的值,会在jsp即将执行时,复制给request
model.addAttribute("addr3",address);
model.addAttribute("addr4",address2);
model.addAttribute("id",2005);
return "user";
}
public ModelAndView test3(){
ModelAndView mv = new ModelAndView();
mv.addObject("id",1000);
mv.setViewName("forward:/user.jsp");
return mv;
}
@RequestMapping("/clear")
public String clear(SessionStatus status){
// 清空通过SessionAttributes存入的session
status.setComplete();
return "user";
}
}
user.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>user</title>
</head>
<body>
hello user~~~ <br>
${requestScope.addr.id} -- ${requestScope.addr.city} <br>
${sessionScope.addr2.id} -- ${sessionScope.addr2.city} <br>
${requestScope.addr3.id} -- ${requestScope.addr3.city} <br>
${sessionScope.addr4.id} -- ${sessionScope.addr4.city} <br>
${sessionScope.id}<br>
</body>
</html>