欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-01 10:27:28
目录1.在idea中创建一个普通的maven项目2.添加spring配置3.添加springmvc配置5.测试5.1创建hellocontroller类5.2创建hellocontroller2类5....

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

环境要求:

tomact版本必须在7以上

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

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

在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";
    }
}

运行结果:

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

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

运行结果:

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

5.3路径映射

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

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,所以找不到就会打包失败

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

相关标签: java xml SSM