栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring集成Web开发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring集成Web开发

ContextLoaderListener监听器

应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件)方式获取的,但是每次从
容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) ,这样的弊端是配置
文件加载多次,应用上下文对象创建多次。
在Web项目中,可以使用ServletContextListener监听Web应用的启动, 我们可以在Web应用启动时,就加
载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到最大的域servletContext域
中,这样就可以在任意位置从域中获得应用上下文ApplicationContex对象了。

自定义监听器实现

业务层代码

package com.ytl.web;


import com.ytl.listen.WebApplicationContextUtils;
import com.ytl.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//        ApplicationContext applicationContext = (ApplicationContext) this.getServletContext().getAttribute("applicationContext");
        ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
        UserService userService = applicationContext.getBean("userService", UserService.class);
        userService.save();
        ((ClassPathXmlApplicationContext) applicationContext).close();
    }
}

工具类

package com.ytl.listen;

import org.springframework.context.ApplicationContext;

import javax.servlet.ServletContext;

public class WebApplicationContextUtils {
    public static ApplicationContext getWebApplicationContext(ServletContext servletContext){
        return (ApplicationContext) servletContext.getAttribute("applicationContext");
    }
}

监听器类

package com.ytl.listen;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ContextLoaderListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        ServletContext servletContext = servletContextEvent.getServletContext();
        //读取 web.xml 中的全局参数
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(contextConfigLocation);

        //将创建的配置文件对象存入web中的最大的 ServletContext 域
        servletContext.setAttribute("applicationContext", applicationContext);
        System.out.println("上下文对象创建完毕");

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        ((ClassPathXmlApplicationContext)servletContextEvent.getServletContext().getAttribute("applicationContext")).close();
        System.out.println("上下文对象销毁完毕");
    }
}

web.xml




  Archetype Created Web Application

  
    contextConfigLocation
    classpath*:applicationContext.xml
  

  
    userServlet
    com.ytl.web.UserServlet
  
  
    userServlet
    /userServlet
  

  


    org.springframework.web.context.ContextLoaderListener
  



Spring提供的获取应用上下文的工具
  1. 配置ContextLoaderListener监听器
  2. 使用WebApplicationContextUtils获得应用上下文
        ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
        assert applicationContext != null;
        UserService userService = applicationContext.getBean("userService", UserService.class);
        userService.save();
Spring 开发步骤

客户端发起请求,服务器接收请求,执行逻辑并进行视图跳转。

  1. 导入SpringMVC相关坐标
  2. 配置SpringMVC核心控制器DispathcerServlet
  3. 创建Controller类和视图页面
  4. 使用注解配置Controller类中业务方法的映射地址
  5. 配置SpringMVC核心文件spring-mvc.xml
  6. 客户端发起请求测试

web.xml

    
        DispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath*:spring-mvc.xml
        
        
        1
    
    
        DispatcherServlet
        
        /
    
    
    
        contextConfigLocation
        classpath*:applicationContext.xml
    

spring-mvc.xml







    



UserController

package com.ytl.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//将此类放在spring容器中
@Controller
public class UserController {
    @RequestMapping("/login")
    public String save() {
        System.out.println("前端控制器启动了");
        return "success.jsp";
    }

}

SpringMvc的执行流程
  1. 用户发送请求至前端控制器 DispatcherServlet。
  2. DispatcherServlet 收到请求调用HandlerMapping处理器映射器
  3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  4. DispatcherServlet调用HandlerAdapter处理器适配器。
  5. HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
  6. Controller 执行完成返回ModelAndView。
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet.
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析
  9. ViewReslover解 析后返回具体View。
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet 响应用户。
SpringMVC注解解析
名称说明
@RequestMapping用于建立请求URL和处理方法之间的对应关系

@

@RequestMapping

作用:用于建立请求URL和处理请求方法之间的对应关系位置
405- Method not Allowed

可以放的位置

  • 类上,请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录
  • 方法上,请求URL的第二级访问目录,与类上的使用 @ReqquestMapping 标注的一级目录一起组成访问虚拟路径
//默认从当前二级目录中寻找
return "success.jsp";
//默认从根路径下寻找
return "/success.jsp";

属性:value,method,params

  • value:用于指定请求的URL。它和path属性的作用是一样的
  • method:用于指定请求的方式,可取值有:
    • RequestMethod.POST
    • RequestMethod.GET
  • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样例如:
  • params = {“username”,“age!18”}
  • 表示请求参数中必须有username,age,且age的值不能为18
    
    

    

        
        
        
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号