SpringMVC框架(三)

版权声明:@Wrial https://blog.csdn.net/qq_42605968/article/details/87400739

在前边搭建了ssm项目,在这一篇就对SpringMVC进行更多的了解
在SpringMVC中很重要的一部分就是参数的绑定,因为在日常的开发中使用参数绑定可以很大的减少代码的数量,这也是相对于有些框架的优点所在。


文件准备:
在下边会用到的和前一篇创建简单的ssm项目一些不同的文件
findUser.jsp,增加了一个页面跳转的链接


<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2019/2/13
  Time: 23:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page isELIgnored="false" contentType="text/html;charset=UTF-8" language="java" import="com.pojo.User" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>FindUser!</h1>
<tr>
    <td>${user1.id }</td>
    <td>${user1.username}</td>
    <td>${user1.birthday}</td>
    <td><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
    <td>${user1.sex }</td>
    <td>${user1.address}</td>
    <td>${user1.toString()}</td>
    <td><a href="${pageContext.request.contextPath }/findLike.action?s=张">模糊查询</a></td>

</tr>
</body>
</html>

UserList.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2019/2/12
  Time: 13:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>查询用户列表</title>
</head>
<body>
<form >
<c:forEach items="${list}" var="user">
    <tr>
        <td>${user.id }</td>
        <td>${user.username}</td>
        <td>${user.birthday}</td>
        <td><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
        <td>${user.sex }</td>
        <td>${user.address}</td>
        <td>${user.toString()}</td>
    </tr>
</c:forEach>
</form>
</body>

</html>

参数绑定

参数的简单使用

在这来简单区分一下模型,和模型和视图这两个方法
1.使用数据模型的方法,注意:String返回的UserList是jsp文件(默认,通过测试得来的),相当于设置了相应的视图。参数s在下一个讲,涉及到参数绑定。

  @RequestMapping("findLike")
    public String userList(Model model,  String s) {
        List<User> list = userService.SelectUserByLikeIt(s);
        System.out.println("123");
        model.addAttribute("list", list);
        return "UserList";
    }

2.使用模型和视图

    @RequestMapping("findLike")
    public ModelAndView userList(ModelAndView modelAndView,  String s) {
        List<User> list = userService.SelectUserByLikeIt(s);
        modelAndView.addObject("list", list);
        modelAndView.setViewName("UserList");

        return modelAndView;
    }

在这里插入图片描述

简单的参数绑定

通过上边的实例,讲讲简单参数的绑定
什么是简单参数?就是我们平时用的Integer啊String,char等等
下边代码就实现了参数的绑定

  @RequestMapping("findLike")
 public String userList(Model model, @RequestParam(value = "s" ,required = true,defaultValue = "李") String sr) {
        List<User> list = userService.SelectUserByLikeIt(sr);
        model.addAttribute("list", list);
        return "UserList";
    }

参数绑定的分情况讨论:

  1. public String userList(Model model,String s) ,方法体是这样写的,当然可以运行,因为在我在jsp传的参数名就是s,如下图所示
    在这里插入图片描述
    因此如果换为其他的参数那就不能被系统自动转换了。
  2. 为了解决这个参数的灵活性问题,SpringMVC提供了参数的绑定,如下就把s这个参数绑定到sr,这样在后文使用sr和使用s的效果相同。 public String userList(Model model, @RequestParam(value = “s” ) String sr)。
  3. 然而上边这些还不够,因为如果没有参数传递过去那岂不是还要再前端添加条件控制语句,那SpringMVC索性就又添加了一个参数,代码如下,
    public String userList(Model model, @RequestParam(value = “s” ,required = true,defaultValue = “李”) String sr),required为true的意思是必须要有参数传进来提供了defaultValue来设置默认值

这就是简单参数的绑定。

pojo参数的绑定(需要页面上的参数和pojo对应)

比如我们在更新时会用到修改用户信息,那就可以给参数绑定一个pojo类型的数据

    @RequestMapping("updateUser")
    public String updateUser(Model model, User user) {
        userService.update(user);
        model.addAttribute("msg","Update Success!");
        model.addAttribute("user", user);
        return "updateUser";
    }

包装的pojo用法也如此,包装的pojo可以实现额外的查询,前边在mybatis已经详细的讲过,这里就不多说了。

数组绑定

和上边的大同小异,数组绑定一般用于多选事件(比如批量删除),数组绑定是用于在表单添加Checkbox,然后传过来(变量名一致)。

    @RequestMapping("queryUser")
    //使用包装类,因为后边会加别的东西
    public String queryItem(QueryVo vo, Integer[] ids) {
        System.out.println(vo);
        //输出传入的数组
        if (ids != null && ids.length > 0) {
            for (Integer id : ids) {
                System.out.println("传入的用户列表分别为:" + id);
            }
        }
        return "UserList";
    }
List集合绑定

List集合一般是用于批量修改数据,需要给pojo包装加上List属性。特别注意的是,jsp里${status}.username :中status代表当前下标。
然后把它嵌套进foreach循环里。

这几个参数绑定很简单,也比较容易理解,用法也大致相同。

@RequestMapping注解

第一种:就如同我们前边用的那样,在那绑定你要访问的地址。并且它还可以是一个数组。如下这两个地址都可以访问到。

//    @RequestMapping("findLike")
    @RequestMapping(value = {"findLike","123"})
    public String userList(Model model, @RequestParam(value = "s", required = true, defaultValue = "李") String s) {
        List<User> list = userService.SelectUserByLikeIt(s);
        System.out.println("123");
        model.addAttribute("list", list);
        return "UserList";
    }

第二种:可以增加在头部作为目录管理,每次使用时必须要加上User/…(可以防止不同种类之间的重名问题)

@RequestMapping("User")
@Controller("userController")
public class UserController {
    @Resource(name = "userService")
    private UserService userService;
    。。。。。。。

第三种:限定请求方法,method限定,也可以限定多个请求方法

//可以限定请求方法
@RequestMapping(value = {"findLike","123"},method = {RequestMethod.POST,RequestMethod.GET})
    public String userList(Model model, @RequestParam(value = "s", required = true, defaultValue = "李") String s) {
        List<User> list = userService.SelectUserByLikeIt(s);
        System.out.println("123");
        model.addAttribute("list", list);
        return "UserList";
    }

请求方法如下:
在这里插入图片描述

controller层的返回值

空返回使用最原始的servlet开发的方法,传入request和response进行操作(有转发或者重定向功能就不需要返回参数)

1.request的请求转发

 @RequestMapping("xxxx")
public void test(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("WEB-INF/jsp/test.jsp").forward(request,response);
    }

2.response的请求重定向

 @RequestMapping("xxxx")
public void test(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("WEB-INF/jsp/test.jsp");
    }
返回String

就和前面开头的示例相同,返回String的作用是响应的路径
在返回为String类型也可以使用转发和重定向的策略
转发:在前边加上forword ,例如 return " forword:xxx.action"
重定向:在前边加redirect,例如 return " redirect:xxx.action"

返回视图模型

前边也有示例,返回一个视图模型,在视图模型的实例种设置响应的路径。

这一篇就到此结束了,下一篇就主要写一些工具类和使用工具类,比如图片上传,异常处理,json处理等等

猜你喜欢

转载自blog.csdn.net/qq_42605968/article/details/87400739