使用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项目
在sts3.0中新建 动态web项目与eclipse基本一样,引入spring对应的jar包后,如果想实现在该web项目中实现一次启动,处处可以使用IOC容器初始化新建的bean对应的对象,需要对web.xml进行一些配置,在 webapp标签下新建标签listener标签,在其中新建子标签 <listener-class>,搜索快捷键为 Ctrl+shift+T,查找 ContextLoaderListener,进行点击后如图所示:
复制红框中的全类名,之后写入 <listener-class>中。
...........
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
<!-- 配置 spring-web.jar 提供的监听器,该配置在服务器启动初始化IOC容器 -->
</listener>
</web-app>
之后对将 IOC容器(此处指 applicationContext.xml 配置文件)的具体位置也配置到web.xml中。 <context-param>标签与 <listener> 同级,子标签 <param-name>的值要注意为某个固定值。其来源为:首先关联上面配置<listener-class>时的源码关联(spring-web-source.jar),找到对应类中的父类ContextLoader,如图:
点击进去,发现第101行:
其中 contextConfigLocation 就是子标签 <param-name>的值。该值代表着寻找 applicationContext.xml 配置文件的位置,该位置的值为 classpath:applicationContext.xml ,其中classpath 代表着配置文件 applicationContext.xml 在类路径 src下。
......
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- 寻找 applicationContext.xml 配置文件的位置-->
<param-value>classpath:applicationContext.xml</param-value>
<!-- IOC容器(此处指 applicationContext.xml 配置文件)的具体位置 -->
</context-param><listener>
<!-- 配置 spring-web.jar 提供的监听器,该配置在服务器启动初始化IOC容器 -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
applicationContext.xml 在src路径下,也就是在类路径下,因此前面有classpath: 修饰。
或者直接使用约定的方式,将标签 <context-param> 删除,将 applicationContext.xml文件移动到web-inf文件夹下,注意,该配置文件只能叫 applicationContext.xml,并且位置必须固定。
二、拆分配置文件
1.Java项目与web项目拆分
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标签中引入相关的配置文件。
2.Spring整合项目
在以往的项目中,项目调用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原生配置如此麻烦。