SpringMVC-Controller配置总结

导读:本篇文章讲解 SpringMVC-Controller配置总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

先来个总体配置步骤

第一步创建一个新的maven子工程

SpringMVC-Controller配置总结

第二步将web导入 

SpringMVC-Controller配置总结

SpringMVC-Controller配置总结

第三步配置web.xml

SpringMVC-Controller配置总结

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>springmvc</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>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

第四步在resources文件下创建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: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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.wusong.controller"/>
    <!-- 让Spring MVC不处理静态资源  资源过滤-->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <!--    efaultAnnotationHandlerMapping
            一个AnnotationMethodHandlerAdapter实例
             <mvc:annotation-driven />自动注入这两个
            -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

 

这样框架都搭建好了,可能会出现一些问题,以下是问题解决办法

SpringMVC-Controller配置总结

 

SpringMVC-Controller配置总结

SpringMVC-Controller配置总结

还有能是你的xml文件没有被扫描到,在maven的pom.xml文件里面加上如下配置

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
    </dependency>
</dependencies>

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

Controller(控制器)

  • 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。(接受用户之后,请求要做什么事情,建议使用注解定义,因为项目一般都是完全注解开发)

  • 控制器负责解析用户的请求并将其转换为一个模型。

  • 在Spring MVC中一个控制器类可以包含多个方法

  • 在Spring MVC中,对于Controller的配置方式有很多种

以下代码就可以让com.wusong.controller下的所有被@controller注解的类都被扫描到 (Spring 的知识,交给Spring进行管理(IOC容器))

<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.wusong.controller"/>

在spring中一般采用@RequestMapping注解来完成映射关系要想使@RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入,省去了处理器、适配器和映射器的大量配置代码。

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

过滤静态资源

<!-- 让Spring MVC不处理静态资源  资源过滤-->
<mvc:default-servlet-handler />

还有一个视图解析器

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="internalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/jsp/" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
</bean>

 

第一种方式实现Controller接口

只要实现Controller接口的类,这个类就可以获得控制器的功能,控制器(处理请求并且返回ModelAndView)

话不多说我们直接上实战,创建一个ControllerTest1类来实现Controller接口

SpringMVC-Controller配置总结

SpringMVC-Controller配置总结

只要实现了controller接口的类说明这就是一个控制器(servlet)

SpringMVC-Controller配置总结

在test.jsp文件里面写如下代码:

<%--
  Created by IntelliJ IDEA.
  User: 邬松
  Date: 2021/4/15
  Time: 12:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

 

编写完毕后,去Spring配置文件中注册请求的bean,name对应请求路径,class对应处理请求的类

SpringMVC-Controller配置总结

<bean id="/ws1" class="com.wusong.controller.ControllerTest1"></bean>

然后就可以测试了,启动Tomcat

SpringMVC-Controller配置总结

SpringMVC-Controller配置总结

测试结果

SpringMVC-Controller配置总结

邬松你好就出来啦! 但是现在都不推荐使用实现controller接口来实现 缺点 一个控制器中只能实现一个方法 一个方法就要创建一个bean 哪编写代码和维护代码的效率有多低? 所以一般都是通过注解@Controller来实现

 

基于@Controller注解实现

@Controller注解类型用于声明Spring类的实例是一个控制器(在IOC里也有另外的3个注解 service 业务层使用service注入到容器  repository dao层使用repository注入到容器  Component  用于组件注入 ) controller 用于控制层注入

哪话不多说,我们直接上实战吧!

首先创建一个类ControllerTest2并添加@Controller注解

SpringMVC-Controller配置总结

Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。

<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.wusong.controller"/>

在ControllerTest2类中编写如下代码, @RequestMapping(“/t2”) 请求的地址为t2对应实现Controller接口里面在配置文件中配置的bean的id 这样一说你肯定就知道使用注解开发的简易之处了吧?

@Controller注解的类代表这个类会被Spring接管,被这个注解的类,中的所有方法,如果返回值是String,并且有具体页面可以跳转,那么就会被视图解析器解析,但是可以通过@RestController注解让这个注解的类不会被视图解析器解析 返回的就会只是一个字符串 这个后面会用到,现在不用。

@Controller
public class ControllerTest2 {

    //映射访问路径
    @RequestMapping("/t2")
    public String index(Model model){
        //Spring MVC会自动实例化一个Model对象用于向视图中传值
        model.addAttribute("msg", "邬松您好!");
        //返回视图位置
        return "test";
    }

}

启动Tomcat测试

SpringMVC-Controller配置总结

邬松您好!就出来啦!是不是明显代码量减少了很多?这就是面向注解开发。

可以发现,我们的多个请求都可以指向一个视图,但是页面结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱耦合关系。

结果跳转方式

 

SpringMVC处理前端的数据

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106059.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!