SpringMVC注解配置

news2025/1/4 20:01:22

1xml配置方式(配置文件+注解的方式)

前提导入相关依赖:pom文件

说明:下方依赖是ssm项目中较为常用的一部分,可能部分依赖对于springmvc配置并未有关系,根据自己需求添加和删除。

<dependencies> 
    <!--        springmvc依赖-->  
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-webmvc</artifactId>  
      <version>5.1.2.RELEASE</version> 
    </dependency>  
    <!--        spring核心依赖-->  
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-core</artifactId>  
      <version>5.1.2.RELEASE</version> 
    </dependency>  
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-context</artifactId>  
      <version>5.1.2.RELEASE</version> 
    </dependency>  
    <!--        spring事务依赖-->  
    <dependency> 
      <groupId>org.springframework</groupId>  
      <artifactId>spring-tx</artifactId>  
      <version>5.1.2.RELEASE</version> 
    </dependency>
    <!--        spring jdbc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.2.0.RELEASE</version>
    </dependency>
    <!--        mysql数据库连接驱动-->  
    <dependency> 
      <groupId>mysql</groupId>  
      <artifactId>mysql-connector-java</artifactId>  
      <version>5.1.12</version> 
    </dependency>  
    <!--        Druid数据库连接池-->  
    <dependency> 
      <groupId>com.alibaba</groupId>  
      <artifactId>druid</artifactId>  
      <version>1.2.1</version> 
    </dependency>  
    <!--        Junit集成单元测试依赖坐标-->
    <dependency> 
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>4.12</version>  
      <scope>test</scope> 
    </dependency>
<!--        与junit为基础的spring单元测试-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.1.12.RELEASE</version>
    </dependency>

    <!--          servlet-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!--        jsp-->
    <dependency> 
      <groupId>javax.servlet</groupId>  
      <artifactId>jsp-api</artifactId>  
      <version>2.0</version>  
      <scope>provided</scope>
    </dependency>
    <!--        切面变成AspectJ依赖-->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.6</version>
    </dependency>
    <!--  lombok(此依赖的目的是简化javabean的书写!)-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.10</version>
    </dependency>
    <!--jsckson -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9</version>
    </dependency>
    <!--文件上传-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>
  </dependencies>

1.1XML配置文件SpringMVCConfig.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:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
	   http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
	   http://www.springframework.org/schema/context/spring-context.xsd
	">
    <!--开启注解组件扫描-->
    <context:component-scan base-package="com.yc.controller"/>
    <!--开启mvc注解支持-->
    <mvc:annotation-driven/>
    <!--自定义 视图解析器-->
    <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        //jsp页面放在web-inf下需要配置前缀/WEB-INF/pages/
        <property name="prefix" value="/WEB-INF/pages/"></property>
        //为访问的jsp页面拼接缀.jsp
        <property name="suffix" value=".jsp" ></property>
    </bean>-->

    <!--配置tomcat默认的静态资源处理-->
    <mvc:default-servlet-handler/>

</beans>

 Controller层控制类

@Controller
public class HelloWordController {
//    编写普通方法/该项目为独立项目,不属于模块所以有target目录,所以在映射目路径时需要注意加上项目名称
//    当作为模块的项目不需要加上项目名称,应为其项目路径为自动映射上下文。
    @RequestMapping("/page1")
    public String uservo2(UserVO uservo){
        return "/hello.jsp" ;
    }
}

    前端页面hello.jsp:

<%--
  Created by IntelliJ IDEA.
  User: l
  Date: 2023/8/4
  Time: 15:19
  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>
<h1>你好mvc!!!</h1>
</body>
</html>

         当我们在浏览器的地址栏中输入 localhost:8080/你的项目名/page1

        该请求就会被HelloWordController拦截到进行匹配路径从而找到有        @RequestMapping("/page1")

        执行该注解标注的方法通过return跳转到对应得jsp页面。

