笔者最近在学习《Spring in action》这本书,在这里呢,和大家分享一下我的学习心得和学习内容,和大家一同进步。
大多数的开发者都是比较喜欢使用xml来配置spring,但是由于我对代码有一定的强迫症,所以我在这边和大家分享一下如何使用纯Java来配置Java项目。
在这里,笔者见使用maven来管理项目依赖包,并采用我们的Java配置类来代替spring-context.xml。(但是由于web项目的限制,web.xml这个文件不能够删除,所以这边我们只能是选择放空)。
一、开发环境及环境的配置
(1)Eclipse Java EE IDE for Web Developers.(该软件可以在Eclipse的官网上下载到:eclipse下载官网)
(2)maven 3.1.0 (由于我们这边主要是讲SpringMVC,所以maven的配置大家可以参考这篇文章:Maven在Eclipse中的配置)
二、建立maven web项目
在Eclipse中使用file->new project ->other->maven project项目,出现以下的界面,大家可以按以下图片来选择maven web项目。
接下来就是对项目的命名,大家可以参考以下图片的提示来创建。
建立好项目以后大家可能会遇到以下的错误(如果没有遇到的同学可以直接跳过这一步)
出现这种错误主要是因为web项目在在它的Java build path配置里找不到我们的服务器,所以我们只需要是在Java build path配置中添加Tomcat服务器(或者是你的其他的服务器)
三、对maven web项目配置SpringMVC环境
1、编辑pom.xml文件使用maven来引入项目依赖包
(1)spring核心框架依赖包为:spring-core、spring-beans;SpringMVC则还需要spring-mvc、spring-web;
(2)另外我们还需要使用spring的标记(用来测试用的):spring-context、spring-context-suport、spring-test;
(3)以及我们的日志输出依赖包:commons-logging
主要是依赖大家可以在一下图片中对应去添加:
2、添加Java配置文件
(1)首先我需要建立一个用来存放配置文件的config包,我饿把这个包放在目录src/main/java下,具体如下图:
(2)首先我们需要建立一个Java配置类WebAppInitialzer.java,这个类主要是用来拉动spring项目,这个类的作用就相当于xml配置文件spring-context.xml配置文件的功能。那么为什么Spring web项目运行初始化为什么就会加在这个配置文件这,这个主要是因为WebAppInitialzer继承自AbstractAnnotationConfigDispatcherServletInitializer这个类。WebAppInitialzer类的内容具体如下:
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import indi.tangkai.jpa.config.RootConfig; import indi.tangkai.jpa.config.WebConfig; public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; } }
大家可能会很奇怪这个RootConfig以及WebConfig两个类是什么,这个我们会在接下来的文章中说道,这两个类也是我们配置文件的关键配置。而getServletMappings返回一个String列表,而我们这边返回的参数表示的是监听URL下的所有请求。
(3)WebConfig的内容如下,主要是用来配置DispatcherServlet。对于文件中的东西我们在代码中也会给出相应的解释。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"indi.tangkai.jpa"})
public class WebConfig extends WebMvcConfigurerAdapter {
//配置JSP视图解析器
@Bean
public ViewResolver viewResolver()
{
InternalResourceViewResolver resolver=new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
//配置静态资源的处理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
}
(4)编写RootConfig.java的内容如下,主要是用来配置spring的bean。
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages={"indi.tangkai.orderlist"},excludeFilters=
{@ComponentScan.Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
public class RootConfig {
}
(5)声明一个控制器OrderListController,来控制请求的转发。文件中的意思是将“/homepage”的请求返回home的字符串,然后我们的SpringMVC会结合之前的webConfig类的配置在WEB-INF/views目录下的home.jsp文件。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
//声明控制器
@Controller
@RequestMapping({"/", "/homepage"})
public class OrderListController {
@RequestMapping(method = RequestMethod.GET)
public String home()
{
return "hello SpringMVC!";
}
}
(6)到这边,我们的所有配置都基本结束了,大家可以根据自己的项目作出一些必要的修改。接下来我们需要,建立一个home.jsp文件,也即显示页面。文件是放在WEB-INF/views目录下。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>OrderList</title>
</head>
<body>
hello SpringMVC!<br>
</body>
</html>
四、运行结果
到了这一步,我们的整个工程就已经是基本完成,如果你想页面更好看点,可以将页面写的更加的复杂。接下来,我们就是把我们的代码放到服务器上去跑。具体的操作如下:
运行结果如下: