纯Java搭建webapp
使用纯 Java 来搭建一个 SSM 环境,即在项目中,不存在任何 XML 配置,包括 web.xml
引入依赖
<!-- 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>
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() {
}
}
工程创建成功之后,首先添加 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 {
}
创建 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);
}
}
使用 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 {
}
<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>
手机扫一扫
移动阅读更方便
你可能感兴趣的文章