使用java代码代替xml实现SSM教程

目录
  • 1.在IDEA中创建一个普通的maven项目
  • 2.添加Spring配置
  • 3.添加SpringMVC配置
  • 5.测试
    • 5.1创建HelloController类
    • 5.2创建HelloController2类
    • 5.3路径映射
  • 6.JSON配置
  • 7.总结

SpringBoot推荐开发者使用Java配置来搭建框架,SpringBoot中大量的自动化配置都是通过Java代码配置实现的,而不是XML配置,同理,我们自己也可以使用纯Java来搭建一个SSM环境,即在项目中不存在任何XML配置,包括web.xml

环境要求:

Tomact版本必须在7以上

1.在IDEA中创建一个普通的maven项目

在pom.xml加入项目中需要用到的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xiao.ssm</groupId>
    <artifactId>SSM-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <tomcat.version>2.2</tomcat.version>
        <webserver.port>8888</webserver.port>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--引入springMVC依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>
        <!--引入servlet依赖-->
        <!--scope作用域:
           1.compile,默认的scope(作用域),表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布
           2.provided,跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性
           3.runtime,表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段
           4.test,表示dependency作用在测试时,不作用在运行时。 只在测试时使用,用于编译和运行测试代码。不会随项目发布
           5.system,跟provided 相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它
        -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- tomcat7插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>${tomcat.version}</version>
                <configuration>
                    <port>${webserver.port}</port>
                    <path>/${project.artifactId}</path>
                    <uriEncoding>${project.build.sourceEncoding}</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://maven.aliyun.com/nexus/content/repositories/central</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://maven.aliyun.com/nexus/content/repositories/central</url>
        </pluginRepository>
    </pluginRepositories>
</project>

2.添加Spring配置

创建SpringConfig.java文件

package com.xiao.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
/**
 * @author xiaoss
 * @Configuration注解标识该类是一个配置类,作用类似于:applicationContext.xml文件
 * @ComponentScan注解标识配置包扫描,useDefaultFilters表示使用默认的过滤器,excludeFilters里面的配置表示除去Controller里面的注解,
 * 即项目启动时候,spring容器只扫描除了Controller类之外的所有bean
 * @date 2021年10月29日 16:43
 */
@Configuration
@ComponentScan(basePackages = "com.xiao",useDefaultFilters = true,
        excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)})
public class SpringConfig {
}

3.添加SpringMVC配置

创建SpringMVCConfig.java文件

package com.xiao.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/**
 * @author xiaoss
 * @date 2021年10月29日 16:56
 */
@Configuration
//@ComponentScan(basePackages = "com.xiao",useDefaultFilters = true,
//        excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)})
@ComponentScan(basePackages = "com.xiao")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    /**
     * 配置静态资源过滤,相当于   <mvc:resources mapping="/**" location="/"></>
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/js/**").addResourceLocations("classpath:/");
    }
    /**
     * 配置视图解析器
     * @param registry
     */
    @Override
    protected void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/jsp/",".jsp");
    }

    /**
     * 路径映射
     * @param registry
     */
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hello3").setViewName("hello");
    }

    /**
     * json转换配置
     * @param converters
     */
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter=new FastJsonHttpMessageConverter();
        converter.setDefaultCharset(Charset.forName("UTF-8"));
        FastJsonConfig fastJsonConfig=new FastJsonConfig();
        fastJsonConfig.setCharset(Charset.forName("UTF-8"));
        converter.setFastJsonConfig(fastJsonConfig);
        converters.add(converter);
    }
}

4.配置web.xml

创建WebInit.java文件

package com.xiao.config;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
/**
 * @author xiaoss
 * @date 2021年10月29日 17:13
 */
public class WebInit implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        //首先来加载SpringMVC的配置文件
        AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMVCConfig.class);
        //添加DispatcherServlet
        ServletRegistration.Dynamic springmvc=servletContext.addServlet("springmvc",new DispatcherServlet(ctx));
        //给DispatcherServlet添加路径映射
        springmvc.addMapping("/");
        //给DispatcherServlet添加启动时机
        springmvc.setLoadOnStartup(1);
    }
}

