spring在web中的使用
在web项目中使用spring
在之前的示例中,我们都使用的是非web进行测试的,即没有部署到tomcat容器里面,在实际开发中,需要创建web项目,此时只需要将spring容器放到ServletContext域中即可。
添加依赖 导入相关spring-web的jar包,这里只需要在项目中添加下面依赖即可:
org.springframework
spring-webmvc
5.0.4.RELEASE
注册监听器 ContextLoaderListener
这里将spring容器放到ServletContext域中,需要在ServletContext初始化的时候添加进去,此时就需要使用监听器接口ServletContextListener 对 ServletContext 进行监听。在 web.xml 中注册该监听器。
org.springframework.web.context.ContextLoaderListener
通过源码可以看到spring在ContextLoaderListener的initWebApplicationContext方法中创建了容器对象。
指定spring配置文件的位置 需要在web.xml文件中指定spring配置文件所在的位置
contextConfigLocation
classpath:applicationContext.xml
这里使用注解的方式,所以在配置文件中添加:
创建servlet 不要忘了添加下面依赖:
javax.servlet
javax.servlet-api
3.1.0
javax.servlet
jsp-api
2.0
创建一个servlet在servlet中注入UserService,这里使用以前创建的UserService和UserDao:
package com.monkey1024.servlet;
import com.monkey1024.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/springtest")
public class SprintServlet extends javax.servlet.http.HttpServlet {
@Autowired
private UserService userService;
/**
* @param config
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException {
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request, response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
userService.addUser();
}
}
pom.xml
4.0.0
com.monkey1024
02_spring
0.0.1-SNAPSHOT
war
UTF-8
org.springframework
spring-context
5.0.4.RELEASE
org.springframework
spring-webmvc
5.0.4.RELEASE
javax.servlet
javax.servlet-api
3.1.0
javax.servlet
jsp-api
2.0
junit
junit
3.8.1
test
02_spring
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
UTF-8
web.xml
org.springframework.web.context.ContextLoaderListener
contextConfigLoaction
classpath:applicationContext.xml
applicationContext.xml
SpringServlet.java
package com.monkey1024.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import com.monkey1024.service.UserService;
@WebServlet("/test ")
public class SpringServlet extends HttpServlet{
@Autowired
private UserService userService;
public void init(ServletConfig config) throws ServletException{
//让servlet支持注入
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, config.getServletContext());
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException{
userService.addUser();
}
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException{
doPost(request,response);
}
}
UserService.java
package com.monkey1024.service;
public interface UserService {
void addUser();
}
UserServiceImpl.java
package com.monkey1024.service.impl;
import org.springframework.stereotype.Service;
import com.monkey1024.service.UserService;
@Service("UserService")
public class UserServiceImpl implements UserService{
public void addUser(){
System.out.println("用户添加");
}
}