当前位置: 首页 > news >正文

SpringMVC框架:深入注解开发实践与基础案例优化解析

前言

扩展:

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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.1.xsdhttp://www.springframework.org/schema/utilhttp://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: AdministratorDate: 2024/10/8Time: 15:49To 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: 21038Date: 2024/10/9Time: 10:25To 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表达式取得。

http://www.mrgr.cn/news/46886.html

相关文章:

  • Mac——Cpolar内网穿透实战
  • FPGA 21 ,深入理解 Verilog 中的基数,以及二进制数与十进制数之间的关系( Verilog中的基数 )
  • kalilinux - msf和永恒之蓝漏洞
  • Unity的Transform类
  • linux 内核OOM问题定位-SLAB_DEBUG
  • JuiceFS 2024:开源与商业并进,迈向 AI 原生时代
  • Plant Monster Pack PBR - Fantasy RPG 植物怪物包
  • Android Serializable和Parcelable的区别及其使用
  • 【JS】Object.create方法以及借助此实现继承
  • 全国上市公司企业绿色管理创新数据与绿色管理创新完整数据-含代码(2008-2023年)
  • 数据库管理平台应该具备哪些功能
  • Android SELinux——工作模式(二)
  • Yocto构建教程:在SDK中添加Qt5并生成带有Qt5的SDK
  • 小北的技术博客:探索华为昇腾CANN训练营与AI技术创新——Ascend C算子开发能力认证考试(中级)
  • 【玩转动态规划专题】746. 使用最小花费爬楼梯【简单】
  • 【计算机网络】网络相关技术介绍
  • LVGL仪表盘逆时针
  • 飞腾CPU技术发展分析
  • 2024最新分别利用sklearn和Numpy实现c均值对鸢尾花数据集进行聚类(附完整代码和注释)
  • Linux平台Kafka高可用集群部署全攻略
  • C++学习笔记----8、掌握类与对象(六)---- 操作符重载(3)
  • 计算机视觉算法--原理、技术、应用、发展
  • 开源 AI 智能名片 O2O 商城小程序源码助力企业实现三层式个性化体验
  • 回溯算法之组合求解详细解读(附带Java代码解读)
  • TypeError Cannot read properties of undefined (reading ‘endsWith‘)
  • QDesktopWidget Class