最近项目一直是springboot的,近期接手一个老的spring项目,发现对于相关的配置不是很熟悉,于是自己参考网上资料重新搭建了一下,方便下次参考。
参考了这篇文章https://blog.csdn.net/shengshengshiwo/article/details/82979324
新建maven项目,选择如图所示archetype,然后一直下一步,最终会生成如下的项目结构。
UTF-8
1.7
1.7
4.3.12.RELEASE
3.2.4
junit
junit
4.11
test
org.springframework
spring-core
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-oxm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
javax.servlet
javax.servlet-api
3.1.0
javax.servlet.jsp
jsp-api
2.2
javax.servlet
jstl
1.2
org.mybatis
mybatis-spring
1.2.2
mysql
mysql-connector-java
5.1.39
com.aibank.ccs
x-logger
1.403.1-GA
junit
junit
4.12
test
上面的内容是引入的版本号,下面的是引入的依赖,注意spring最好用spring4,用3的话后面会出现好多问题。
引入框架支持,这样项目中就会生成对应的xml
大致结构如上图所示
web.xml
Archetype Created Web Application
index.jsp
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/springmvc-config.xml
1
true
springMVC
/
contextConfigLocation
/WEB-INF/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
context-param标签
初始化过程:
1.在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点和。
2.接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
3.接着容器会将读取到转化为键值对,并交给ServletContext。
4.容器创建中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter(“contextConfigLocation”) 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
5.得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。
applicationContext.xml
如上所说,tomcat会读取这个配置文件,这个配置文件是作为主配置文件使用
这里会通过<.import resource>引入其他的配置文件
spring-logger.xml 如下(仅仅作为例子)
下面回到web.xml
servlet mapping标签我现在理解是前端控制器,利用/来拦截对应的请求,然后通过对应关系映射到了springmvc-config.xml中
springmvc-config如下:
component-scan的作用是扫描对应包下的所有注解,并将对应的类注入到容器当中。
package demo.controller;
import com.aibank.ccs.logger.logger.CommonLogger;
import com.aibank.ccs.logger.logger.CommonLoggerFactory;
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/home")
//@ContextConfiguration(locations = "classpath:META-INF/spring-logger.xml")
public class IndexController {
private static final CommonLogger logger = CommonLoggerFactory.getLogger(IndexController.class);
@RequestMapping("/index")
public String index(){
Exception exception = new NullPointerException();
Map map = new HashMap<>();
map.put("phone", "18631353728");
map.put("acctName", "李宗伟");
Map map2 = new HashMap<>();
map2.put("phone", "18631353728");
map.put("abc", map2);
// logger.log("MPB00001", exception);
logger.log("DISTR_STAT_STATSUCCESS_FINISH_INFO", JSON.toJSON(map),exception);
// logger.info("1111");
return "index";
}
}
将项目部署到tomcat后便可以启动
http://localhost:8080/ssm/home/index