SpringMVC 原理与用法

本文详细介绍SpringMVC框架的基础原理及应用实践,包括配置步骤、核心组件功能、控制器编写方法及前后端数据交互等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

二.SpringMVC的基本原理
1. 户向服务 发送请求. 如: localhost:8080/user
2. DispatcherServlet接收到请求, 开始处
3. 在DispatcherServlet内部, 通过HandlerMapping检查这个url有没有对应的controller处 法 4. 如果有, 直接调 这个 法
5. 如果返回字符 , viewResolver会把字符 和配置 件中的前后缀组成 的资源 径
6. DispatcherServlet会把这个资源转为html, 发给 户的浏览

三.SpringMVC中常 的注解
标记在类上 的:
@Controller : 标注该类是controller层的类, 相当于在spring中配置 关于该类的bean
标记在 法上 的:
@RequestMapping: 标记该 法对应的请求URI, 及这次请求的请求 法(GET/POST) @ResponseBody: 将该 法的返回值转为json发回给前端, 再进 jsp 径的拼接
标记在 法参数的:
@PathVariable: 获取URI地址映射的参数 @ReqeustParam: 获取URL后附带的参数 表

四.配置SpringMVC (本人用的maven创建的)

**pom.xml文件 所需要的依赖**
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--1.spring-core
        2.spring-webmvc
        3.spring-jdbc
        4.spring-aspects
        5.jstl-->

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!--jackson databind-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.8</version>
    </dependency>
    <!--jackson core-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.8</version>
    </dependency>
    <!--jackson-annotations-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.8.8</version>
    </dependency>

  </dependencies>



**Springmvc-servlet.xml**

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置SpringMVC-->

    <!--mvc的注解驱动-->
    <mvc:annotation-driven/>

    <!--注解的包扫描-->
    <!--将这个配置包下面的所有类,都相当于配置好了bean,调用的时候使用注解-->
    <!--每个类的默认id是 首字母小写的形式: 例如:Student 类的id就是student-->
    <context:component-scan base-package="com.xxx"/>

    <!--默认的资源文件的处理方式-->
    <!--类似 js,css,img的那个资源文件,本身不需要 SpringMVC 做处理-->
    <mvc:default-servlet-handler/>

    <!--视图解析器-->
    <!--根据代码的逻辑处理,配置正确的jsp/HTML等文件 的路径-->
    <bean id="jspViewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>


**web.xml文件配置**

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>MVCServlet</servlet-name>
    <servlet-class >org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:SpringMVC-servlet.xml</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>MVCServlet</servlet-name>
    <!--*.action-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

五.controller层


//接收传过来的参数
@Controller
public class MainController {
    //localhost:8080/aa
    @RequestMapping(value = "/aa")
    public String frontPage(){
        return "index";
    }


    //带参数的请求
    //1.直接在地址上拼接参数(URI 模板映射)
    //2.localhost/user/zhangsan/

    @RequestMapping(value = "/user/{username}/{age}")
    public String varPage(@PathVariable("username")String name,
                          @PathVariable("age") String age){
        System.out.println(name);
        System.out.println(age);

        //jsp文件的名字
        return "userinfo";
    }

    //localhost:8080/stu?name=张三&age22
    //2.获取参数列表
    /*
    >1. 一个一个的获取,格式:@RequestParam("key) 参数类型 参数名
    >2. 全部获取 ,格式就是@RequestParam Map<key,value> 参数名
    >3. 靠bean 获取,场景:参数列表的key名 和bean的属性名必须一致

     */


//    @RequestMapping(value = "/stu")
//    public  String stuinfo(@RequestParam("name") String name,
//                           @RequestParam("age") Integer age){
//        System.out.println(name);
//        System.out.println(age);
//
//
//        return "stuinfo";
//    }

    @RequestMapping(value = "/stu")
//    public  String stuinfo(@RequestParam Map<String,String> params){
    public  String stuinfo(Student student){
        System.out.println(student);
        return "stuinfo";
    }





    /*
    SpringMVC项目的健里的步骤(maven)
    1.使用maven 建立工程 ,添加POM文件中的依赖关系
    2.在resources 文件夹下面创建xxx-servlet.xml
    3.配置web.xml
    4.创建jsp文件和controller


    SpringMVC 的基本原理
    1.用户向服务器发送请求, 比如:localhost:8080/user
    2.DispatcherServlet 接收到请求,开始处理
    3.DispatcherServlet 内部,通过有个HanderMapping 的检查
    这个url 有没有对应的controller的处理方法
    4.如果有,直接调用这个方法
    5.如果返回字符串 ,viewResolver  会把字符串和配置文件的前后缀组成页面的资源路径
    6.DispatcherServlet 会把这个资源转换为html 发送个客户的浏览器



     */

六.后台向前端返回数据

@Controller
public class SecController {

    //从后台向前段发送数据
    @RequestMapping(value = "teacher")
    public String teacherPage(ModelMap map){

        //1. Map<String ,object> map
        //2. Model model
        //3. ModelMap  modelmap
        //4. ModelAndView
        //存到了request域中
        map.addAttribute("teacher","大表姐");

        return "teacher";
    }

    //向前台发送 json数据
    @RequestMapping(value = "/json")
    @ResponseBody
    //作用就是   会把当前的方法的返回值,转为json 格式 发送个前端 他不走那个jsp拼接
    public Student jsonTest(){

        Student student=new Student();
        student.setName("张三");
        student.setAge(20);
        return student;
    }


//练习:下面两个就是在url上写上参数,传到后台(拼接一下)在返回来
    @RequestMapping(value = "/json1")
    public String  json(@RequestParam Map<String, String> map,
                        ModelMap map1){


        String name = map.get("name");
        String age=map.get("age");
        String sex=map.get("sex");

        map1.addAttribute("map",name+age+sex);

        return "json1";
        //在json1.jsp中调用map
    }

//发送的json数据
    @RequestMapping(value = "/json2")
    @ResponseBody
    public Student student(Student student){
        Student student1=new Student();
        student1.setName(student.getName());
        student1.setAge(student.getAge());
        System.out.println(student1);
        return student1;
    }




}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值