使用java代码代替xml实现SSM教程
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,所以找不到就会打包失败
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。