atwood-pan

 

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

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

posted on   JavaCoderPan  阅读(159)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

统计

点击右上角即可分享
微信分享提示