1.2 自定义视图解析器

        在配置文件中添加以下配置

    <!--自定义 视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--jsp页面放在web-inf下需要配置前缀/WEB-INF/pages/-->
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <!--为访问的jsp页面拼接缀.jsp-->
        <property name="suffix" value=".jsp" ></property>
    </bean>

         这样我们在访问资源时在注解@RequestMapping("写上你想要映射的URL")

        return "jsp页面名字";

        如下:

//Controler中写如下方法
@RequestMapping("/hello")
    public String hello(){
        System.out.println("==>HelloWordController33");
        return "hello";
    }

         这样在访问路径

        localhost:8080/你的项目名/hello

        就会根据视图解析器的配置自动给你拼接路径

        localhost:8080/你的项目名/WEB-INF/pages/hello.jsp

注意:如果我们不想通过配置的视图解析器来缝合路径访问资源可以采用请求转发或者重定向的方式绕过视图解析器的缝合路径

//Controler中写如下方法===>请求转发
@RequestMapping("/hello1")
    public String hello(){
        System.out.println("==>HelloWordController33");
        return "forward:/hello.jsp";
    }

//Controler中写如下方法===>重定向
@RequestMapping("/hello2")
    public String hello(){
        System.out.println("==>HelloWordController33");
        return "redirect:/hello.jsp";
    }

1.3 Ajax+Json进行数据交互:

Controller类

@Controller
public class TestController {

    @RequestMapping("/ajaxRequest1")
    public String tt2(){
        System.out.println("跳转ajax.jsp页面");
        return "forward:ajax.jsp";
    }
//    Springmvc异步交互的(数据传输与接收)
    @RequestMapping(value = "/ajaxRequest")
    @ResponseBody
    public String tt3(@RequestBody User user){
        System.out.println("===>>>已进入ajaxRequest");
        System.out.println("user==>"+user);
    return "ajax succes!";
}
}

前端jsp页面:

<%--
  Created by IntelliJ IDEA.
  User: l
  Date: 2023/8/8
  Time: 16:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
<%--    导入jq文件--%>
    <script src="${pageContext.request.contextPath}/js/jquery-3.2.1.min.js"></script>
</head>
<body>
    <h1>
        异步处理数据交互
    </h1>
    <button id="button1" name="button1" >数据交互</button>
</body>
    <script>
        // $(function (){
            $("#button1").click(function (){
                $.ajax({
                    url: '${pageContext.request.contextPath}/ajaxRequest',
                    type:'post',
                    data:'{"name":"张三","age":12}',
                    contentType:'application/json;charset=utf-8',
                    success:function (response){
                        alert(response);
                    }
                });
        })

    </script>
</html>

2零配置方式(配置类+注解的方式)

配置类SpringMVCConfig的作用相当于将原本的springMVC的xml配置换成了类来配置。

@Configuration//该注解表明该类属于配置类,为了让容器识别
@ComponentScan("com.hskj.controller")//该注解配置需要扫描的Controller包中的控制类
public class SpringMVCConfig {
}

有了配置类还需要定义一个Servlet容器启动类,在里面加载Spring的配置

//定义一个Servlet容器启动类,在里面加载Spring的配置
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
    //该方法加载SpringMVC容器配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext webApplicationContext=new AnnotationConfigWebApplicationContext();
        webApplicationContext.register(SpringMVCConfig.class);//加载springmvc配置;类
        return webApplicationContext;
    }
    //设置请求归属SpringMVC处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};//所有请求皆处理
    }
    //加载Spring容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

/*说明:
AnnotationConfigWebApplicationContext webApplicationContext=new AnnotationConfigWebApplicationContext();
在Java中创建一个基于注解的Web应用程序上下文(AnnotationConfigWebApplicationContext)。它是通过使用Spring框架来实现的。

Web应用程序上下文是一个容器,用于管理和组织Web应用程序中的各种组件,例如控制器、服务、存储库等等。它是一个能够自动扫描并注册注解标记的类和配置文件的上下文环境。

在这个例子中,使用了AnnotationConfigWebApplicationContext类来创建Web应用程序上下文对象。这个对象会自动扫描并注册使用注解配置的类和组件。*/

