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 2022-11-24 10:16 JavaCoderPan 阅读(159) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南