[关闭]
@wangzhuanyun 2024-09-27T23:06:11.000000Z 字数 4218 阅读 3517

Spring MVC

ssm


导入jar

  1. <!--JSON依赖-->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core</groupId>
  4. <artifactId>jackson-core</artifactId>
  5. <version>2.4.3</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.fasterxml.jackson.core</groupId>
  9. <artifactId>jackson-databind</artifactId>
  10. <version>2.4.3</version>
  11. </dependency>

Spring MVC常用注解

使用注解前应扫包并开启注解

  1. <!--自动扫描的包名,只扫描@Controller -->
  2. <context:component-scan base-package="com.hz.controller" >
  3. <!--开启注解-->
  4. <mvc:annotation-driven/>

@Controller

标注一个普通的JavaBean成为可以处理请求的控制器

@RequestMapping

通过请求URL进行映射

  1. //标识在类上
  2. @RequestMapping("/index")
  3. public class IndexController{
  4. //在方法上
  5. @RequestMapping(value="/ts",method = RequestMethod.GET)
  6. public ModelAndView index(){
  7. .....
  8. }
  9. method:
  10. RequestMethod.GET 必须以GET方式进入 @GetMapping
  11. RequestMethod.POST 必须以POST方式进入 @PostMapping
  12. params
  13. { "param1=value1" , "param2" , "!param3" }
  14. 请求参数的映射条件,指定请求的URL地址需要带那些参数

@RequestParam

参数传递

  1. public ModelAndView index(@RequestParam(value = "name1",required = false) String user_name)
  2. {
  3. .......
  4. }
  5. value:属性名,如:xxxx?name1=...
  6. required:是否必须 false为否
  7. defaultValue:默认值

@SessionAttributes

只能定义在类上,作用是将指定的Model中的键值对添加至session中

  1. //类中定义user_name存入session作用域
  2. @SessionAttributes(value = {"user_name"})
  3. public class IndexController {
  4. @RequestMapping("/ts")
  5. public ModelAndView index(){
  6. ModelAndView mav = new ModelAndView("user");
  7. //存入Request作用域和Session作用域
  8. mav.addObject("user_name",user_name);
  9. ....
  10. }
  11. }
  12. @SessionAttributes(types=User.class)会将model中所有类型为 User的属性添加到会话中。
  13. @SessionAttributes(value={“user1”, user2”}) 会将model中属性名为user1user2的属性添加到会话中。
  14. @SessionAttributes(types={User.class, Dept.class}) 会将model中所有类型为 UserDept的属性添加到会话中。
  15. @SessionAttributes(value={“user1”,“user2”},types={Dept.class})会将model中属性名为user1user2以及类型为Dept的属性添加到会话中。

@ResponseBody

返回JSON数据 一般用于方法上

  1. 引入JSON依赖包
  2. <!--JSON依赖-->
  3. <dependency>
  4. <groupId>com.fasterxml.jackson.core</groupId>
  5. <artifactId>jackson-core</artifactId>
  6. <version>2.4.3</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>com.fasterxml.jackson.core</groupId>
  10. <artifactId>jackson-databind</artifactId>
  11. <version>2.4.3</version>
  12. </dependency>
  13. @ResponseBody
  14. @RequestMapping("/testjson")
  15. public User jsons(@RequestParam long user_id){
  16. User user = this.userService.getUserById(user_id);
  17. return user;//直接返回对象
  18. }
  19. 对象中添加:
  20. @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
  21. 表示属性为null不返回

@RestController

标注该类中所有的方法都返回JSON 用于类中。无须在写@Controller

@ModelAttribute

  1. @RequestMapping(value="/ts1")
  2. public String index1(@ModelAttribute("user") User user)
  3. {
  4. user.setUser_name("张三");
  5. System.out.println(user.getUser_name());
  6. return "user";
  7. }

@DateTimeFormat

用户对象属性,控制入参时日期类型转换

  1. @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
  2. private Date user_login_endtime;

@RequestHeader

获取请求头中的参数

  1. @ResponseBody
  2. @RequestMapping(value = "/index",method = RequestMethod.POST)
  3. public User index(@RequestHeader(value = "token",defaultValue = "1",required = false) int tokenid){
  4. ......
  5. }

@JsonFormat

返回JSON数据时日期类型处理

  1. @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
  2. @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
  3. private Date user_login_endtime;

参数传递
ModelAndView

包含视图信息和模型数据信息

  1. public ModelAndView index1(){
  2. //返回页面 转发
  3. ModelAndView mav = new ModelAndView("视图名");
  4. ModelAndView mav = new ModelAndView();
  5. mav.setViewName("视图名");
  6. //存入值 Request作用域
  7. mav.addObject("键","值");
  8. return mav;
  9. }

Model

以Map方式进行存储,用于向作用域中存值

  1. public String index1(Model model)
  2. {
  3. model.addAttribute("user_name","张三");
  4. return "user"; //返回user.jsp页面
  5. }
  6. 注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key

Map

以Map方式进行存储,用于向作用域中存值

  1. public String index1(Map<String ,Object> map)
  2. {
  3. map.put("user_name","123");
  4. return "user";
  5. }

通过实体类接收参数

传入参数名必须与实体类对应,一般用于添加,修改类中多个属性时

  1. @RequestMapping(value="/ts1")
  2. public String index1(User user)
  3. {
  4. System.out.println(user.getUser_name());
  5. return "user";
  6. }

重定向与转发

  1. public String index1(User user)
  2. {
  3. .....
  4. return "redirect:/user.jsp";//重定向
  5. return "forward:页面";//转发
  6. }

REST风格

  1. @RequestMapping(value="/ts1/{user_id}.html")
  2. public String index1(@PathVariable("user_id") Long user_id)
  3. {
  4. System.out.println("id======"+user_id);
  5. return "user";
  6. }
  7. 请求路径为:.../ts1/参数.html
  8. 如:..../ts1/1.html或..../ts1/10.html

servlet方式
引入servlet-api.jar

  1. <!--servlet-api-->
  2. <dependency>
  3. <groupId>javax.servlet</groupId>
  4. <artifactId>javax.servlet-api</artifactId>
  5. <version>3.1.0</version>
  6. <scope>provided</scope>
  7. </dependency>
  8. public String cs(HttpServletRequest request, HttpServletResponse response, HttpSession session){
  9. session.setAttribute("username","123");
  10. return "user";
  11. }

Spring MVC框架特点

清晰地角色划分
灵活的配置功能
提供了大量的控制器接口和实现类
真正做到与View层的实现无关(JSP、Velocity、Xslt等)
国际化支持
面向接口编程
Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注