首页 > 编程语言 >Spring-纯Java创建一个SSM【webapp】

Spring-纯Java创建一个SSM【webapp】

时间:2022-11-24 10:24:47浏览次数:43  
标签:xml Java Spring 配置 SSM TODO public

纯Java搭建webapp

QuickStart

使用纯 Java 来搭建一个 SSM 环境,即在项目中,不存在任何 XML 配置,包括 web.xml

1创建一个Maven工程

引入依赖

<!--    TODO 【Java创建SSM】1、引入依赖    -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

2创建控制器,用于测试

controller

/**
 * @Author Coder_Pans
 * @Date 2022/11/23 21:48
 * @PackageName:PACKAGE_NAME
 * @ClassName: org.panstack.controller.HelloController
 * @Description: TODO 【Java创建SSM】2、HelloController 用于测试
 * @Version 1.0
 */
@Controller
public class HelloController {
    // 注入Service
    @Autowired
    HelloService helloService;


    @GetMapping("/hello")
    @ResponseBody
    public String hello(){
        return helloService.hello();
    }
}

Service

/**
 * @Author Coder_Pans
 * @Date 2022/11/23 22:14
 * @PackageName:org.panstack.service
 * @ClassName: HelloService
 * @Description: TODO 【Java创建SSM】6、验证Service是否能被过滤
 * @Version 1.0
 */
@Service
public class HelloService {

    public String hello(){
        return "hello java -> Ssm";
    }
}

User实体类

/**
 * @Author Coder_Pans
 * @Date 2022/11/23 22:52
 * @PackageName:org.panstack.pojo
 * @ClassName: User
 * @Description: TODO 用户实体类,用于测试json
 * @Version 1.0
 */
public class User {
    private String name;
    // TODO Json修改时间格式
    // @JsonFormat(pattern = "yyyy-MM-dd hh:mm")
    private Date birthDay;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthDay() {
        return birthDay;
    }

    public void setBirthDay(Date birthDay) {
        this.birthDay = birthDay;
    }

    public User(String name, Date birthDay) {
        this.name = name;
        this.birthDay = birthDay;
    }

    public User() {
    }


}

3配置Spring

工程创建成功之后,首先添加 Spring 的配置文件:

/**
 * @Author Coder_Pans
 * @Date 2022/11/23 21:53
 * @PackageName:org.panstack.config
 * @ClassName: SpringConfig
 * @Description: TODO 【Java创建SSM】3、添加Spring配置类
 * 这个配置类文件相当于applicationContext.xml
 * @Version 1.0
 */
@ComponentScan(
        basePackages = "org.panstack",
        useDefaultFilters = true,
        excludeFilters = {
                @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class)})
@Configuration
public class SpringConfig {
}
  • @Configuration :注解表示这是一个配置类,在我们这里,这个配置的作用类似于 applicationContext.xml
  • @ComponentScan: 注解表示配置包扫描,里边的属性和 xml 配置中的属性都是一一对应的,useDefaultFilters 表示使用默认的过滤器,然后又除去 Controller 注解,即在 Spring 容器中扫描除了 Controller 之外的其他所有 Bean

4配置SpringMVC

创建 springmvc 的配置文件:

/**
 * @Author Coder_Pans
 * @Date 2022/11/23 21:58
 * @PackageName:org.panstack.config
 * @ClassName: SpringMVCConfig
 * @Description: TODO 【Java创建SSM】4、添加SpringMVC配置
 * 这个配置类相当于spring-servlet.xml
 * @Version 1.0
 */
@ComponentScan(basePackages = "org.panstack",
        useDefaultFilters = false,
        includeFilters = {
                @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class),
                //TODO 【Java创建SSM】 6、将SpringConfig对Spring的配置加入WebInit一起启动
                @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)})
@Configuration
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    /**
     * TODO 【Java创建SSM】7、解决静态资源过滤
     * @param registry
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/");
    }

    /**
     * TODO【Java创建SSM】9、配置解析jsp
     * @param registry
     */
    @Override
    protected void configureViewResolvers(ViewResolverRegistry registry) {

        registry.jsp().prefix("/jsp/").suffix(".jsp");
    }

    /**
     * TODO【Java创建SSM】10、配置路径映射
     * @param registry
     */
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hello3").setViewName("hello");
    }
    /**
     * TODO 配置消息转换,解决时间格式
     */
    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

        ObjectMapper om = new ObjectMapper();
        // 设置自己的格式
        om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));// TODO 全局修改时间格式
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(om);
        converters.add(converter);
    }
}

