Spring MVC环境搭建 运行Hello,World
Spring常用的注解
1.RequestMapping注解
- 1. RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
- 2. RequestMapping注解可以作用在方法和类上
- 1. 作用在类上:第一级的访问目录
- 2. 作用在方法上:第二级的访问目录
- 3. 细节:路径可以不编写 / 表示应用的根目录开始
- 4. 细节:${ pageContext.request.contextPath }也可以省略不写,但是路径上不能写 /
- 3. RequestMapping的属性
- 1. path 指定请求路径的url
- 2. value value属性和path属性是一样的
- 3. mthod 指定该方法的请求方式
- 4. params 指定限制请求参数的条件
- 5. headers 发送的请求中必须包含的请求头
上代码:
1.在com.spring包下创建AnnoController类
package com.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 常用的注解
*/
@Controller
@RequestMapping("anno")
public class AnnoController {
@RequestMapping(path = "/hello")
public String sayHello(){
System.out.println("hello world");
return "success";
}
}
2.在webapp - WEB-INF 包下创建 pages包 - success.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>This is success</h1>
</body>
</html>
3.在webapp 包下创建annotation.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>This is anntation</h1>
<!-- 常用注解 -->
<a href="anno/hello"> Hello,World </a>
</body>
</html>
4.运行Tomcat服务器 - 点击 Hello,World
2.RequestParam注解
- 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
- 属性
- value:请求参数中的名称
- required:请求参数中是否必须提供此参数,默认值是true,必须提供
-
上代码:
-
在annotation.jsp加上一个a标签链接
-
在AnnoController类中加上一个方法
-
<a href="anno/testRequestParam?name=hh">RequestParam</a>
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name="name") String username){
System.out.println("Run RequestParam...");
System.out.println(username);
return "success";
}
运行:
点击RequestParam链接
3. RequestBody注解
- 1. 作用:用于获取请求体的内容(注意:get方法不可以)
- 2. 属性
- 1. required:是否必须有请求体,默认值是true
-
上代码
在annotation.jsp加上一个form表单
在AnnoController类中加上一个方法
<form action="anno/testRequestBody" method="post">
name:<input type="text" name="username" placeholder="enter one user name..."> </br>
age:<input type="password" name="age" placeholder="enter one user age..."> </br>
<input type="submit" value="提交" ><br/>
</form>
/**
* 获取请求体的内容
* @return
*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("Run RequestBody...");
System.out.println(body);
return "success";
}
运行 - 输入内容 - 提交:
4. PathVariable注解
- 1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 2. 属性
- 1. value:指定url中的占位符名称
- 3. Restful风格的URL
- 1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
- 2. restful风格的URL优点
- 1. 结构清晰
- 2. 符合标准
- 3. 易于理解
- 4. 扩展方便
上代码:
在annotation.jsp加上一个a标签
在AnnoController类中加上一个方法
<a href="anno/testPathVariable/1">PathVariable</a>
/**
* PathVariable注解
* @return
*/
@RequestMapping(value = "/testPathVariable/{sid}",method = RequestMethod.GET)
public String testPathVariable(@PathVariable(name = "sid") String id){
System.out.println("Run...");
System.out.println(id);
return "success";
}
运行 - 点击PathVariable链接:
如果将method = RequestMethod.GET 的GET改为POST将会报错
5. RequestHeader注解
- 1. 作用:获取指定请求头的值
- 2. 属性
- 1. value:请求头的名称
上代码:
在annotation.jsp加上一个a标签
在AnnoController类中加上一个方法
并不是只能获取Cookie值,Seesion Accept等等都是可以的
<a href="anno/testRequestHeader">RequestHeader</a>
/**
*获取请求头的值
* @return
*/
@RequestMapping(value = "/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Cookie") String haader){
System.out.println("Run...");
System.out.println(haader);
return "success";
}
运行 - 点击RequestHeader链接
6.CookieValue注解:
- 1. 作用:用于获取指定cookie的名称的值
- 2. 属性
- 1. value:cookie的名称
上代码
在annotation.jsp加上一个a标签
在AnnoController类中加上一个方法
<a href="anno/testCookieValue">CookieValue</a>
/**
*获取Cookie的值
* @return
*/
@RequestMapping(value = "/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue){
System.out.println("Run...");
System.out.println(cookieValue);
return "success";
}
运行
7. ModelAttribute注解
- 1. 作用
- 1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
- 2. 出现在参数上:获取指定的数据给参数赋值。
- 2. 应用场景
- 1. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
上代码:
在com.sprng的包下创建domain包User类
package com.spring.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private String uname;
private Integer age;
private Date date;
@Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", age=" + age +
", date=" + date +
'}';
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
在annotation.jsp加上一个form表单
在AnnoController类中加上两个方法
<form action="anno/testModelAttribute" method="post">
name:<input type="text" name="uname" placeholder="enter one user name..."> </br>
age:<input type="password" name="age" placeholder="enter one user age..."> </br>
<input type="submit" value="提交" ><br/>
</form>
/**
*ModelAttribute注解
* @return
*/
@RequestMapping(value = "/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "aaa") User user){
System.out.println("Hello,ModelAttribute!!!");
System.out.println(user);
return "success";
}
/**
* 该方法会先执行
*/
@ModelAttribute
public User hello(String uname){
System.out.println("Hello,World!!!");
// 通过用户查询数据库(模拟操作)
User user = new User();
user.setUname("aaa");
user.setAge(20);
user.setDate(new Date());
return user;
}
运行 - 输入内容 - 运行:
可看到 Hello,World先执行
另一种写法
@ModelAttribute
public void hello(String uname, Map<String,User> map){
System.out.println("Hello,World!!!");
// 通过用户查询数据库(模拟操作)
User user = new User();
user.setUname("aaa");
user.setAge(20);
user.setDate(new Date());
map.put("aaa",user);
}
8.SessionAttributes注解
- 1. 作用:用于多次执行控制器方法间的参数共享
- 2. 属性
- 1. value:指定存入属性的名称
上代码:
在annotation.jsp加上三个a标签
在AnnoController类中加上三个方法
在类public class AnnoController {上加注解 @SessionAttributes(value = {"msg"}) //将 msg=马云 存入session域中- 在success.jsp中写上EL表达式
<a href="anno/testSessionAttributes">SessionAttributes</a>
<hr>
<a href="anno/getSessionAttributes">getSessionAttributes</a>
<hr>
<a href="anno/delSessionAttributes">delSessionAttributes</a>
/**
*SessionAttributes注解
* @return
*/
@RequestMapping(value = "/testSessionAttributes")
public String testSessionAttributes(Model model){
System.out.println("Hello,SessionAttributes!!!");
//存储到Request域中
model.addAttribute("msg","马云");
return "success";
}
/**
* 获取值
* @param getModel
* @return
*/
@RequestMapping(value = "/getSessionAttributes")
public String getSessionAttributes(ModelMap getModel){
System.out.println("Hello,getSessionAttributes!!!");
String msg = (String) getModel.get("msg");
System.out.println(msg);
return "success";
}
/**
* 清除值
* @param status
* @return
*/
@RequestMapping(value = "/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){
System.out.println("Hello,delSessionAttributes!!!");
status.setComplete();
return "success";
}
<!-- 页面会显示域对象中所有的内容 -->
<%-- ${ requestScope }--%>
${ msg }
${ sessionScope }
运行
点击SessionAttributes getSessionAttributes delSessionAttributes
依次为储存对象到域中 获取对象 在域中 删除对象在域中
Tomcat控制台:
Hello,SessionAttributes!!!
Hello,getSessionAttributes!!!
马云
Hello,delSessionAttributes!!!