纯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>

Spring-纯Java创建一个SSM【webapp】的更多相关文章

  1. 纯 CSS 创建一个三角形

    [要求]:用纯CSS创建一个三角形的原理是什么? ♪ 答: 把上.左.右三条边隐藏掉(颜色设为 transparent) [实现]: #demo { width: 0; height: 0; bord ...

  2. Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目

    Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目 Spring Tool Suite 是一个带有全套的Spring相关支持功能的Eclipse插件包. ...

  3. 使用IDEA创建一个SSM工程(非maven)

    说在前面的话 直到现在从Eclipse向IDEA转的人越来越多,但是IDEA的项目创建让人摸不清头脑,因此这里我创建一个非maven的ssm工程,供大家练练手,进一步的了解IDEA在项目中的使用. 创 ...

  4. spring纯java注解式开发(一)

    习惯了用XML文件来配置spring,现在开始尝试使用纯java代码来配置spring. 其实,spring的纯java配置,简单来说就是将bean标签的内容通过注解转换成bean对象的过程,没什么神 ...

  5. 如何用java创建一个jdbc程序

    第一个jdbc程序 JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和 ...

  6. 【Spring Boot】创建一个简单的Spring Boot的 Demo

    走进Spring Boot 文章目录 走进Spring Boot 环境搭建 新建Spring Boot项目 开始创建项目 配置JDK版本 和 Initializr Service URL 配置Proj ...

  7. Java 创建一个简单的验证码图片

    代码如下: package lixin.gan.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...

  8. [java]创建一个默认TreeMap() key为什么不能为null

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 先看一下 TreeMap 的 put(K key, V value) public TreeMap() ...

  9. 教你用纯Java实现一个网页版的Xshell(附源码)

    前言 最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用,当时看到了很多这方面的项目,例如:Gat ...

  10. 怎样使用纯CSS3创建一个简单的五角星图形

    我们能够使用SVG.Canvas.CSS3或者背景图片来实现五角星图案及其悬停效果. CSS3引入的伪元素和变换特性使得实现五角星图形很easy,而且能够结合渐变实现更为美丽的效果.因此使用图片实现五 ...

随机推荐

  1. “Can't open file for writing”或“operation not permitted”的解决办法

    linux使用vi命令修改一个文件内容的时候,发现无法保存,每次写完使用":q!"命令可以正常退出但是使用":wq!"命令保存文件并退出时出现一下信息提示:   ...

  2. 《Unix/Linux系统编程》第十三章学习笔记 20201209戴骏

    TCP/IP协议 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议 ...

  3. laravel facebook等第三方授权登录

    https://laravelacademy.org/post/9043.html 使用laravel此扩展组件处理 https://developers.facebook.com/apps/?sho ...

  4. python_列表和元组的转换

    1, 通过list函数将元组的数据获取到,保存到新定义的列表里面.备注:元组的数据不会更改. info_tuple = ("小明", 24, 1.75) info_list = l ...

  5. 【Docker】基本使用

    服务 启动docker systemctl start docker 重启docker systemctl restart docker 停止docker systemctl stop docker. ...

  6. Linux C语言编程基础

    Linux C语言编程基础 选择教材第二章的一节进行编程基础练习 二叉树广度优先遍历(链队) 算法: "head.h" #ifndef _head_h_ #define _head ...

  7. pandas的数据结构--Series创建使用

    # 1. 使用Series创建一个空的系列:import pandas as pds=pd.Series()print(s)输出结果为:Series([], dtype: float64) # 2. ...

  8. vue 封装时间格式化和number精确度

    //format.js 公用js /** * Parse the time to string * @param {(Object|string|number)} time * @param {str ...

  9. SQL Server 解析Json(单层/多层)

    一,单层Json数据取出 1.取出取出@JsonData字符串中的  __type,DocNo,OrderPriceTC,Organization_Code 字段 DECLARE @JsonData ...

  10. 中值滤波 ordfilt2函数

    滤波是过滤掉信号中没用的波段 ordfilt2函数语法格式为:B=ordfilt2(A,order,domain)B=ordfilt2(A,order,domain,S)B=ordfilt2(..., ...