spring之如何在web应用中使用?

1.需要引入额外的jar包:

  • spring-web
  • spring-webmvc

2.spring的配置文件没什么区别。

3.如何创建IOC容器?

  • 非web应用在main方法中直接创建;
  • 在web应用中应该在被服务器加载时就创建;
  • 在ServletContextListener#contextInitialized(ServletContextEvent sce)方法中创建IOC容器;

4.在WEB应用中其它组件如何来访问IOC容器呢?

可以将IOC容器放在ServletContext(即applicaiton域)的一个属性中。

5.实际上spring配置文件的名字和位置也是可以配置的。将其配置到当前web应用的初始化参数中较为合适。

实际操作:

新建一个动态的java web项目

需要注意的是不要直接按finish,要一直到最后将web.xml文件导入进来。

将相关的java包放入到WEB-INF的lib下。

相关目录如下:

Person.java

package com.gong.spring.struts2.beans;

public class Person {

    private String username;

    public void setUsername(String username) {
        this.username = username;
    }

    public void hello(){
        System.out.println("My name is " + username);
    }

}

SpringServletContextListener.java

package com.gong.spring.struts2.listeners;

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

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

/**
 * Application Lifecycle Listener implementation class SpringServletContextListener
 *
 */
@WebListener
public class SpringServletContextListener implements ServletContextListener {

    /**
     * Default constructor.
     */
    public SpringServletContextListener() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0)  {
         // TODO Auto-generated method stub
    }

    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent arg0)  {
        // TODO Auto-generated method stub
        //1.获取spring配置文件的名称
        ServletContext servletContext = arg0.getServletContext();
        String config = servletContext.getInitParameter("contextConfigLocation");
        //2..创建IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
        //3.将IOC容器放在ServletContext的一个属性中
        servletContext.setAttribute("ApplicationContext", ctx);
    }

}

TestServlet.java

package com.gong.spring.struts2.servlets;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;

import com.gong.spring.struts2.beans.Person;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 从 application 域对象中得到 IOC 容器的引用
        ServletContext servletContext = getServletContext();
        ApplicationContext ctx = (ApplicationContext) servletContext.getAttribute("ApplicationContext");

        //2. 从 IOC 容器中得到需要的 bean
        Person person = ctx.getBean(Person.class);
        person.hello();
    }

}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person"
        class="com.gong.spring.struts2.beans.Person">
        <property name="username" value="gong"></property>
    </bean>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>ssm</display-name>

    <!-- 加载springIOC容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>applicationContext.xml</param-value>
    </context-param>
    <!-- 启动IOC容器的ServletContextListener -->
    <listener>
        <listener-class>com.gong.spring.struts2.listeners.SpringServletContextListener</listener-class>
    </listener>
    <servlet>
        <description></description>
        <display-name>TestServlet</display-name>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.gong.spring.struts2.servlets.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <a href="TestServlet">TestServlet</a>

</body>
</html>

启动tomcat服务器之后,访问http://localhost:8080/myspring5/index.jsp

点击:

在终端输出:

说明在WEB应用中配置和使用springIOC容器是成功的。

原文地址:https://www.cnblogs.com/xiximayou/p/12172667.html

时间: 2024-11-15 12:49:27

spring之如何在web应用中使用?的相关文章

Spring 如何在 WEB 应用中使用

1. Spring 如何在 WEB 应用中使用 ? 1). 需要额外加入的 jar 包: spring-web-4.0.0.RELEASE.jar spring-webmvc-4.0.0.RELEASE.jar 2). Spring 的配置文件, 没有什么不同 3). 如何创建 IOC 容器 ? ①. 非 WEB 应用在 main 方法中直接创建 ②. 应该在 WEB 应用被服务器加载时就创建 IOC 容器: 在 ServletContextListener#contextInitialized

如何在Web页面中集成文件上传功能

当前,个人主页制作非常流行.当用户开发好自己的页面时,需要将文件传输到服务器上,解决这个问题的方法之一 是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录.由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客户程序,用户必须懂得如何使用基于命令行 的FTP客户,或掌握一种新的基于窗口形式的FTP客户程序.因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行 的. 如果我们能把文件

如何在Web工程中实现任务计划调度

转载自: http://www.oschina.net/question/146385_37793?sort=time 下面就Servlet侦听器结合Java定时器来讲述整个实现过程.要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实现它的contextInitialized(ServletContextEvent   event)和contextDestroyed(ServletContextEvent   event)两个接

如何在Web项目中配置Spring MVC

要使用Spring MVC需要在Web项目配置文件中web.xml中配置Spring MVC的前端控制器DispatchServlet 1 <servlet> 2 <servlet-name>SpringMVC</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <!-- 默认所对应的配置文件是

spring的配置文件在web.xml中加载的方式

web.xml加载spring配置文件的方式主要依据该配置文件的名称和存放的位置不同来区别,目前主要有两种方式. 1.如果spring配置文件的名称为applicationContext.xml,并且存放在WEB-INF/目录下,那么只需要在web.xml中加入以下代码即可 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> &

如何在web项目中添加javamelody monitoring 监控。

1.在工程的maven pom中添加依赖javamelody-core <!-- monitoring监控 --><!-- https://mvnrepository.com/artifact/net.bull.javamelody/javamelody-core --><dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core<

GitLab 如何在 Web 界面中 Merge branch

希望在 GitLab 中对 2 个 branch 进行合并,如何创建 Pull Request 并且如何进行合并呢? 在 GitLib 的 Web 界面中选择 Merge Requests 然后再界面中选择新建一个 Merge Request. 在左侧选择需要合并的 Branch,在右侧选择合并到的 Branch, 选择完成后单击按钮比较 branch 并且合并. 在弹出的界面中,单击提交合并按钮来进行合并 随后将会显示合并的按钮来进行合并,你需要单击这个按钮,否则的话是没有办法进行合并的. 然

spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍

包括JDBC.JPA.MyBatis.多数据源和事务. 一.JDBC 连接数据库 1.属性配置文件(application.properties) spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driv

如何在Web引用中使用项目自定义的类

这个是老架构了,不推荐现在这么用,维护一个老项目记录一下. 项目中WebService和客户端是在一个解决方案下,实体类是一个公用的Project,如果使用Web引用自动生成的类会缺少一些实体类定义的方法.// 这是背景 打开Web引用自动生成的代码(在某个web方法上转到引用F12即可) -> 添加实体类命名空间的引用 -> 删除所有带有 [System.CodeDom.Compiler.GeneratedCode("System.Xml", "[版本号]&qu