纯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. Docker 安装流程-CentOS

    0.安装Docker Docker 分为 CE 和 EE 两大版本.CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月. Docker CE 分为 s ...

  2. JavaScript 调用Bomb后端云

                                                     用简单的代码 展示代码的魅力 Bmob 是后端云 全方位一体化的后端服务平台 提供可靠的 Server ...

  3. python菜鸟学习: 2.列表操作

    # -*- coding: utf-8 -*-# 列表操作names = ["LiSi", "ZhangSan", "WangWu"]pri ...

  4. 20211306 实验一《Python程序设计》实验报告

    202111306 丁文博 第一次实验报告 课程:<Python程序设计> 班级: 2113 姓名: 丁文博 学号:20211306 实验教师:王志强 实验日期:2022年3月24日 必修 ...

  5. Windows如何生成公钥和私钥

    Windows如何生成公钥和私钥 方法一)使用git命令 一. 首先安装git二. 桌面上右键 Git Bash Here三. 命令ssh-keygen -t rsa然后 一直enter 四. 将公钥 ...

  6. DER编码

    1. Attribute Type编码 ​ 对于标识串,采用低标识编码方式,只需1个字节.OBJECT IDENTIFIER的 tag为Ox06;class选择universal,则位8和位7为0,O ...

  7. AX2012 data() 和 buf2buf()的区别

    data() 和 buf2buf()都是AX2012 里面可以选择使用的数据拷贝函数.不同的是data会拷贝原始记录里面的所有字段,包括系统字段(公司,创建人等).而buf2buf在拷贝数据时则不会拷 ...

  8. AX2012 日期时间格式化

    public static str DateTimeFormatStr(utcDateTime _dateTime, str _format = '{0:yyyy-MM-dd HH:mm:ss}') ...

  9. 注释中的Unicode编码也会被转义

    现象 public class Unicode { public static void main(String[] args) { // \u000d System.out.println(&quo ...

  10. Compose Modifier Clip 圆角

    Row( modifier = Modifier .fillMaxWidth() .padding(20.dp) // 圆角 .clip(RoundedCornerShape(15.dp)) .cli ...