springmvc入门案例

目录

前言

springmvc概述

springmvc入门案例(使用配置类替代原本的web.xml))

第一步、创建一个web工程

第二步、引入相应的依赖(servlet-api、spring-webmvc、)

[第三步、编写 SpringMVC配置类,并开启包扫描功能](#第三步、编写 SpringMVC配置类,并开启包扫描功能)

第四步、编写一个用于模拟业务处理的业务处理类

第五步、编写springmvc配置文件

第六步、启动测试

第七步,发现错误

[1 ,发现:"hello world!" 没有被浏览器解析成功,报了404错误](#1 ,发现:"hello world!" 没有被浏览器解析成功,报了404错误)

[2 ,响应到浏览器出现问号](#2 ,响应到浏览器出现问号)


前言

本篇博客让大家,基本了解springmvc的含义,应用场景,以及如何使用springmvc

,可以结合javaWeb 学习理解springmvc中的相关知识


springmvc概述

springmvc是控制层框架(controller层框架)主要用于客户端进行交互

  • 可以和javaweb中servlet的使用进行联系

如下图所示


springmvc入门案例(使用配置类替代原本的web.xml)

第一步、创建一个web工程

IDEA创建Web项目(详细版)-CSDN博客

第二步、引入相应的依赖(servlet-api、spring-webmvc、)

java 复制代码
<dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.2.RELEASE</version>
    </dependency>
  </dependencies>

第三步、编写 SpringMVC配置类,并开启包扫描功能

java 复制代码
package com.it.heima.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.it.heima.controller")
public class springmvcConfig {
}

第四步、编写一个用于模拟业务处理的业务处理类

创建controller包,UserController类

在UserController类 使用到的注解有:

@Controller:是将当前的Controller类交给spring容器管理

@ResponseBody: 1 将数据以json格式返回给客户端 2 阻止视图解析器,对方法返回值进行解析,让返回值变成普通数据

@RequestMapping:客户端访问需要的映射路径,可以写在类上和方法上


java 复制代码
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/hello")
    public String hello2(){
        System.out.println("hello");
        return "hello world!";
    }
}

第五步、编写springmvc配置文件

注意:用于替换web.xml文件(继承一个接口,实现里面的三个方法)

写一个配置类替代web.xml配置文件 ,去继承ADSI

java 复制代码
package config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
public class WebInitServletConfig extends AbstractDispatcherServletInitializer {
    @Override
    // 创建Servlet容器
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext an = new AnnotationConfigWebApplicationContext();
        an.register(springmvcConfig.class);
        return  an;
    }
// 浏览器访问的所有路径都会经过springmvc框架
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

第六步、启动测试

第七步,发现错误

1 ,发现:"hello world!" 没有被浏览器解析成功,报了404错误

根据常见的HTTP请求报错案例-CSDN博客 可知404错误 有两种情况

1 服务器没有接收到来自浏览器发送的请求

2 服务器将数据响应给浏览器出现错误

这里是第二种情况:服务器将数据响应给浏览器出现错误

总结:在使用springmvc框架后,方法的返回值会经过视图解析器解析,将返回值当作访问对应的界面(html/jsp )的路径。如:"/index.jsp"

解决办法

1 方法返回值写成访问目标文件(html/jsp )路径 ,如:"/index.jsp"

再一次运行tomcat,访问hello2方法


2 使用@Responsebody 注解 将返回值当作一般的数据,不让视图解析器解析

@ResponseBody: 1 将数据以json格式返回给客户端 2 阻止视图解析器,对方法返回值进行解析,让返回值变成普通数据

再一次运行tomcat,访问hello2方法

2 ,响应到浏览器出现问号

问题 :在Java的Spring MVC中,如果返回的字符串在浏览器中显示为乱码(如三个问号),通常是因为响应内容的字符编码设置不正确。

1 在@RequestMapping中指定produces属性 设置为utf-8

java 复制代码
   @RequestMapping(value = "/user", produces = "text/plain;charset=utf-8")

2 使用@RestController注解 默认使用utf-8编码

在controller类上使用 :@RestController

java 复制代码
@RestController
public class OrderController {
.............
}

3 使用 HttpServletResponse 设置写入响应体 数据的编码和设置浏览器编码

案例

java 复制代码
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping(value = "/test" )
public class TestController {
    @RequestMapping( "/user")
    public void printUser(String name, int age, HttpServletResponse response) throws IOException {
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write("用户名:"+name+" "+"年龄:"+age);


    }
}

测试

相关推荐
努力的小郑17 小时前
数据查到了,回答去哪儿了?一次百炼 + LangChain 排查实录
后端·langchain·agent
SL_staff17 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
isfox17 小时前
Python 虚拟环境:别再把所有项目塞进一个"大仓库"了
后端
易师傅18 小时前
技术面试已死?AI 时代,真正拉开程序员差距的是什么?
前端·后端·程序员
苍何18 小时前
办公 Agent 权威评测榜单出炉了,豆包第一
后端
AiMan18 小时前
别再把秘塔会话逐个点开:这可把秘塔多个会话一次导出?AI导出鸭
前端·后端·面试
nice_lcj52019 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发
卷无止境19 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
Moment19 小时前
写给迷茫的应届生,怎样在 AI 时代争取更多机会
前端·后端·面试
回家路上绕了弯19 小时前
为什么还是不能直接把需求丢给 AI?
后端