SpringMVC(2)——基于注解的控制器

目录

 

概述

Controller注解类型

RequestMapping注解类型

方法级别注解

类级别注解

实例


概述

传统风格的控制器不仅需要在配置文件中部署映射,而且只能编写一个处理方法,不够灵活。

使用基于注解的控制器具有以下两个优点:

  • (1)在基于注解的控制器类中可以编写多个处理方法,进而可以处理多个请求(动作),这就允许将相关的操作编写在同一个控制器类中,从而减少控制器类的数量,方便以后的维护。
  • (2)基于注解的控制器不需要在配置文件中映射,仅需要使用RequestMapping注释类型注解一个方法进行请求处理。

在Spring MVC中最重要的两个注解类型是Controller和RequestMapping。

Controller注解类型

在Springmvc中使用Controller注解类型声明某类的实例是一个控制器。

如:

import org.springframework.stereotype.Controller;

@Controller
public class IndexController {

}

在SpringMVC中使用扫描机制找到应用中所有基于注解的控制器类,所以,为了让控制器类被SpringMVC框架扫描到,需要在配置文件中声明spring-context,并使用<context:component-scan/>元素指定控制器类的基本包(请确保所有控制器类都在基本包及其子包下)。

如:

<?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"
       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">

    <!--使用扫描机制扫描控制器类,控制器类都在controller包及其子包下-->
    <context:component-scan base-package="springmvcdemo.controller"/>

    <!--配置视图解析器-->
    <!--配置视图解析器成功后,RegisterController和LoginController控制器类的视图路径仅需提供register和login,视图解析器将会自动添加前缀和后缀-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

RequestMapping注解类型

在基于注解的控制器类中可以为每个请求编写对应的处理方法。那么如何将请求与处理方法一一对应呢?需要使用org.springfrlamework.web.bind.annotation.RequestMapping注解类型将请求与处理方法一一对应。

方法级别注解

package springmvcdemo.controller;

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

@Controller
public class IndexController {
    @RequestMapping(value = "/index/register")
    public String register() {
        return "register";
    }

    @RequestMapping(value = "/index/login")
    public String login() {
        return "login";
    }
}

类级别注解

package springmvcdemo.controller;

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

@Controller
@RequestMapping(value = "/index")
public class IndexController {
    @RequestMapping(value = "/register")
    public String register() {
        return "register";
    }

    @RequestMapping(value = "/login")
    public String login() {
        return "login";
    }
}

注解的value属性将请求URI映射到方法,value属性是RequestMapping注解的默认属性,如果只有一个value属性,则可以省略该属性。

然后就可以通过:http://localhost:8080/index/login访问login方法。

实例

创建springmvc项目并按下图创建文件夹及文件

其中各文件代码如下:

IndexController.java

package springmvcdemo.controller;


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

    /**
     * "@Controller"表示IndexController的实例是一个控制器,@Controller相当于@Controller("indexController") 或@Controller(value="indexController")
     */
    @Controller
    public class IndexController {
    // 注解的value属性将请求URI映射到方法,value属性是RequestMapping注解的默认属性。
    // 因此用户可以通过如URL访问register方法:http://localhost:8080/demo/register
    @RequestMapping(value = "/index/register")
    public String register() {
        // register代表逻辑视图的名称,需要根据spring mvc配置文件中的internalResourceViewResolver视图解析器的前缀和后缀找到对应的物理视图
        return "register";
    }

    @RequestMapping(value = "/index/login")
    public String login() {
        return "login";
    }
}

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"
       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">

    <!--使用扫描机制扫描控制器类,控制器类都在controller包及其子包下-->
    <context:component-scan base-package="springmvcdemo.controller"/>

    <!--配置视图解析器-->
    <!--配置视图解析器成功后,RegisterController和LoginController控制器类的视图路径仅需提供register和login,视图解析器将会自动添加前缀和后缀-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <h1>该页面是登录页面!</h1>
</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>
    <h1>该页面是注册页面!</h1>
</body>
</html>

web.xml

<?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">
    <!--部署DispatcherServlet-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--加载Spring MVC的配置文件,配置文件可以放在项目目录的任意位置,使用init-param元素加载配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--配置文件的位置-->
            <param-value>/WEB-INF/config/springmvc-config/springmvc-servlet.xml</param-value>
        </init-param>
        <!--表示容器在启动时立即加载servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!--处理所有URL-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首页</title>
  </head>
  <body>
  未注册的用户,请<a href="/index/register">注册</a>!<br>
  已注册的用户,去<a href="/index/login">登录</a>!
  </body>
</html>

运行效果如下:

地址:http://localhost:8080/

点击【注册】

地址:http://localhost:8080/index/register

点击【登录】

地址:http://localhost:8080/index/login

 

如果对完整源码有兴趣。

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【CSDN201911141456】可获取本节源码。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值