5配置web.xml

使用 Java 代码去代替 web.xml 文件,这里会用到 WebApplicationInitializer

/**
 * @Author Coder_Pans
 * @Date 2022/11/23 22:04
 * @PackageName:org.panstack.config
 * @ClassName: WebInit
 * @Description: TODO 【Java创建SSM】5、配置原来的web.xml
 * 这个配置类相当于web.xml
 * @Version 1.0
 */

public class WebInit implements WebApplicationInitializer {

    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMVCConfig.class);// 注册mvc配置类
        ServletRegistration.Dynamic springmvc = servletContext.addServlet("springmvc", new DispatcherServlet(ctx));// 传入上下文ctx
        springmvc.addMapping("/");
        springmvc.setLoadOnStartup(1);// 添加一个启动时机

    }
}

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

注意:

由于我们在 WebInit 中只是添加了 SpringMVC 的配置,这样项目在启动时只会去加载 SpringMVC 容器,而不会去加载 Spring 容器,如果一定要加载 Spring 容器,需要我们修改 SpringMVC 的配置,在 SpringMVC 配置的包扫描中也去扫描 @Configuration 注解,进而加载 Spring 容器,还有一种方案可以解决这个问题,就是直接在项目中舍弃 Spring 配置,直接将所有配置放到 SpringMVC 的配置中来完成,这个在 SSM 整合时是没有问题的,在实际开发中,较多采用第二种方案,第二种方案,SpringMVC 的配置如下:

@Configuration
@ComponentScan(basePackages = "org.panstack")
public class SpringMVCConfig {
}

6最终pom.xml

<dependencies>
    <!--    TODO 【Java创建SSM】1、引入依赖    -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!--   TODO 【Java创建SSM】8、解析jsp的依赖     -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <!--   解析json依赖     -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.14.0</version>
    </dependency>

</dependencies>

标签:xml,Java,Spring,配置,SSM,TODO,public
From: https://www.cnblogs.com/atwood-pan/p/16921004.html

相关文章

  • 微服务之关于spring cloud 的创建使用以及远程调用
      注册中心:将所有需要用到的微服务注册到一起统一管理配置中心:将所有需要用到的微服务配置拉到一起进行配置管理服务集群:各个微服务之间的相互调用形成统一集群 ......
  • Java中的集合实现赌神、赌圣、赌侠斗地主
    ♣准备牌代码如下://定义一个存储54张牌的ArrayList集合,泛型使用StringArrayList<String>poker=newArrayList<>();//定义两个数组,一个数组存储牌的花色,一个数组存......
  • 在JavaScript中使用filter()的4个实用案例
    英文| https://medium.com/javascript-in-plain-english/4-practical-use-cases-of-using-filter-in-javascript-db46e2ec83b2翻译|web前端开发创建一个包含给定数组元......
  • 9 个功能强大的 JavaScript 技巧
    英文|https://dev.to/razgandeanu/9-extremely-powerful-javascript-hacks-4g3p​1、全部替换我们知道string.replace() 函数仅替换第一次出现的情况。你可以通过在正则......
  • Java帝国的诞生、Java的特性、Java的版本
    Java帝国的诞生C&C++1972年C诞生贴近硬件、运行极快、效率极高操作系统,编译器,数据库,网络系统等指针和内存管理1982年C++诞生面向对象兼容C图形领域、游戏等J......
  • java基于RSA生成公钥和私钥进行加密解密程序
    importsun.misc.BASE64Decoder;importsun.misc.BASE64Encoder;importjava.security.interfaces.RSAPrivateKey;importjava.security.interfaces.RSAPublicKey;importj......
  • SpringSecurity-从入门到精通-三更草堂
    SpringSecurity从入门到精通课程介绍0.简介​ SpringSecurity是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比......
  • Spring Security(4)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 前面的方法中,除了login()方法能成功,另外两个都失败,并不是因为代码问题,而是SpringSecurity默认是通过Web页面来实现页面......
  • Java: Switch
    Insteadofwriting many if..else statements,youcanusethe switch statement.intday=4;switch(day){//everycasewillbeaposibilityof"day"......
  • Java: Strings
    StringMethods:Stringtxt="HelloWorld";System.out.println(txt.toUpperCase());//Outputs"HELLOWORLD"System.out.println(txt.toLowerCase());//Outp......