SpringMVC

SpringMVC

SpringMVC流程图示

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架(完善的注解体系是特色)


2021-04-14_112325.jpg
2021-04-14_094713.jpg

特有行为要自己描述,其他由Spring框架封装好,蓝色框就是Spring容器

SpringMVC快速入门

需求:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转

  • 步骤

1.导入SpringMVC相关坐标


            org.springframework
            spring-webmvc
            5.0.5.RELEASE

2.配置SpringMVC核心控制器DispatherServlet

web.xml中配置

    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        1
    
    
        DispatcherServlet
        /
    

3.创建Controller类和视图页面
4.使用注解配置Controller类中业务方法的映射地址

UserController类
@Controller
public class UserController {
    @RequestMapping("/quick")//请求映射
    public String save(){
        System.out.println("Controller save running....");
        return "success.jsp";//写跳转视图的名字
    }
}
-------------------------------------------------
再在webapp下创建需要跳转到的页面 success.jsp

5.配置SpringMVC核心文件spring-mvc.xml



     
     
    

6.客户端发起请求测试


2021-04-14_111947.jpg

工件部署失败解决方法
https://blog.csdn.net/new_buff_007/article/details/89476581

SpringMVC组件解析

SpringMVC执行流程

2021-04-14_112824.jpg

SpringMVC中@RequestMapping
用于建立请求URL和处理请求方法之间的对应关系

  • 位置:
    1.类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
    2.方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
@Controller
@RequestMapping("/xxx")
public class UserController {
    //此时请求地址:http://localhost:8080/user/quick
    @RequestMapping("/quick")//请求映射
    public String save(){
        System.out.println("Controller save running....");
        return "/success.jsp";//写跳转视图的名字
        // 加/代表在user下找资源,否则在8080下找资源
    }
}
  • 属性:
    value:用于指定请求的URL。它和path属性的作用是一样的
    method:用于指定请求的方式
    params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
@RequestMapping(value="/quick",method = RequestMethod.POST,params = {"username"})
访问方式:locahost:8080/user/quick?username

只能以Post方法请求,也由get等其他方法
params = {"username"},表示请求参数必须有accountName
params = {"moeny!100"},表示请求参数中money不能是100

SpringMVC注解解析组件扫描





    
    

spring-mvc.xml配置解析



        
        
        
 
在spring-mvc.xml进行此配置,作用于返回视图时
之后return "xxx" 时,实际是return "/jsp/xxx.jsp"

SpringMVC数据响应方式

方式1:页面跳转

直接返回字符串
此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转

return "index";


此时转发资源地址/WEB-INF/views/index.jsp

转发:forward:/WEB-INF/views/index.jsp(WEB-INF文件夹不能被显示访问)
重定向:redirect:/index.jsp
通过ModelAndView对象返回

在success.jsp文件里,有${username},等待ModelAndView或String给其返回值
    @RequestMapping(value="/quick2")//请求映射
    public ModelAndView save2(){
        /*
        Model:模型 作用封装数据
        View:视图 作用展示数据
         */
        ModelAndView modelAndView = new ModelAndView();
        //设置模型数据
        modelAndView.addObject("username","itcast");
        //设置视图名称
        modelAndView.setViewName("success");
        return modelAndView;
    }

    //springmvc对方法上的参数可以提供相应注入
    @RequestMapping(value="/quick3")//请求映射
    public ModelAndView save3(ModelAndView modelAndView){
        modelAndView.addObject("username","itheima");
        modelAndView.setViewName("success");
        return modelAndView;
    }
    
    //Model是SpringMVC提供的对象
    @RequestMapping(value="/quick4")//请求映射
    public String save4(Model model){
        model.addAttribute("username","邵子朋");
        return "success";
    }

    //requests是原生javaweb的对象
    @RequestMapping(value="/quick5")//请求映射
    public String save5(HttpServletRequest request) {
        request.setAttribute("username","Nobility");
        return "success";
    }

方式2:回写数据

直接返回字符串
Web基础阶段:客户端访问服务器端,直接回写字符串作为响应体返回,只需使用
response.getWriter().print("hello world")即可

Controller中回写字符串

  • 通过SpringMVC框架注入的response对象,使用response.getWriter().print("hello world")回写数据,此时不需要视图跳转,业务方法返回值为void
 @RequestMapping(value="/quick6")
    public void save6(HttpServletResponse response) throws IOException {
        response.getWriter().print("hello itcast");
        //在网页上打印hello itcast
    }
  • 将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是视图跳转而是直接在http响应体中返回(重要)
@RequestMapping(value="/quick7")
    @ResponseBody
    public String save7() throws IOException {
        return "hello itheima";
    }

返回json格式对象,前提是先导入3个依赖

    @RequestMapping(value="/quick8")
    @ResponseBody
    public String save8() throws IOException {
        return "{\"username\":\"zhangsan\",\"age\":18}";//返回json对象
    }

    @RequestMapping(value="/quick9")
    @ResponseBody//因为返回的json仍是串,必须保留
    public String save9() throws IOException {
        User user = new User();
        user.setUsername("list");
        user.setAge(30);
        //导入json包,使用json转换工具,将对象转换为json格式字符串再返回
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(user);
        return json;//优化save8输出json的方式
    }

返回对象或集合

  • 返回对象或集合方式1
@RequestMapping(value="/quick10")
@ResponseBody//组织进行跳转
//期望SpringMVC自动将User转换为json格式字符串
public User save10() throws IOException {
        User user = new User();
        user.setUsername("lisi");
        user.setAge(30);
        return user;//优化save8输出json的方式
}
------------------------------------------------------------------------
spring-mvc.xml文件中配置


        
            
                
            
        

  • 返回对象或集合方式2
    方式1配置比较麻烦,配置的代码比较多,因此,可以使用mvc的注解驱动代替上述配置。
spring-mvc.xml文件中
-------------------------------------------------------------------------
命名空间添加
xmlns:mvc="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
-------------------------------------------------------------------------
配置文件添加


在 SpringMVC 的各个组件中
处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。
使用自动加载
RequestMappingHandlerMapping(处理映射器)RequestMappingHandlerAdapter(处理适配器)
在Spring-xml.xml配置文件中使用,替代注解处理器和适配器配置。
同时使用默认底层就会集成jackson进行对象或集合的json格式字符串的转换

你可能感兴趣的:(SpringMVC)