SpringMVC基础笔记(注解篇)

SpringMVC基础笔记(注解篇)

前言:

前言

MVC解释如下:
M是指业务模型(Model):通俗的讲就是我们之前用于封装数据传递的实体类。
V是指用户界面(View):一般指的是前端页面。
C则是控制器(Controller):控制器就相当于Servlet的基本功能,处理请求,返回响应

在这里插入图片描述

但是说实话,真正做项目的时候,就会因为需要编写的代码以及逻辑太多而崩溃,因为需要环环相扣,所以难免会出现顾此失彼的情况
为了简化我们的项目开发,我们采用SpringMVC编写代码

缺点:此处仅采用thymeleaf才发,但是它仅支持html静态页面,导致我放弃了SpringMVC,准备去看看SpringBoot是如何开发的。

一:核心配置

导入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.13</version>
</dependency>

这里是用到了thymeleaf引擎,所以加上一个依赖

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

在这里我们需要写三个配置文件,两个主配置文件

MainConfig

import org.springframework.context.annotation.Configuration;

//主配置文件
@Configuration
public class MainConfig {
}



WebConfig


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;

//扫描controller
@ComponentScan("com.text")
//主配置文件
@Configuration
//引入其他静态资源
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

//    这三个方法是模板,直接复制就能用

    //我们需要使用ThymeleafViewResolver作为视图解析器,并解析我们的HTML页面
    @Bean
    public ThymeleafViewResolver thymeleafViewResolver(@Autowired SpringTemplateEngine springTemplateEngine){
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setOrder(1);   //可以存在多个视图解析器,并且可以为他们设定解析顺序
        resolver.setCharacterEncoding("UTF-8");   //编码格式是重中之重
        resolver.setTemplateEngine(springTemplateEngine);   //和之前JavaWeb阶段一样,需要使用模板引擎进行解析,所以这里也需要设定一下模板引擎
        return resolver;
    }

    //配置模板解析器
    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setSuffix(".html");   //需要解析的后缀名称
        resolver.setPrefix("/WEB-INF/");   //需要解析的HTML页面文件存放的位置
        return resolver;
    }

    //配置模板引擎Bean
    @Bean
    public SpringTemplateEngine springTemplateEngine(@Autowired ITemplateResolver resolver){
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(resolver);   //模板解析器,默认即可
        return engine;
    }

    //    加载静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();   //开启默认的Servlet
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/");
        //配置静态资源的访问路径
    }
}

初始化配置类
InitConfig


import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

//这就是一个模板,直接拿来用就行,完全不用记下来,
//而且我们继承AbstractAnnotationConfigDispatcherServletInitializer之后
//直接重写代码,写好两个配置文件就行
public class InitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{MainConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}


Controller控制器

在这里插入图片描述

注入依赖

- 控制器MainController


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//控制类
@Controller
public class MainControl {
/*    跳转逻辑,
    RequestMapping
    属性:
    1.value:跳转目录
    2.params:跳转携带属性
    3.未完待续


    作用
    1.功能类似WebServlet,作为资源跳转目录
    2.重定向,返回语句前面加上  redirect:
    3.请求转发:返回语句前加上  forward:

    */

    @RequestMapping(value = "/text",params = {"username"})
    public ModelAndView index() {
        return new ModelAndView("and");
    }

    @RequestMapping("/text2")
    public ModelAndView index2() {
        return new ModelAndView("band");
    }
}


二:获取请求参数方式

- 方式一

//    方法一
    @RequestMapping("/text")
    public String text(@RequestParam(value = "and",required = false,defaultValue = "魏振华") String and){
        System.out.println(and);
        return "text";
    }

- 方式二

    @RequestMapping("/text")
    public String text(HttpServletRequest httpServletRequest){
        System.out.println(httpServletRequest.getParameterMap().keySet());
        return "text";
    }

- 方式三

//    封装成实体对象
    @RequestMapping("/text")
    public String text(User user){
        System.out.println(user.toString());
        return "text";
    }

三:快速获取cookie和session信息

- 获取cookie信息

//    封装成实体对象
    @RequestMapping("/text")
    public String text(User user){
        System.out.println(user.toString());
        return "text";
    }

- 获取session信息

    @RequestMapping("/text")
    public String text(HttpSession httpSession,
                       @SessionAttribute(value = "text",required = false)String text){
        System.out.println("获取到的session信息:"+text);
        httpSession.setAttribute("text","123456");
        return "text";
    }

四:重定向和请求转发‘

- 重定向

    @RequestMapping("/text")
    public String text(){
        return "redirect:home";
    }
    @RequestMapping("home")
    public String home(){
        return "home";
    }

- 请求转发

    @RequestMapping("/text")
    public String text(){
        return "forward:home";
    }
    @RequestMapping("home")
    public String home(){
        return "home";
    }

五:restful风格

- 基本格式

    @RequestMapping("/test/{str}")
    public String text(@PathVariable("str") String test){
        System.out.println("接收到的请求路径参数是" + test);
        return "text";
    }

- 四种获取数据的方式

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String post(String test) {
        System.out.println("添加的数据" + test);
        return "text";
    }
    @RequestMapping(value = "/test/{str}", method = RequestMethod.GET)
    public String get(@PathVariable("str") String test) {
        System.out.println("查找的数据" + test);
        return "text";
    }

    @RequestMapping(value = "/test", method = RequestMethod.PUT)
    public String put(String test) {
        System.out.println("修改的数据" + test);
        return "text";
    }

    @RequestMapping(value = "/test/{str}", method = RequestMethod.DELETE)
    public String delete(@PathVariable("str") String test) {
        System.out.println("删除的数据" + test);
        return "text";
    }

六:Json数据格式

- 基本格式

//        json数据格式
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","wei");
        jsonObject.put("age",18);
//        json数组
        JSONArray jsonArray = new JSONArray();
        System.out.println(jsonArray.put(new JSONObject().put("name", "weizhenhua").put("age", 3)));
        System.out.println(jsonArray.put(jsonObject));

-将实体类转换成Json数据格式

        User user = new User();
        user.setUsername("wei");
        user.setPassword("123");
        System.out.println(JSON.toJSON(user));

- 发送Json数据格式数据

    @RequestMapping(value = "/text",produces = "application/json")
    @ResponseBody
    public User text(){
        User user = new User();
        user.setUsername("wei");
        user.setPassword("123");
        return user;
    }

七:AJAX请求数据格式

八:文件上传和下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君问归期魏有期

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值