Spring 全家桶之 Spring Framework 5.3(八)- Spring 整合 Java Web(下)

简介: Spring 全家桶之 Spring Framework 5.3(八)- Spring 整合 Java Web

在test包下新增一个测试类PorscheDaoTest,对selectAll方法进行测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application.xml")
public class PorscheDaoTest {
    @Resource
    private PorscheDao porscheDao;
    @Test
    public void selectAll() {
        List<Porsche> porscheList = porscheDao.selectAll();
        for (Porsche porsche : porscheList) {
            System.out.println(porsche);
        }
    }
}
复制代码

执行测试

image.png

输出porsche表中所有的数据,与预期目标一致。

新增service包,增加PorsheService

@Service
public class PorscheService {
    @Autowired
    private PorscheDao porscheDao;
    public List<Porsche> getPorscheList(){
        return porscheDao.selectAll();
    }
}
复制代码

新增controller包,增加PorscheController,该类调用PorscheService的getPorscheList方法,获取全部数据,并在页面上展示

public class PorscheController extends HttpServlet {
}
复制代码

对于Web项目来说当启动成功后第一次访问时Tomcat容器会创建PorscheController对象,IOC容器创建的对象和Tomcat创建的对象两者无任何关联,Controller对象要交给Tomact来创建,不能增加在类上@Controller注解

PorscheController对象想要获取PorscheService对象就不能通过@Autowired方式来获取,可以通过IOC容器工具来获取,新增util包,实现IOC容器工具ContextUtil

public class ContextUtil {
    public static Object getBean(String beanName){
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
        Object bean = context.getBean(beanName);
        return bean;
    }
}
复制代码

测试这个工具类

public class ContextUtilTest {
    @Test
    public void getBean() {
        Object porscheService = ContextUtil.getBean("porscheService");
        System.out.println(porscheService);
    }
}
复制代码

执行测试

image.png

通过工具类可以获取到PorscheService,从而也就可以调用getPorscheList获得所有数据

public class PorscheController extends HttpServlet {
    private PorscheService porscheService = (PorscheService) ContextUtil.getBean("porscheService");
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 查询所有数据
        List<Porsche> porscheList = porscheService.getPorscheList();
        request.setAttribute("porscheList",porscheList);
        request.getRequestDispatcher("index.jsp").forward(request,response);
        for (Porsche porsche : porscheList) {
            System.out.println(porsche);
        }
        System.out.println("doGet被调用");
    }
}
复制代码

在index.jsp中获取并展示数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Index</title>
  </head>
  <body>
    ${requestScope.porscheList}
  </body>
</html>
复制代码

在web.xml中配置PorscheController的访问路径

<servlet>
    <description></description>
    <display-name>PorscheController</display-name>
    <servlet-name>PorscheController</servlet-name>
    <servlet-class>com.citi.controller.PorscheController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>PorscheController</servlet-name>
    <url-pattern>/porsches</url-pattern>
</servlet-mapping>
复制代码

打开Project Structure,选中Artifacts,将右侧的jar包全部导入左侧WEB-INF目录下的新建的lib文件夹

image.png

配置Tomcat

image.png

启动Tomcat,浏览器输入 http://localhost:8080/porsches

image.png

Spring整合Java Web成功

1.4 监听器的作用

在ProscheController中通过IoC容器工具ContextUtil来获取PorscheService,而ContextUtil中是通过下面这行代码来获取一个新的IoC容器。

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml");
复制代码

但是这里只有创建容器的代码没有销毁容器的代码,会造成内存被占满的情况。因此希望这个IoC容器能够在合适的时机来创建和销毁,即项目启动时IoC容器创建完成,项目销毁时IoC容器也随之销毁。

Spring Web中的ContextLoaderListener可以监听Tomcat容器,并提供了创建和销毁IoC容器的方法,查看org.springframework.web.context.ContextLoaderListener的源码

image.png

该类提供了容器初始化和销毁的方法

1.4.1 使用监听器

首先需要在pom.xml中增加Spring Web的依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring-version}</version>
</dependency>
复制代码

web.xml中增监听器的配置,同时也需要配置Spring配置文件的路径,监听器通过Spring配置文件中的配置来创建Spring容器

<!--监听器依赖的配置-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application.xml</param-value>
</context-param>
<!--监听器-->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
复制代码

ContextUtil中就不需要通过new ClassPathXmlApplicationContext("classpath:application.xml")的方式来获取IoC容器了。可以通过ContextLoader.getCurrentWebApplicationContext()来获取;修改ContextUtil的getBean方法的代码

public static Object getBean(String beanName){
    WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
    Object bean = context.getBean(beanName);
    return bean;
}
复制代码

重新启动Tomcat,浏览器再次输入 http://localhost:8080/porsches

image.png

成功输出所有数据

Spring 与 Java Web的集成正式完成,并且得到成功的验证!


相关文章
|
8天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
12天前
|
人工智能 Java API
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
|
14天前
|
人工智能 Java API
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
|
17天前
|
人工智能 Java API
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
|
1月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
73 7
|
2月前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
79 21
|
2月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
98 9
|
2月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
114 7
|
2月前
|
Java Spring
Java Spring Boot监听事件和处理事件
通过上述步骤,我们可以在Java Spring Boot应用中实现事件的发布和监听。事件驱动模型可以帮助我们实现组件间的松耦合,提升系统的可维护性和可扩展性。无论是处理业务逻辑还是系统事件,Spring Boot的事件机制都提供了强大的支持和灵活性。希望本文能为您的开发工作提供实用的指导和帮助。
119 15
|
3天前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
41 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!

热门文章

最新文章