最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用java代碼代替xml實(shí)現(xiàn)SSM教程

 更新時(shí)間:2021年12月08日 09:46:58   作者:QQ:3083155908  
這篇文章主要介紹了使用java代碼代替xml實(shí)現(xiàn)SSM教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot推薦開發(fā)者使用Java配置來搭建框架,SpringBoot中大量的自動化配置都是通過Java代碼配置實(shí)現(xiàn)的,而不是XML配置,同理,我們自己也可以使用純Java來搭建一個(gè)SSM環(huán)境,即在項(xiàng)目中不存在任何XML配置,包括web.xml

環(huán)境要求:

Tomact版本必須在7以上

1.在IDEA中創(chuàng)建一個(gè)普通的maven項(xiàng)目

在pom.xml加入項(xiàng)目中需要用到的依賴

<?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,默認(rèn)的scope(作用域),表示 dependency 都可以在生命周期中使用。而且,這些dependencies 會傳遞到依賴的項(xiàng)目中。適用于所有階段,會隨著項(xiàng)目一起發(fā)布
           2.provided,跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。這個(gè)scope 只能作用在編譯和測試時(shí),同時(shí)沒有傳遞性
           3.runtime,表示dependency不作用在編譯時(shí),但會作用在運(yùn)行和測試時(shí),如JDBC驅(qū)動,適用運(yùn)行和測試階段
           4.test,表示dependency作用在測試時(shí),不作用在運(yùn)行時(shí)。 只在測試時(shí)使用,用于編譯和運(yùn)行測試代碼。不會隨項(xiàng)目發(fā)布
           5.system,跟provided 相似,但是在系統(tǒng)中要以外部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配置

創(chuàng)建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注解標(biāo)識該類是一個(gè)配置類,作用類似于:applicationContext.xml文件
 * @ComponentScan注解標(biāo)識配置包掃描,useDefaultFilters表示使用默認(rèn)的過濾器,excludeFilters里面的配置表示除去Controller里面的注解,
 * 即項(xiàng)目啟動時(shí)候,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配置

創(chuàng)建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 {
    /**
     * 配置靜態(tài)資源過濾,相當(dāng)于   <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轉(zhuǎn)換配置
     * @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

創(chuàng)建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添加啟動時(shí)機(jī)
        springmvc.setLoadOnStartup(1);
    }
}

WebInit的作用類似于web.xml,這個(gè)類需要實(shí)現(xiàn)WebApplicationInitializer接口,并實(shí)現(xiàn)其方法,當(dāng)項(xiàng)目啟動時(shí),onStartup方法會被自動執(zhí)行,我們可以在這里進(jìn)行項(xiàng)目初始化操作,如:加載SpringMVC容器,添加過濾器,添加Listener,添加Servlet等

注:

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

方案一:

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

推薦 方案二:

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

5.測試

5.1創(chuàng)建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";
    }
}

運(yùn)行結(jié)果:

5.2創(chuàng)建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";
    }
}

運(yùn)行結(jié)果:

5.3路徑映射

6.JSON配置

SpringMVC可以接收json參數(shù),也可以返回json參數(shù),這一切依賴于HttpMessageConverter

HttpMessageConverter可以將一個(gè)json字符串轉(zhuǎn)為對象,也可以將一個(gè)對象轉(zhuǎn)為json字符串,實(shí)際上它的底層還是依賴具體的json庫

SpringMVC中默認(rèn)提供了Jackson和gson的HttpMessageConverter,分別是:

  • MappingJackson2HttpMessageConverter
  • GsonHttpMessageConverter

7.總結(jié)

1.本項(xiàng)目需要在idea中配置外部的tomact才可運(yùn)行

2.自己也嘗試在pom.xml中配置tomact插件,最后發(fā)現(xiàn)不行

3.使用mave插件打包不行,因?yàn)樗麜襴eb.xml,所以找不到就會打包失敗

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • intelliJ IDEA 多行選中相同內(nèi)容的快捷鍵分享

    intelliJ IDEA 多行選中相同內(nèi)容的快捷鍵分享

    這篇文章主要介紹了intelliJ IDEA 多行選中相同內(nèi)容的快捷鍵分享,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java?如何獲取某年的第一天和最后一天

    Java?如何獲取某年的第一天和最后一天

    在統(tǒng)計(jì)的數(shù)據(jù)是時(shí)候,要統(tǒng)計(jì)某年的數(shù)據(jù),開始時(shí)間是某年的第一天,結(jié)束時(shí)間是某年的最后一天,該如何獲取某年的第一天和最后一天,今天通過本文介紹下Java獲取某年的第一天和最后一天,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)Redis哨兵的示例代碼

    Java實(shí)現(xiàn)Redis哨兵的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)Redis哨兵的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot中的@RequestMapping注解的用法示例

    SpringBoot中的@RequestMapping注解的用法示例

    @RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開發(fā)者定義和處理HTTP請求,本篇文章我們將詳細(xì)為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • Java打成各種壓縮包的方法詳細(xì)匯總

    Java打成各種壓縮包的方法詳細(xì)匯總

    在工作過程中,需要將一個(gè)文件夾生成壓縮文件,然后提供給用戶下載,下面這篇文章主要給大家介紹了關(guān)于Java打成各種壓縮包的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • java redis 實(shí)現(xiàn)簡單的用戶簽到功能

    java redis 實(shí)現(xiàn)簡單的用戶簽到功能

    這篇文章主要介紹了java redis 實(shí)現(xiàn)簡單的用戶簽到功能,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 淺談Java中hashCode的正確求值方法

    淺談Java中hashCode的正確求值方法

    這篇文章主要介紹了淺談Java中hashCode的正確求值方法,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java并發(fā)編程如何降低鎖粒度并實(shí)現(xiàn)性能優(yōu)化

    Java并發(fā)編程如何降低鎖粒度并實(shí)現(xiàn)性能優(yōu)化

    這篇文章主要介紹了Java并發(fā)編程如何降低鎖粒度并實(shí)現(xiàn)性能優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 一文詳解Java中的原子操作

    一文詳解Java中的原子操作

    在Java中,原子操作尤為重要,尤其是在多線程環(huán)境中,想象一下,如果小黑在操作一個(gè)共享變量時(shí),這個(gè)操作被其他線程打斷,那會發(fā)生什么?可能會導(dǎo)致數(shù)據(jù)不一致,或者更糟糕的情況,本文將給大家詳細(xì)介紹一下Java中的原子操作
    2024-01-01
  • java并發(fā)編程JUC CountDownLatch線程同步

    java并發(fā)編程JUC CountDownLatch線程同步

    這篇文章主要介紹CountDownLatch是什么、CountDownLatch 如何工作、CountDownLatch 的代碼例子來展開對java并發(fā)編程JUC CountDownLatch線程同步,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09

最新評論

安化县| 岳阳县| 镇安县| 鹤庆县| 渭源县| 郎溪县| 宣恩县| 历史| 太仆寺旗| 冀州市| 雅江县| 丰顺县| 武胜县| 金湖县| 许昌县| 固始县| 栾川县| 永吉县| 兴化市| 嫩江县| 大方县| 陵水| 米易县| 邵阳县| 卓资县| 永泰县| 上虞市| 登封市| 东平县| 吉水县| 南川市| 安化县| 蒙阴县| 儋州市| 定远县| 永济市| 丘北县| 平阳县| 应城市| 台南县| 河池市|