目录
1、spring集成web环境
1、存在问题
解决办法:用监听器
自己解决问题步骤:创建一个类实现ServletContextListener接口,服务器一启动,ContextLoaderListener一监听到启动了,就会执行contextInitialized这个初始化方法,在初始方法内部就可以把把创建出来的spring引用上下文对象app放到最大的域ServletContext域中,让web层可以拿到这个对象,同时还需要在web.xml中配置,把这个监听器进行配置,不然tomcat不知道有这玩意,即要告诉tomcat,去web.xml配。同时也可以在web.xml中设置全局参数,这样就不需要在Java代码中定死"applicationContext.xml",做到解耦合。
public class ContextLoaderListener implements ServletContextListener {
//服务器一启动,ContextLoaderListener一监听到启动了,就会执行下面这个初始化方法
public void contextInitialized(ServletContextEvent sce) {
//获取ServletContext域
ServletContext servletContext = sce.getServletContext();
//读取web.xml中的全局参数
String contextConfigLocation = servletContext.getInitParameter("ContextConfigLocation");
ApplicationContext app = new ClassPathXmlApplicationContext(contextConfigLocation);
//把创建出来的spring引用上下文对象app放到最大的域ServletContext域中,让web层可以拿到这个对象
servletContext.setAttribute("app",app);
System.out.println("创建完毕");
//接下来需要把这个监听器进行配置,不然tomcat不知道有这玩意,即要告诉tomcat,去web.xml配
}
<!-- 全局初始化参数-->
<context-param>
<param-name>ContextConfigLocation</param-name>
<param-value>applicationContext.xml</param-value>
</context-param>
<!-- 设置application域的监听器-->
<listener>
<listener-class>com.gdut.listener.ContextLoaderListener</listener-class>
</listener>
spring提供了获取应用上下文的工具
所以实际开发中我们只需要坐两件事:
步骤:
在web.xml配置ContextLoaderLisener监听器以及全局参数(放的是applicationContext.xml的路径)
<!-- 全局初始化参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在web层的Java代码中使用WebApplicationContextUtils类的getWebApplicationContext方法获得应用上下文
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
userService userService = app.getBean(com.gdut.service.userService.class);
userService.save();
}
spring实现的监听器其实是完成了我们自己手动写的步骤,总的来看就是spring提供了一个一个实现了servlet域的监听器,把这个监听器配置进web.xml中,并且把applicationContext.xml的路径作为全局参数,参数名为contextConfigLocation配置进web.xml,spring提供的监听器实现类就能在项目初始化的时候将其加载进全局域,并通过WebApplicationContextUtils类的getWebApplicationContext获得全局域中的应用上下文文件。
2、springMVC
springMvc雏形
1、 springMVC开发步骤:
1、导入springMVC包(在pom.xml里面注入依赖)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
2、配置servlet(在web.xml中配置前端控制器,让访问的时候触发该控制器)
<!--配置springMVC的前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 这个init-param标签是给DispatcherServlet类里面属性contextConfigLocation
赋默认值,让前端控制器能加载配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3、编写POJO(Javabean——控制器controller)
4、使用注解将controller配置到spring容器当中(@conroller、@component),要放在springMVC的配置文件spring-mvc.xml中
@Controller
public class userController {
//这个注解的意思是访问的是/quick是就自动映射到这个save方法,执行对应的逻辑,最后返回一个"success.jsp",跳到webapp的对应jsp中
@RequestMapping("/quick")
public String save(){
System.out.println("controller save running");
//这里return的是字符串,前端控制器收到返回的字符串之后找到对应的动作进行响应
return "success.jsp";
}
}
5、配置spring-mvc.xml(组件扫描)
<!-- 组件扫描-->
<context:component-scan base-package="com.gdut.controller"/>
6、测试
2、springmvc的执行流程