SpringSpring和Web(最后一章)

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringSpring和Web(最后一章)相关的知识,希望对你有一定的参考价值。

Spring学习接近尾声~~~~~~~~~


👉spring-web👉完成学生注册功能。

步骤:

  1. 新建 maven
  2. 修改pom.xml:spring、mybatis以外的依赖、 servlet 、 jsp依赖
  3. 创建实体类 Student, 对应Student2表
  4. 创建dao接口和mapper文件
  5. 创建mybatis主配置文件
  6. 创建service和实现类
  7. 创建servlet,接收请求的参数,调用service对象
  8. 创建jsp,提交请求参数
  9. 创建jsp,作为视图,显示请求的处理结果
  10. 创建spring配置文件

1.创建一个maven - web项目

2.添加依赖

<!-- servlet依赖 -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- jsp依赖 -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2.1-b03</version>
      <scope>provided</scope>
    </dependency>


    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--监听器依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--spring事务依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <!--mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>

    <!--mybatis和spring集成-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>

    <!--mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>

    <!--阿里的连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>

插件:

<build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

3.目录结构:创建java、resources并标记

4.创建实体类和接口类

5.创建mapper文件


6.主配置文件:Spring、mybatis-config、propertices

7.创建业务层service和实现类
业务层方法:动词+名词(见名知意)



8.创建servlet,接收请求的参数,调用service对象





9.创建jsp,提交请求参数
将原来的index.jsp删掉,用idea模板重新生成一个jsp文件

配置服务器:





数据库中有记录


查询学生:
表单👇

新建一个servlet:

	<servlet>
        <servlet-name>QueryStudentServlet</servlet-name>
        <servlet-class>com.bjpowernode.controller.QueryStudentServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>QueryStudentServlet</servlet-name>
        <url-pattern>/queryStudent</url-pattern>
    </servlet-mapping>


在QueryStudentServlet的doGet方法中:


启动服务器,在浏览器输入地址:



找了半天不知道哪里出错了。。。。。。查询结果不显示但是在控制台有输出对象信息。

1 现在使用容器对象的问题

1.创建容器对象次数多
2.在多个servlet中,分别创建容器对象

2 需要一个什么样的容器对象

1.容器对象只有一个, 创建一次就可以了
2.容器对象应该在整个项目中共享使用。 多个servlet都能使用同一个容器对象

解决问题使用监听器 ServletContextListener (两个方法 初始时执行的,销毁时执行的)
在监听器中,创建好的容器对象,应该放在web应用中的ServletContext作用域中

3 ContextLoaderListener 监听器对象

ContextLoaderListener 是一个监听器对象, 是spring框架提供的, 使用这个监听器作用:
1.创建容器对象:一次
2.把容器对象放入到ServletContext作用域。

使用步骤:
1.pom.xml加入依赖spring-web

<!--监听器依赖-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>

2.web.xml 声明监听器


默认监听器:创建容器对象时,读取的配置文件: /WEB-INF/applicationContext.xml
自定义容器使用的配置文件路径:
context-param:叫做上下文参数, 给监听器,提供参数的

监听器的设置:

启动服务器:成功

4 ContextLoaderListener 源代码

public class ContextLoaderListener extends ContextLoader implements ServletContextListener {

    //监听器的初始方法
    public void contextInitialized(ServletContextEvent event) {
        this.initWebApplicationContext(event.getServletContext());
    }

}


初始化方法内部:核心部分

查看context:

private WebApplicationContext context;
public WebApplicationContext initWebApplicationContext(ServletContext servletContext) {
            try {
                if (this.context == null) {
                    //创建srping的容器对象
                    this.context = this.createWebApplicationContext(servletContext);
                }
                
           //把容器对象放入的ServletContext作用域
          //key=WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
          //value=容器对象
                servletContext.setAttribute(
                    WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,                             this.context);
               
            } catch (Error | RuntimeException var8) {
     
            }
        }
    }

 

WebApplicationContext是web项目中使用的容器对象

public interface WebApplicationContext extends ApplicationContext 


通过以上方法创建容器对象:无论发多少次请求,对象只创建了一个并且共享。

把mybatis文件中的日志去掉就清爽很多了

请求查询多次:

//使用Spring提供的工具方法,获取容器对象
ServletContext sc = getServletContext();
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);

//使用Spring提供的工具方法,获取容器对象
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());

以上是关于SpringSpring和Web(最后一章)的主要内容,如果未能解决你的问题,请参考以下文章

SpringSpring系列5之Spring支持事务处理

SpringSpring 详解容器IOCDI

SpringSpring MVC原理及配置详解

SpringSpring MVC原理及配置详解

SpringSpring MVC原理及配置详解

SpringSpring MVC原理及配置详解