栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【学习笔记03】SpringMVC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习笔记03】SpringMVC

SpringMVC 第一个mvc程序

首先在web.xml中修改配置




    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet

        
            contextConfigLocation
            classpath:springmvc-servlet.xml
        

        1
    
    
        springmvc
        /
    

然后在resources目录下新建spring的配置文件





    

    

    
        
        
        
        
    

最后编写业务代码

package com.tuan.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();
//        业务代码
        mv.addObject("msg","HelloSpringMVC");
//        页面跳转
        mv.setViewName("hello");
        return mv;
    }
}

最后在spring配置文件中注册该类


最后运行并访问localhost:8080/hello得到运行结果

使用注解开发

web.xml下的配置还是不动,修改spring的配置文件




    
    
    
    
    
    

    
    
        
        
        
        
    


编写controller层下的类

package com.tuan.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {
    @RequestMapping(value ="hello")
    public String hello(Model model) {
        model.addAttribute("msg","HelloSpringMVC");
        return "hello";
    }
}

编写jsp页面,并通过el表达式得到controller中存放的数据

<%--
  Created by IntelliJ IDEA.
  User: 86151
  Date: 2021/11/16
  Time: 15:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


${msg}



RestFul风格

通过@PathVariable注解标识可以用url中通过RestFul风格传参

    @RequestMapping(value = "test/{a}/{b}")
    public String test(@PathVariable int a,@PathVariable int b, Model model) {
        model.addAttribute("msg","结果为"+(a+b));
        return "hello";
    }

这样我们就可以在地址栏中这样传参

@RequestMapping注解存在多个参数,value是url请求的地址后缀,还有一个可选参数method代表限制方法的请求方式(get/post等等)写法如下:

    @RequestMapping(value = "test/{a}/{b}",method = RequestMethod.GET)
    public String test(@PathVariable int a,@PathVariable int b, Model model) {
        model.addAttribute("msg","结果为"+(a+b));
        return "hello";
    }

还有更简单的方式,我们可以直接使用@GetMapping注解从而省略第二个method参数

@GetMapping(value = "test/{a}/{b}")

当我们需要从前端接收参数时,我们一般都需要显式的在参数表的参数中加上@RequestParam(“参数名”)来确保别人知道这个参数是从前端获取的。

重定向和转发

我们直接return使用的是转发,想要重定向则需要

return "redirect:hello";

重定向不需要视图解析器

乱码问题

使用过滤器解决乱码(写完之后不要忘记在web-inf里配置过滤器)

json

我们使用jackson包来将对象转换为json字符串

先导包(顺便导一下lombok写个user实体类偷懒用)

        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.13.0
        
        
        
            org.projectlombok
            lombok
            1.18.22
            provided
        

java中这样使用jackson将对象转换为json字符串

package com.tuan.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tuan.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class JsonTest {
    @GetMapping(value="/j1",produces = "application/json;charsetEncoding=uft-8")
    public String JsonTest(Model model) throws JsonProcessingException {
         ObjectMapper mapper = new ObjectMapper();
        User user = new User(1,"贾",19);
        model.addAttribute("msg",mapper.writevalueAsString(user));
        return "hello";
    }
}

这样通过@GetMapping参数produces="application/json;charsetEncoding=utf-8"解决乱码的方式太过于麻烦,还可以直接在spring的配置文件中配置。

 
    
        
            
               
            
            
                
                    
                        
                    
                
            
        
    


当我们使用json实现前后端分离时一般controller层可以直接返回json字符串而不需要再走视图解析器

想要不走视图解析器只需要把类上的注释改成@RestController或者在方法上使用@ResponseBody标注即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号