目录
2、改造Controller层—UserController.java
2.但是如果路径特别深,需要 "视图解析器",在spring-servlet.xml中配置 除去了前缀,后缀。
3.使用ModelAndView,将视图页面和对象放到ModelAndView对象当中,实现跳转功能
一、使用Spring MVC实现新增用户
1、更新User类中属性
- 这里注意:
- Spring MVC框架中时间类型的数据无法自动绑定
- birthday是Date的类型,所以需要进行格式化注解@DateTimeFormat
- @ModelAttribute 不仅仅和从页面中获取对象的所有属性,而且可以将对象放入request当中
- @DateTimeFormat(pattern="yyyy-MM-dd")的使用 设置对应日期属性的字符串格式
- 若未注解,则400状态码:请求错误
public class User {
private String name;
private int password;
//@DateTimeFormat(pattern="yyyy-MM-dd")的使用
//设置对应日期属性的字符串格式
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
private String sex;
private int age;
constructor构造器方法
setter和getter方法
}
2、改造Controller层—UserController.java
- addUser()方法:从列表页进入新增页面
- @ModelAttribute
- Model
@RequestMapping("/toaddUser.action")
public String toaddUser(){
logger.info("去增加页面");
return "addUser";
}
@RequestMapping("/addUser.action")
//ModelAttribute
//不仅仅和从页面中获取对象的所有属性,而且可以将对象放入request当中
public String addUser(@ModelAttribute("user") User user){
logger.info(user);
logger.info(user.getName());
logger.info(user.getPassword());
logger.info(user.getBirthday());
logger.info(user.getSex());
logger.info(user.getAge());
return "redirect:tologin.action";
}
3、改造View层
注意jsp中的name与User类中的属性一致
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>增加用户</title>
</head>
<body>
<form action="addUser.action" method="post">
<p>用户名:<input type="text" placeholder="请输入用户名" name="name" required="required"></p>
<p>密码:<input type="password" placeholder="请输入密码" name="password" required="required"></p>
<p>生日:<input type="date" name="birthday" ></p>
<p>性别:<input type="radio" value="m" name="sex">男<input type="radio" value="f" name="sex">女</p>
<p>年龄:<input type="number" name="age"></p>
<p><input type="submit" value="添加"><input type="reset" value="重置"></p>
</form>
</body>
</html>
二、转发跳转
1.字符串 一个对应一个 View视图
- 我们用login事务来展示
springmvc 对于跳转这件事,简化!(不用配置,可以使用字符串自动跳转)
代码如下(示例):
@Controller
public class UserController {
Logger logger =Logger.getLogger(UserController.class);
@RequestMapping("/tologin.action")
public String toLogin(){
logger.info("进去登陆页面");
return "login";//目标页面名称
}
}
2.但是如果路径特别深,需要 "视图解析器",在spring-servlet.xml中配置 除去了前缀,后缀。
代码如下(示例):
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
3.使用ModelAndView,将视图页面和对象放到ModelAndView对象当中,实现跳转功能
推荐使用mv4
@Controller
public class ModelAndViewController {
Logger logger = Logger.getLogger(ModelAndViewController.class);
@RequestMapping("/mv1.action")
public ModelAndView mv1(String username){
logger.info(username);
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
//把用户名放进作用域
modelAndView.addObject("username",username);
//将视图名称放入mv
modelAndView.setViewName("main");
return modelAndView;
}
@RequestMapping("/mv2.action")
public ModelAndView mv2(String username,int password){
logger.info(username);
//创建用户对象
User user = new User();
user.setUsername(username);
user.setPassWord(password);
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
//把用户名放进作用域
modelAndView.addObject("user",user);
//将视图名称放入mv
modelAndView.setViewName("main");
return modelAndView;
}
@RequestMapping("/mv3.action")
public String mv3(String username, Map<String,Object> model){
logger.info(username);
model.put("username",username);
return "main";//视图的名称
}
@RequestMapping("/mv4.action")
public String mv4(String username, Model model){
logger.info(username);
model.addAttribute("username",username);
return "main";
}
三、使用REST风格(一种软件架构风格)
它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
1.使用Spring MVC实现用户查看
- 使用REST风格获取用户的信息
- @PathVariable标签的使用
- 注意:参数类型,int password--Integer password
@RequestMapping(value = "/main/{name}/{password}",method = RequestMethod.GET)
public String main(@PathVariable String name, @PathVariable Integer password, Model model){
logger.info(name);
logger.info(password);
User user = new User();
user.setName("姓名是"+name);
user.setPassword(password);
model.addAttribute("user",user);
return "main";
}
在web.xml中需要将url-pattern更改为“/”
<!-- 使用REST风格-->
<url-pattern>/</url-pattern>
- 我们试着用博客ID查找用户:
博客:标题和内容
@RequestMapping(value = "/bloginfo/{bid}",method = RequestMethod.GET)
public String bloginfo(@PathVariable int bid,Model model){
logger.info(bid);
Blog blog = new Blog();
blog.setTitle("编号为"+bid+"的博客");
blog.setContext("内容...");
model.addAttribute("blog",blog);
return "bloginfo";
}
bologinfo.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>博客内容</title>
</head>
<body>
<p>博客标题:${blog.title}</p>
<p>博客内容:${blog.context}</p>
</body>
</html>
2、将内容详情用List展示出来
我们继续用博客举例
BlogController
@Controller
public class BlogController {
Logger logger = Logger.getLogger(BlogController.class);
@RequestMapping("/blog.action")
public String blog(String title, String context, Model model){
logger.info(title);
logger.info(context);
List<Blog> list = new ArrayList<>();
list.add(new Blog("标题","内容"));
list.add(new Blog("标题2","内容2"));
list.add(new Blog("标题3","内容3"));
model.addAttribute("list",list);
return "blog";
}
blog.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>博客列表</title>
</head>
<body>
<h1>主页面</h1>
<ul>
<c:forEach items="${list}" var="blog">
<li>${blog.title}:${blog.context}</li>
</c:forEach>
</ul>
</body>
</html>