前言

扩展:

DispatcherServlet默认配置

  • DispatcherServlet的默认配置在DispatcherServlet.properties(和DispatcherServlet类在一个包下)中,而且是当Spring配置文件中没有指定配置时使用的默认策略

 注解式控制器简介

  • Spring2.5之前,我们都是通过实现Controller接口或其实现来定义我们的处理器类。已经@Deprecated。
  • Spring2.5引入注解式处理器支持,通过@Controller 和 @RequestMapping注解定义我们的处理器类。并且提供了一组强大的注解
  • 使用注解前需要对配置文件添加扫描路径和注解驱动

注解式控制器配置

spring.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:p="http://www.springframework.org/schema/p"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.1.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util-4.1.xsd">
    <!-- 默认扫描的包路径 -->
    <context:component-scan base-package="com.csx"/>
    <!-- 添加注解驱动 -->
    <mvc:annotation-driven/>
    
    <!--处理器映射器-->
<!--    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>-->
    <!--处理器适配器-->
<!--    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>-->
    
    <!--视图解析器-->
    <!-- 定义跳转的文件的前后缀 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

<!--    <bean name="/hello" class="com.csx.HelloController" />-->

</beans>	
	
  • 注意:
    • <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/" p:suffix=".jsp"/>
    • 等价上面的视图解析器写法
  • 一旦使用了注解式控制器,就不需要书写处理器映射器和处理器适配器和控制器bean的xml配置

 注解式控制器

  • @Controller:用于标识是处理器类
  • @RequestMapping:请求到处理器功能方法的映射规则
  • @RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定
  • @ModelAttribute:请求参数到命令对象的绑定;

使用注解

HelloController

@Controller
public class HelloController {
  @RequestMapping("/hi")
    public ModelAndView hello(){
      ModelAndView mv =new ModelAndView();
      mv.setViewName("hello");
      mv.addObject("msg","oi,小伙学SpringMVC吗");
      return mv;
  }
}
  • 可以通过在一个POJO类上放置@Controller或 现在的处理器无需实现/继承任何接口/类,只需要在相应的类/方法上放置相应的注解说明下即可,非常方便。
  • 在方法上配置@RequestMapping("/h1"),配置映射路径,当我们使用localhost:8080/hi,就可以访问到这个控制器类

 修改完以上配置,其他的书写和使用配置文件的方式是一样的。

使用注解进阶技巧

基于一个登录案例讲解:

登录案例

这里主要演示springmvc注解相关功能的使用技巧,不涉及数据库,因此我们的数据都“写死”。

定义一个实体类User:

User

public class User implements Serializable {
    private int user_id;
    private String user_name;
    private String password;

    public int getUser_id() {
        return user_id;
    }

    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

定义登录页面

login.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/10/8
  Time: 15:49
  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>
<form action="/login" method="post">
    用户名: <input type="text" name="user_name"> <br/>
    密码: <input type="password" name="password"> <br/>
    <input type="submit" value="登录">
</form>
</body>
</html>

定义一个UserController控制器

UserController

完成登录和页面跳转等功能

@Controller
public class UserController {
    @RequestMapping("/login")
    public ModelAndView login(String user_name,String password){
        ModelAndView mv =new ModelAndView();
        if ("root".equals(user_name) && "123".equals(password)){
            mv.addObject("username",user_name);
            mv.setViewName("main");
        }else {
            mv.setViewName("login");
        }
        return mv;
    }

使用setViewName方法设置视图名,由视图解析器解析并跳转到指定页面

登录成功页面:

main.jsp

<%--
  Created by IntelliJ IDEA.
  User: 21038
  Date: 2024/10/9
  Time: 10:25
  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>
${username},恭喜你,被我恭喜到了

</body>
</html>

注意事项总结

  • 使用@RequestMapping注解直接定义访问路径,不需要在配置文件中添加配置,而且方法名、参数、返回值都可以任意定义。
  • 使用@Controller注解,标注该类是控制器类,不需要实现Controller接口。
  • 页面传递的参数名称要和方法参数名相同即可接收到。
  • 在mv中保存属性,页面中可以直接通过el表达式取得。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部