以一个Controller请求为例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("userList")
public ModelAndView userList() {
//这个是需要Service获取数据结果
List<User> list = userService.getAllUser();
//返回ModelAndView结果
ModelAndView modelAndView = new ModelAndView();
//填充数据
modelAndView.addObject("users", list);
//指定视图
modelAndView.setViewName("userList");
return modelAndView;
}
}
在请求中@RequestMapping
注解的作用有两点:
窄化请求URL:
@RequestMapping
注解,对URL进行分类管理,可以在这里定义根路径,最终的访问URL是跟路径+子路径。限制HTTP的请求方法:
@RequestMapping( value = "userList",method = RequestMethod.POST)
,如果限制请求为POST请求时,则前端的get请求会报错(405错误)。参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,当数据到达Controller层时,就是参数绑定的过程。
在Spring MVC中,提交请求的数据是通过方法形参接收,从客户端请求key-value数据,经过参数绑定,将key-value数据绑定到controller的形参上,然后通过controller就可以直接使用该参数了。
这里主要涉及的是参数绑定组件,需要先理解请求的数据转化为我们需要的数据称之为参数绑定组件,也就是参数绑定转换器, Spring MVC内置很多参数转换器,只有在极少数情况需要实现自定义的参数转换器。
Spring MVC支持的默认的参数类型主要有以下几种,这些类型直接在方法的形参上给出默认的类型的声明,就可以直接使用了。
HttpServletRequest
对象,通过request对象来获取请求信息。HttpServletResponse
对象,通过response处理响应信息。HttpSession
对象,通过Session对象得到session信息(缓存信息的存储)。Model/ModelMap
对象,Model是接口,ModelMap是一个接口实现,将model数据填充到request中,即使使用Model,内部绑定的还是ModelMap的实现。import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
//默认的类型
@RequestMapping("defaultParamType")
public void defaultParamType(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) throws IOException {
//获取前端请求的数据
request.getParameter("userName");
//设置数据
request.setAttribute("repsonseParam","request");
//响应结果
response.getWriter().write("response");
//设置session信息
session.setAttribute("sessionParam","session");
//Model参数设置
model.addAttribute("modelParam","model");
}
}
基本的数据类型包括:byte,short,int,long,float,double,char,boolean。
以int为类:
<%@ 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"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
head>
<body>
<form action="${pageContext.request.contextPath}/user/basicDataType" method="get">
<input name="number" value="20" type="text"/>
<input type="submit" value="提交"/>
form>
body>
html>
/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
//基本的数据类型
@RequestMapping("dataType")
public String DataType() {
return "dataType";
}
@RequestMapping("basicDataType")
public void basicDataType(int number){
System.out.println("number:" + number);
}
}
@RequestParam
注解完成。例如:/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
//基本的数据类型
@RequestMapping("dataType")
public String DataType() {
return "dataType";
}
@RequestMapping("basicDataType")
public void basicDataType(@RequestParam("number") int num){
System.out.println("number:" + num);
}
}
例如:
public class User {
//用户ID
private int id;
private String userName;
private String sex;
private String address;
//省略get/set方法
}
注意:表达的name属性和pojo实体类的属性保持一致才能映射成功。 controller层代码: 集合类型:数组、List、Map等常用的数据传输的类型。 以List为例: 返回结果定位为ModelAndView类型,将Model和view进行分别设置。 返回逻辑视图名 redirect:重定向 forward:页面转发 在controller方法的形参上可以定义 使用request转向页面 使用response页面重定向 通过response指定响应结果 本文地址:https://blog.csdn.net/Sampson_S/article/details/107382867<%@ 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"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>详情title>
head>
<body>
<form action="${pageContext.request.contextPath }/user/editUserSubmit" method="get">
<h1 align="center">修改用户信息h1>
<tr>
<td>用户IDtd>
<td> <input type="text" name="id" value="${user.id }" readonly >td> td>
tr>
<tr>
<td>用户名td>
<td> <input id="username" type="text" name="userName" value="${user.userName }">td> td>
tr>
<tr>
<td>性别td>
<td> <input id="sex" type="text" name="sex" value="${user.sex }">td> td>
tr>
<tr>
<td>地址td>
<td> <input id="address" type="text" name="address" value="${user.address }">td> td>
tr>
<tr ><td colspan="2" align="center"><input type="submit" value="提交"/>td>tr>
table>
form>
body>
html>/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
//自定义的数据类型
@RequestMapping("{id}")
public ModelAndView user(@PathVariable("id") int id){
User user = new User();
user.setId(1);
user.setUserName("lisi");
user.setSex("男");
user.setAddress("西安");
//返回ModelAndView结果
ModelAndView modelAndView = new ModelAndView();
//填充数据
modelAndView.addObject("user", user);
//指定视图
modelAndView.setViewName("editUser");
return modelAndView;
}
@RequestMapping("editUserSubmit")
public String editUserSubmit(User user){
System.out.println("用户信息:" + user);
return "success";
}
}集合类型
c:forEach
<%@ 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" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表title>
head>
<body>
<table width="80%" border="1" align="center">
<h1 align="center">用户列表h1>
<tr>
<td>用户IDtd>
<td>用户名td>
<td>性别td>
<td>住址td>
tr>
<c:forEach items="${users }" var="user">
<tr>
<td>${user.id }td>
<td>${user.userName }td>
<td>${user.sex}" td>
<td>${user.address }td>
tr>
c:forEach>
table>
body>
html>/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
//集合类型
@Autowired
private UserService userService;
@RequestMapping(value = "UserList", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView userList() {
//这个是需要Service获取数据结果
List<User> list = userService.getAllUser();
//返回ModelAndView结果
ModelAndView modelAndView = new ModelAndView();
//填充数据
modelAndView.addObject("users", list);
//指定视图
modelAndView.setViewName("userList");
return modelAndView;
}
}Spring MVC的请求返回值
返回ModelAndView类型
/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping(value = "UserList", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView userList() {
//这个是需要Service获取数据结果
List<User> list = userService.getAllUser();
//返回ModelAndView结果
ModelAndView modelAndView = new ModelAndView();
//填充数据
modelAndView.addObject("users", list);
//指定视图
modelAndView.setViewName("userList");
return modelAndView;
}
}返回String类型
/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping("dataType")
public String DataType() {
//逻辑视图名 =》视图路径=前缀("WEB-INF/jsp/")+逻辑视图名("dataType")+后缀(".jsp")
return "dataType";
}
}/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping("editUserSubmit")
public String editUserSubmit(User9 user) {
System.out.println("editUserSubmit:"+user);
//通过重定向和页面转发来进行介绍 "user/userList"
return "redirect:userList";
}
}/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping("editUserSubmit")
public String editUserSubmit(User9 user) {
System.out.println("editUserSubmit:"+user);
//通过重定向和页面转发来进行介绍 "userList"
return "forward:userList";
}
}返回void类型
HttpServletRquest
和HttpServletResponse
类型的参数,使用request和response类响应结果。/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping("defaultParamType")
public void defaultParamType(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("userList").forward(request,response);
}
}/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping("defaultParamType")
public void defaultParamType(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("userList");
}
}/*
* 处理器
* 基于注解实现的Handler
*/
@Controller
public class ControllerDemo {
@RequestMapping("defaultParamType")
public void defaultParamType(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("hello word");
}
}
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有