WebInit的作用类似于web.xml,这个类需要实现WebApplicationInitializer接口,并实现其方法,当项目启动时,onStartup方法会被自动执行,我们可以在这里进行项目初始化操作,如:加载SpringMVC容器,添加过滤器,添加Listener,添加Servlet等

注:

由于在onStartup里面只加载了springmvc配置,没有加载spring容器,如果要加载Spring容器

方案一:

修改springmvc配置,在配置的包扫描中也去扫描@Configuration注解

推荐 方案二:

去掉springConfig文件,讲所有的配置都放到springmvc里面

5.测试

5.1创建HelloController类

package com.xiao.control;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * @author xiaoss
 * @date 2021年10月29日 17:00
 */
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

运行结果:

5.2创建HelloController2类

package com.xiao.control;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
/**
 * @author xiaoss
 * @date 2021年10月29日 22:17
 */
@Controller
public class HelloController2 {
    @GetMapping("hello2")
    public String hello2(){
        return "hello";
    }
}

运行结果:

5.3路径映射

6.JSON配置

SpringMVC可以接收json参数,也可以返回json参数,这一切依赖于HttpMessageConverter

HttpMessageConverter可以将一个json字符串转为对象,也可以将一个对象转为json字符串,实际上它的底层还是依赖具体的json库

SpringMVC中默认提供了Jackson和gson的HttpMessageConverter,分别是:

  • MappingJackson2HttpMessageConverter
  • GsonHttpMessageConverter

7.总结

1.本项目需要在idea中配置外部的tomact才可运行

2.自己也尝试在pom.xml中配置tomact插件,最后发现不行