Controller层 控制类TestCotroler

@Controller
public class TestController {
   
    @RequestMapping("/test01")
    @ResponseBody
    public String test01(){
        return "==>hello!";
    }
}

在浏览器地址栏输入路径:    localhost:8080/项目名/save

 

 浏览器结果如下(如果返回中文可能会出现乱码情况)

上述通过配置类的方法实现springmvc的方式分析:

(下图是以userController为例)

@Controller
public class UserController {
   
    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        return "==》hello!";
    }
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手如何快速学习单片机?

初步确定学习目标&#xff1a;是学习简单便宜的51呢&#xff0c;还是学习简单但是性价比已经不算太高的&#xff0c;但是功能强大稳定可靠的avr&#xff0c;还是物美价廉的stm32&#xff0c;或者ARM9&#xff08;可以跑系统了&#xff09;&#xff0c;再往上x86什么的如果是学8…

成员变量和局部变量的区别

局部变量成员变量 1、定义的位置不一样 在方法的内部&#xff0c;方法申明上&#xff08;形参&#xff09;。 声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 在方法的外部&#xff0c;直接写在类当中 &#xff08;类中方法外的变量&#xff09; 2、作用范…

opencv 实现手势跟踪并返回位置信息(封装调用)

OpenCV 是一个基于 Apache2.0 许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 需要提前准备opencv 和 mediapipe库 pip --default-timeout5000 install -i https://pypi.tuna.t…

什么是IMAP协议?

IMAP&#xff08;Internet Message Access Protocol&#xff09;是一个应用层协议&#xff0c;用于访问和管理存储在远程服务器上的电子邮件。相比于POP3&#xff0c;IMAP提供了更加丰富的功能&#xff0c;特别适用于需要在多台设备上访问电子邮件的用户。以下是关于IMAP的详细…

支持多用户协同的思维导图TeamMapper

什么是 TeamMapper &#xff1f; TeamMapper 是基于 Mindmapp 开发的用于绘制思维导图的 Web 应用程序。它使得思维导图变得简单&#xff0c;你可以托管并创建您自己的思维导图。与您的团队分享您的思维导图会议并在思维导图上进行协作。 软件特点&#xff1a; 创建&#xff1…

解决:Unexpected ‘debugger‘ statement.eslint(no-debugger) (即:页面中的 debugger 标红)的问题

1、问题描述&#xff1a; 其一、报错为&#xff1a; Unexpected debugger statement.eslint(no-debugger) 中文为&#xff1a; 意外的“调试器”语句.eslint&#xff08;无调试器&#xff09; 其二、问题描述为&#xff1a; 在正常的 vue 项目中使用 debugger 的调试过程…

人工智能原理(2)

目录 一、知识与知识表示 1、知识 2、知识表示 3、知识表示方法 二、谓词逻辑表示法 1、命题逻辑 2、谓词逻辑 三、产生式表达法 1、知识的表示方法 2、产生式系统组成 3、推理方式 4、产生式表示法特点 四、语义网络 1、概念及结构 2、语义网络的基本语义联系 …

bye 我的博客网站

Bye&#x1f64b;&#x1f64b;&#x1f64b;&#xff0c;我的博客网站。在我的服务器上运行了9个月之久的博客网站要和大家Bye了。 背景 可能很多人不知道我的这个博客网站的存在&#xff0c;好吧&#xff0c;最后一次展示它了&#xff0c;博客网站地址在这里&#xff0c;它…

空降流量危机?QQ音乐升级架构应对高并发

# 关注并星标腾讯云开发者 # 每周3 | 谈谈我在腾讯的架构设计经验 # 第2期 | 赵威&#xff1a;QQ音乐评论系统如何实现高可用&#xff1f; QQ 音乐自诞生以来&#xff0c;已有多个版本的评论业务系统。最新版本是19年再次全新迭代&#xff0c;基于 tlist 存储&#xff0c;按照发…

