1常用注解
1.1 @RequestParam:
把请求中指定名称的参数给控制器中的形参赋值。修饰前端传回的值,如果于控制器方法不同也可以接收。属性:required:用于设置是否为必须穿的值(默认为是) ;name/value:设置参数名称。
jsp:
<a href="/anno/testRequestParam?name=hhhh"></a>
controller:
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = "name") String username){
System.out.println(username);
return "success";
}
1.2@RequestBody:
用于获取请求体的内容,不适应于get请求。属性:required:是否必须有请求体(默认为是),如果为false时get请求获取为null,否则报错。
jsp:
<form action="anno/testRequestBody" method="post">
用户名<input type="text" name="username" >
<input type="submit" value="提交">
</form>
controller:
/**
* 获取请求体内容
* @param body
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println(body);
return "success";
}
1.3@PathVariable
用于绑定url中的占位符的。属性:value:指定url占位符名称;required:是否为必须。
jsp:
<a href="/anno/testPathVariable/10"></a>
controller:
/**
* PathVariable注解
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable(name = "id") String id){
System.out.println(id);
return "success";
}
1.4@RequestHeader(一般用不到)
获取请求头。属性:name/value:提供请求头名称;required:是否必须。
1.5@CookieValue
把指定的Cookie名称的值传入控制器方法参数。value:指定cookie的名称;required:是否必须。
1.6ModelAttribute
出现在方法上:表示当前方法会在控制器的方法执行之前执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
出现在参数上:获取指定的数据给参数赋值。
属性:value:获取数据的key。
应用场景:当表单提交数据是不完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
1.7SessionAttribute
用于多次执行控制器方法之间的参数共享。属性:value:用于指定存入的属性名称;type:用于指定存入的数据类型。
2响应数据和结果试图
2.1返回字符串:
返回字符串可以指定逻辑试图的名称。
提交jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="responseDemo/responseString">返回字符串</a>
</body>
</html>
控制器返回字符串指定的jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>执行成功。</h3>
${user.age}
${user.password}
${user.username}
</body>
</html>
controller:
@RequestMapping("/responseString")
public String requestString(Model model){
System.out.println("返回字符串方法执行了。");
// 模拟从数据库查询User对象
User user = new User();
user.setAge(1);
user.setPassword("123");
user.setUsername("jm");
model.addAttribute("user",user);
return "success";
}
2.2返回为空(void):
跟Servlet的用法一模一样。
/**
* 返回void
*/
@RequestMapping("/responseVoid")
public void responseVoid(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
System.out.println("返回空的方法执行了。");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 请求转发
request.getRequestDispatcher("index.jsp").forward(request,response);
// 重定向
response.sendRedirect("index.jsp");
// 直接响应
response.getWriter().println("Hello");
}
2.3返回是ModelAndView对象
它是Spring框架提供的对象,用来调整JSP视图。用法就相当于返回String的,只不过是使用的对象不同。
@RequestMapping("/responseModelAndView")
public ModelAndView responseModelAndView(){
// 创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
System.out.println("responseModelAndView返回的执行");
User user = new User();
user.setAge(1);
user.setPassword("123");
user.setUsername("jm");
// 把user对象存入modelAndView对象中
modelAndView.addObject("user",user);
// 视图解析器(相当于返回String类型的方法返回的那个值)
modelAndView.setViewName("success");
return modelAndView;
}
2.4请求转发和重定向
使用关键字进行请求转发和重定向:
/**
* 转发和重定向
* @return
*/
public String responseForwardOrRedirect(){
System.out.println("responseForwardOrRedirect执行");
// 请求转发固定写法:forward:...
return "forward:/WEB-INF/pages/success.jsp";
// 重定向
// return "redirect:index.jsp";
}
2.5响应JSON数据
如果使用前后端分离,则返回的都是Json格式。
导入依赖:
<!--JavaBean对象和Json转换Jar-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
ajax请求:
<button id="btn">发送Ajax请求返回Json</button>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.2/dist/jquery.min.js"></script>
<script>
$(function () {
$("#btn").click(function () {
// 发送Ajax请求
$.ajax({
//请求路径
url:"responseDemo/responseAjax",
// 请求内容类型
contentType:"application/json;charset=UTF-8",
//json数据
data:'{"username":"Tom","password":"word","age":12}',
//返回类型
dataType:"json",
//请求方式
type:"post",
success:function (data) {
// data是服务器端响应的数据
alert(data.username);
alert(data.age);
alert(data.password);
}
})
})
})
</script>
如果使用本地jQuery文件反应失败,在springmvc.xml文件中添加:
<!--配置前端控制器中的那些静态资源不拦截-->
<mvc:resources mapping="/js/**" location="/js/**"></mvc:resources>
controller:
/**
* 异步请求返回Json
*/
@RequestMapping("/responseAjax")
public @ResponseBody User responseAjax(@RequestBody User user){
System.out.println("responseAjax执行了。。");
// 后台将Json字符串封装到user对象中
System.out.println(user.toString());
// 响应到前端
user.setUsername("Work");
// 响应
return user;
}