3.使用mave插件打包不行,因为他会找web.xml,所以找不到就会打包失败

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 基于SSM框架之个人相册示例代码

    学习了一阵子的SSM框架,一直在各种博客,简书,慕课网学习,最后终于自己撸出来一个简单的个人相册. 项目的演示效果: 开发的工具及环境: IntelliJ IDEA: 2016 Maven :3.0x Hbuilder(前端部分,可以用记事本代替2333) Java 8 项目流程(dao->service->web): 1.添加所有依赖: <dependency> <groupId>junit</groupId> <artifactId>juni

  • SSM使用mybatis分页插件pagehepler实现分页示例

    前几天在这里分享了手写 sql 分页查询实现分页,现在来看看使用 mybatis 分页插件 pagehepler 来实现分页 使用分页插件的原因,简化了sql代码的写法,实现较好的物理分页,比写一段完整的分页sql代码,也能减少了误差性. Mybatis分页插件 demo 项目地址:free-Mybatis_PageHelper_jb51.rar 我这里使用 maven 工程实现: 1.首先导入分页插件的依赖: <dependency> <groupId>com.github.pa

  • ssm框架下web项目,web.xml配置文件的作用(详解)

    1. web.xml中配置了CharacterEncodingFilter,配置这个是拦截所有的资源并设置好编号格式. encoding设置成utf-8就相当于request.setCharacterEncoding("UTF-8"); foreEncoding设置成true就相当于response.setCharacterEncoding("UTF-8"); <filter> <filter-name>CharacterEncodingFi

  • 使用java代码代替xml实现SSM教程

    目录 1.在IDEA中创建一个普通的maven项目 2.添加Spring配置 3.添加SpringMVC配置 5.测试 5.1创建HelloController类 5.2创建HelloController2类 5.3路径映射 6.JSON配置 7.总结 SpringBoot推荐开发者使用Java配置来搭建框架,SpringBoot中大量的自动化配置都是通过Java代码配置实现的,而不是XML配置,同理,我们自己也可以使用纯Java来搭建一个SSM环境,即在项目中不存在任何XML配置,包括web.

  • XML到Java代码的数据绑定之对象

    在这个由四部分组成的系列文章的第一部分,我们将弄清什么是数据绑定,与在 Java 应用程序中处理 XML 数据的其它方法相比它有什么优势,以及如何开始使用它.这一部分将考查为什么使用数据绑定,以及如何为各种约束建立模型,使 XML 文档能转换成 Java 对象.同时还涵盖用于生成数据绑定类的输入和输出. 您希望在您的 Java 应用程序中使用 XML 吗?那么好,同成千上万的其他人一起上这条船吧.当您深入了解 XML 以后,也许您会发现 DOM 和 SAX API(请参阅参考资料)不过是唬人的东

  • Java 代码检查工具之PMD入门使用详细教程

    介绍 PMD是一个静态源代码分析器.它发现了常见的编程缺陷,如未使用的变量.空捕获块.不必要的对象创建等等. 官网:点这里 官方文档:点这里 使用方式 1.使用插件的方式 下载:File -> Settings -> Plugins -> Marketplace 搜索 "PMDPlugin" ,下载插件. 使用方法:在代码编辑框或Project 窗口的文件夹.包.文件右键,选择"Run PMD"->"Pre Defined"

  • 利用RJB在Ruby on Rails中使用Java代码的教程

    开始之前 关于本教程 Ruby on Rails (Rails) 是用 Ruby 编写的一个 full-stack Web 应用程序框架,而 Ruby 是一种功能丰富的.免费的.可扩展的.可移植的.面向对象的脚本编制语言.Rails 在 Web 应用程序开发人员之间非常流行.通过它,可以快速有效地开发 Web 应用程序,并将其部署到任何 Web 容器中,例如 IBM? WebSphere? 或 Apache Tomcat. 在 Rails 和类似的 Web 应用程序开发框架出现之前,用于 Web

  • Java后端Tomcat实现WebSocket实例教程

    一.WebSocket简单介绍 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成握手. 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. WebSocket背景 在浏览器中通过http仅能实现单向的

  • Java后台接口开发初步实战教程

    上图是查询列表的接口,get方式 上图是用户注册的接口,同样是get,post方式也很简单 开发工具:IntelliJ IDEA 2016.3.5 ORM框架:MyBatis 数据库:MySql 服务器:tomcat7.0 公司使用的的orm框架是Hibernate,使用起来感觉比mybatis好用多了,毕竟经过了公司这么多项目的考验,总比自己用mybatis写的项目可靠,但以下分享的还是mybatis的代码 注册接口方法:http://192.168.1.116:8080/register?u

  • Java Bean与xml互相转换的方法分析

    本文实例讲述了Java Bean与xml互相转换的方法.分享给大家供大家参考,具体如下: XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bean的转换 用到xml的时候我们需要遍历解析...然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好 我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢

  • 详解基于IDEA2020.1的JAVA代码提示插件开发例子

    之前因为项目组有自己的代码规范,为了约束平时的开发规范,于是基于2019.1.3版本开发了一个代码提示的插件.但是在把IDEA切换到2020.1版本的时候,却发现疯狂报错,但是网上关于IDEA插件开发的相关文章还是不够多,只能自己解决.于是根据官方的SDK文档,使用Gradle重新构建了一下项目,把代码拉了过来.下文会根据2020.1版本简单开发一个代码异常的提示插件,把容易踩坑的地方提示一下. 1.首先先根据IDEA插件开发官方文档,用Gradle新建一个project 选中file -> n

  • java项目构建Gradle的使用教程

    目录 一.相关介绍 二.安装 三.IED中的使用 1.IDEA 2.Eclipse 四.问题说明 一.相关介绍 Gradle是一个好用的构建工具 ,使用它的原因是: 配置相关依赖代码量少,不会像maven一样xml过多 打包编译测试发布都有,而且使用起来方便 利用自定义的任务可以完成自己想要的功能 二.安装 下载地址http://services.gradle.org/distributions/  ,下载你所需要对应的版本,我这里下载的是gradle-4.7-bin.zip.下载后解压到你想要

  • Java中关于XML的API

    简单介绍一下Java关于xml的API,这样大家看到了缩写就知道是干什么的了.水平有限,多多包涵. 1.JAXP(Java API for XML Parsing) 2.JAXB(Java API for XML Binding) 3.JAXM(Java API for XML Messaging) 4.JAX-RPC(Java API for XML-RPC) 1.JAXP定义了在Java中使用DOM, SAX, XSLT的通用的接口.这样在你的程序中你只要使用这些通用的接口,当你需要改变具体

随机推荐