章节4:JavaScript操作Cookie

章节4&#xff1a;JavaScript操作Cookie 直接利用Cookie登录 JavaScript语法 获取&#xff1a;document.cookie; 设置&#xff1a;document.cookie“usernamexx”; 删除&#xff1a;document.cookie“usernamexx;expiresThu, 01 Jan 1970 00:00:00 GMT”;

Goland报错 : Try to open it externally to fix format problem

这句报错的意思也就是 : 尝试在外部打开以解决格式问题 解决方案 : 将图片格式该为.png格式&#xff0c;再粘贴进去就可以了! 改变之后的效果 : 那么&#xff0c;这样就ok了

Unity ML-Agent

介绍: 环境搭建 待为完序

javascript数据类型与引用类型的区别以及原始值详解

基本数据类型介绍 在JavaScript中,数据类型可以分为基本数据类型与引用数据类型.其中基本数据类型包括 Undefined,Null,Boolean,Number,String5种数据类型,在ES6中新增了两种基本的数据类型,Symbol,bigint 引用类型有Object,Function,Array,Date,RegExp等 这两种类型区别简略…

JavaScript高级:原型和原型链

在 JavaScript 中&#xff0c;原型与原型链是一种强大的继承机制&#xff0c;它使对象之间能够共享属性和方法&#xff0c;从而实现高效的代码复用。虽然这听起来可能有些复杂&#xff0c;但是我们可以用通俗易懂的方式来理解这个概念。本文将为你详解原型和原型链的概念与作用…

win11虚拟机安装

win11虚拟机安装 下载虚拟机客户端安装客户端创建虚拟机下载 ISO切换root账号GNOME桌面 下载虚拟机客户端 版本是16.2.3 链接&#xff1a;https://pan.baidu.com/s/13c6XVWFbeQKbCnrlfxD8cA 提取码&#xff1a;qxdc 安装客户端 安装向导 点击下一步 接收条款&#xff0c;点…

C#小轮子:自动连续Ping网络地址

文章目录 前言Ping代码异步问题 前言 工作中&#xff0c;我们经常用到Ping这个指令&#xff0c;有时候我们需要Ping整个网段来查看这个网段上面有什么设备&#xff0c;哪些Ip地址是通的&#xff0c;这个时候就需要Ping指令 Ping 代码 我这个是批量Ping的代码&#xff0c;而…

Stable Diffusion WebUI安装和使用教程(Windows)

目录 下载Stable Diffusion WebUI运行安装程序&#xff0c;双击webui.bat界面启动插件安装&#xff08;github&#xff09;模型下载(有些需要魔法&#xff09;安装过程遇到的大坑总结参考的博客 整个过程坑巨多&#xff0c;我花了一个晚上的时间才全部搞定,本教程针对有编程基础…

Ctfshow web入门 SSTI 模板注入篇 web361-web372 详细题解 全

CTFshow SSTI web361 笔记分享 一、代码块 变量块 {{}} 用于将表达式打印到模板输出 注释块 {##} 注释 控制块 {%%} 可以声明变量&#xff0c;也可以执行语句 {% for i in .__class__.__mro__[1].__subclasses__() %}{% if i.__name___wrap_close %}{% print i.__init__.…

面试热题(反转链表)

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 链表的题&#xff0c;大部分都可以用指针或者递归可以做&#xff0c;指针如果做不出来的话&#xff0c;…

adb 通过wifi连接手机

adb 通过wifi连接手机 1. 电脑通过USB线连接手机2. 手机开启USB调试模式&#xff0c;开启手机开发者模式3.手机开启USB调试模式 更多设置-》开发者选项-》USB调试4.点击Wi-Fi 高级设置&#xff0c;可以查看到手机Wi-Fi的IP地址&#xff0c;此IP地址adb命令后面的ip地址&#xf…