使用Spring开发web项目(STS 3.0)
目录
前言
一、如何使用STS3.0开发web项目
二、拆分配置文件
1.Java项目与web项目拆分
2.Spring整合项目
总结
spring开发web项目在STS3.0中的配置基本和eclipse配置Tomcat一致。spring开发web项目主要考虑的问题在于如何将IOC容器的一次性实现新建所有bean对应的对象,由于web项目中没有相应的 main函数,不能在每一层需要调用该IOC时 都 实现一次 该代码 片段:
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applictionContext.xml");
可以考虑在Javaweb项目中的web.xml中配置对应的 监听器,实现web项目启动自动执行IOC初始化,因此,spring官方提供了 spring-web-5.2.6.RELEASE.jar 实现该功能。
提示:以下是本篇文章正文内容,下面案例可供参考
在sts3.0中新建 动态web项目与eclipse基本一样,引入spring对应的jar包后,如果想实现在该web项目中实现一次启动,处处可以使用IOC容器初始化新建的bean对应的对象,需要对web.xml进行一些配置,在 webapp标签下新建标签listener标签,在其中新建子标签
复制红框中的全类名,之后写入
...........
org.springframework.web.context.ContextLoaderListener
之后对将 IOC容器(此处指 applicationContext.xml 配置文件)的具体位置也配置到web.xml中。
点击进去,发现第101行:
其中 contextConfigLocation 就是子标签
......
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
applicationContext.xml 在src路径下,也就是在类路径下,因此前面有classpath: 修饰。
或者直接使用约定的方式,将标签
Java项目不存在拆分与否,配置文件想如何命名都没问题。
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applictionContext001.xml");
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applictionContext002.xml");
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applictionContext003.xml");
但是在web项目中对配置文件(applicationContext.xml)的拆分与合并,需要进行配置(按功能或者三层模型拆分):
将多个配置文件合并的方法为:
也可以直接在 applicationContext.xml 文件中直接使用 import标签中引入相关的配置文件。
在以往的项目中,项目调用Dao,Service层的对象都是直接使用new的方式进行,之后调用相应对象中的参数。现使用 spring IOC容器实现依赖注入,即可对项目代码实现Spring整合。如果不将IOC容器加载到Tomcat容器中,启动项目后网页向servlet发送请求就会报错(空指针异常),要想解决,就需要在servlet进行初始化时(init方法)将IOC容器加载到web容器中。
代码如下(示例):
/**
* Servlet implementation class QueryServlet , init() 初始化IOC对象
*/
@WebServlet("/QueryServlet")
public class QueryServlet extends HttpServlet implements Servlet {
IServiceQuery serviceQuery ;// = new ServiceQueryImpl();//
@Override
public void init( ) throws ServletException {
// TODO = new ClassPathXmlApplicationContext, web项目获取 IOC容器(上下文)
ApplicationContext context =
WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
serviceQuery =(IServiceQuery)context.getBean("serviceQueryBeanId") ;
}
public void setServiceQuery(IServiceQuery serviceQuery) {
this.serviceQuery = serviceQuery;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String queryResult = serviceQuery.serviceQuery(96);
request.setAttribute("infor", queryResult);
request.getRequestDispatcher("result.jsp").forward(request, response);
}
}
在web项目中不在通过new对象(ApplicationContext)该处使用固有的对象与方法: WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
spring整合web 项目,如何将对象自动注入到web中需要进行许多繁琐的配置,之后使用springMVC将会将该IOC自动装载到web容器中,不必像servlet原生配置如此麻烦。