springMVC入门——环境搭建、参数传递

本文详细介绍了如何在SpringMVC项目中配置war打包,集成Jetty插件,设置DispatcherServlet和ContextLoaderListener,以及如何配置Spring MVC的控制器和数据转换。通过实际步骤演示了如何编写Controller和使用@RestController注解。

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

SpringMVC入门配置步骤

  1. pom.xml的打包方式改成war,增加jetty-plugin(jetty-plugin是和tomcat作用相同的一个容器,是maven的一个插件),增加spring-webmvc(spring-mvc依赖),jackson-databind(用于json数据的转换)
    <packaging>war</packaging>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.40.v20210413</version>
                <configuration>
                    <webApp>
                        <contextPath>/</contextPath>
                    </webApp>
                    <httpConnector>
                        <port>8081</port>
                        <host>localhost</host>
                    </httpConnector>
                    <scanIntervalSeconds>5</scanIntervalSeconds>
                </configuration>
            </plugin>
        </plugins>
    </build>
  1. 在src/main中新建webapp目录,并创建子目录WE-INF,在其中新建web.xml;在web.xml中配置中央控制器DispathcherServlet和监听器ContextLoaderListener
    <servlet>
        <servlet-name>rbac</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>rbac</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
  1. 在WEB-INF新建servletName-servlet.xml,applicationContext.xml两个spring配置文件;servletName-servlet.xml配置context:component-scan用于扫描Controller增加命名空间mvc:annotation-driven;配置匿名类:MappingJackson2MessageConverter用于Java对象与JSON之间的转换
    servletName-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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.rbac.web"/>
    <bean class="org.springframework.http.converter.cbor.MappingJackson2CborHttpMessageConverter"/>
    <mvc:annotation-driven/>
</beans>
  1. 写Controller,类注解:RestController,RequestMapping(“role”),处理请求的方法注解GetMapping(“list”),返回java类型,SpringMVC会自动转为JSON
@RestController
@RequestMapping("role")
public class RoleController {

    @Qualifier("roleService")
    @Autowired
    private RoleService roleService;

    @GetMapping("test")
    public String test(){
        return "hello";
    }

    @GetMapping("list")
    public List<Role> list(){
        return roleService.getRoles();
    }
}
  1. Maven:jetty:run,浏览器直接访问

SpringMVC配置详解

打包

package:影响运行和打包的方式,默认是jar,web项目一般指定为war

jetty-plugin

jetty和tomcat功能十分类似,都是servlet容器,由于tomcat的maven插件版本过老,所以使用jetty-plugin

jetty与tomcat区别

  1. jetty更轻量级,tomcat出了遵循Java servlet规范之外,还扩展了大量J2EE特性和满足企业级应用的需求,这种笨重在分布式尤其体现出浪费资源的缺陷
  2. jetty可插拔性和可扩展性更好,更易于开发者对jetty本身的二次开发
  3. 对于大型的企业级规模的应用,这时jetty就需要扩展,所以tomcat是更优的

DispatcherServlet和ContextLoaderListener

DispatcherServlet

  1. 充当中央控制器:所有的http请求都会发到中央控制器,再由中央控制器发到各部分的控制器
  2. 他会默认读取WEB-INF/servletName-servlet.xml配置文件,找到中央控制器的名字来找到对应名字的xml文件,作为子容器
    ContextLoaderListener
  3. 监听器(Listener):对事件进行监听,当事件发生时执行
  4. ContextLoaderListener:在上下文加载时,默认读取WEB-INF/applicationContext.xml文件,作为父容器
  5. 可以使用context-param参数配置contextConfigLocation指定配置文件的位置

applicationContext.xml和servletName-servlet.xml

  1. applicationContext.xml:

它对三层架构中的service层,dao层进行配置,通过ContextLoaderListener来进行加载,作为父容器,每个子容器都可以访问到这个容器中的bean

  1. servletName-servlet.xml

它对三层架构中的web层进行配置,通过DispatcherServlet进行加载,多个DispatcherServlet对应多个容器,它作为子容器(多个中央控制器的应用场景:对pc端和移动端分别进行返回不同的响应)

  1. springmvc并不是一定要按照这样的格式来配置容器,但是这样可以让应用之间的逻辑层次更清晰

mvc:annotation-driven

启用springmvc中默认未启用的功能,如启动注解

RestController和Controller

控制器的方法可能返回json数据,或页面等其他资源,使用注解Controller时,对于返回数据的方法,需要使用到注解@ResponseBody,如果控制器中所有方法都是返回的数据,则可以免去方法注解,将类注解由Contrller改成RestController

@RestController:简化响应为数据的注解,是一个组合注解
@Controller:修饰一个控制器,用于处理请求和响应
@ResponseBody:修饰的方法返回的是数据,配置了转换器会自动转换为JSON

XXXMapping

配置请求的路径(value)

  1. RequestMapping:value配置请求的路径,method配置请求的类型,method属性值为枚举RequestMethod
  2. GetMapping/PostMapping等:只需要用value配置请求的路径,不同的注解内部已经配置好了请求类型,省去了method属性的赋值

SpringMVC参数传递

字符串

写法一
简单的数据类型,直接给控制器的目标方法添加参数,需要请求参数名和方法参数名一致,可以将请求参数直接拼接到URL中
例:

@GetMapping("one")
    public Role one(int id){
        return roleService.getRole(id);
    }

写法二
简单数据类型,在方法的注解XXXMapping的value属性中,添加/{参数名},然后在方法参数中使用注解@PathVariable
(“参数名”),这样传参时不用指定参数名,只用按照路径的格式顺序依次写入参数值即可
例:

	//请求路径如:/one/1
    @GetMapping("one/{id}")
    public Role one(@PathVariable("id")int id){
        return roleService.getRole(id);
    }
  1. 简单数据类型,如上
  2. 数组类型,只要名字对应,框架会自动封装为数组,且转化为合适的类型
  3. 对于对象类型,只要对象的属性名对应,框架会自动调用set方法,将属性set到参数中的对象中去,对于未传值的则会是对应数据类型的默认值,如果传入的参数是json对象的话,需要在方法参数前实用@RequestBody来讲json转化为java对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值