【spring】集成Web、druid、jdbcTemple实现免登录时长两天半

CSDN话题挑战赛第2期
参赛话题:学习笔记

*学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

🌕博客x主页:己不由心王道长🌕!
🌎文章说明:spring🌎
✅系列专栏:spring
🌴本篇内容:使用spring、web监听器、过滤器+servlet+druid+mybatis实现免登录时长两天半(对所需知识点进行选择阅读呀~)🌴
☕️每日一语:人生寂寞是一种力量。人经得起寂寞,就能获得自由;耐不住寂寞,就会受人牵制。☕️
🕤作者详情:作者是一名双非大三在校生,喜欢Java,欢迎大家探讨学习,喜欢的话请给博主一个三连鼓励。🕤

🚩前言

  • 凡事自己多动手动脑、听取他人优秀的观点,做一个会学习的人。
🚩一、创建项目框架

在这里创建一个maven工程,选择web模板,JDK选择1.8:

在这里插入图片描述

创建maver工程以后,可能目录结构并不完整,接下来我们要构建一个完整的目录结构,只有完整的目录结构,在后面部署在tomcat服务器上时才能正常使用。

补全maven目录结构:打开项目—>找到src目录—>选中右键—>选择新建(new)—>选择目录—>重复四次,直到把目录补全。

在这里插入图片描述
在这里插入图片描述

至此我们就完全了一个工程的创建。

🚩二、导入前端页面资源

要实现免登录时长两天半,我们得找到前端资源,并导入我们的项目中。

前端资源怎么找?我这里提供了本次项目的前端资源,需要的可以私信我。或者直接搜索jQuery之家也可以获取相应资源

导入到哪里? 导入到项目下的Webapp目录下
在这里插入图片描述

前端效果展示

在这里插入图片描述
在这里插入图片描述

前端页面分析:可以看到两个页面是相互跳转的,当在登录页面填好密码和账号以后,点击登录就会向下经过Web层调控,然后调用Sevice。。。往下查询数据库并返回查询结构,有用户存在则跳转到欢迎页,没有则跳转登录页。相应的注册成功之后也跳转到登录页面。在这个过程中使用过滤器过滤,没有登录则不能访问欢迎页,访问则直接跳转到登录页。
在这里插入图片描述
通过分析,前端页面要执行的主要操作有两个个。一个是登录(login)、一个是注册(register)。

在这里插入图片描述

🚩三、pom.xml依赖坐标导入

在原先免登录时长两天半的依赖上,本次结合了spring方法,使用的是xml格式开发项目。需要导入spring依赖、测试依赖和spring集成web依赖。

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>spring-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
<!--    添加测试依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

<!--    添加mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
<!--   添加servlet依赖-->
      <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
          <scope>provided</scope>
      </dependency>

      <!--    添加MySQL依赖-->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.29</version>
      </dependency>

      <!--    添加jsp依赖-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.2.1</version>
      <scope>provided</scope>
    </dependency>
   <!--   添加el表达式依赖-->
      <dependency>
          <groupId>javax.el</groupId>
          <artifactId>javax.el-api</artifactId>
          <version>3.0.0</version>
      </dependency>
<!--      添加jstl标签库依赖-->
      <dependency>
          <groupId>javax.servlet.jsp.jstl</groupId>
          <artifactId>jstl-api</artifactId>
          <version>1.2</version>
      </dependency>

      <!--添加druid依赖-->
      <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.10</version>
      </dependency>
     <!--添加spring依赖、添加core就行了。core包含了依赖注入和控制反转-->
      <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.3.22</version>
      </dependency>
      <!--添加spring-web集成-->
      <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.3.22</version>
      </dependency>

  </dependencies>

</project>

🚩四、Web层(controller)层搭建

通过上面的分析,我们先创建两个servlet,即LoginServlet、RegisterServlet。实现对应接口,重写doGet、doPost方法,并在doPost方法中调用doGet方法。
在这里插入图片描述

🚩五、Spring、Spring集成Web

要使用Spring、大致分为以下几步:

导入Spring依赖坐标: pom.xml文件已经导入完毕。

编写核心配置文件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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

</beans>

Spring集成Web也分为下面几步:
导入Spring-web依赖坐标: pom.xml文件已经导入完毕。
在这里插入图片描述

配置ContextLoaderListener监听器
首先思考一个问题一个问题,我们要用到Spring,那么Spring总得创建吧?怎么创建呢?是调用一次就new一次吗?显然不是,那到底什么时候创建,放在什么地方才能保存持久!!!?
答:使用监听器在加载项目的时候创建,存储在应用域,应用域范围广
在这里插入图片描述

在web层调用Spring

怎么获取Spring的上下文对象,Spring-Web提供了一个工具WebApplicationContextUtils供使用者获得应用上下文对象,想使用,直接调用,一遍获取前面都要加一个get,所以方法是getApplicationContext

package com.bipt.controller;


import com.bipt.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

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

/**
* @author 不止于梦想
* @date 2022/10/7 22:55
*/
public class LoginServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获取servletContext上下文对象、Spring容器创建保留在这里。
       ServletContext servletContext = this.getServletContext();
       //获取spring容器、传入servletContext上下文对象
       ApplicationContext app = WebApplicationContextUtils.getWebApplicationContext(servletContext);
       //调用容器内的方法、获取容器内的对象
       UserService userService = app.getBean(UserService.class);

   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doGet(req, resp);
   }
}

至此,完成了Spring和Web的集成。

🚩六、Spring控制反转和依赖注入
控制反转IOC

控制反转是Spring的一个特性,以前的对象是我们自己创建的,想要的时候就new一个。现在用到Spring、Spring是一个大容器,我们把对象的创建交给Spring,当加载Spring配置文件时,就会创建相应的bean对象,并且保存在Spring容器中。
在这里插入图片描述

值得注意的是,id在Spring当中作为唯一标识、用来识别不同的bean,id不能相同!!
同一个类型可以创建多个,但要调整scope(范围),scope里常用的singleton(单例)prototype(多例)。创建多个相同类型时,scope设置为prototype。默认情况下是singleton(单例)。

依赖注入DI

用到spring,可以对程序进行解耦合,但不代表没有联系。在Service层中想要调用Mapper层的方法,在过去要在Service层中添加Mapper层对象作为属性,这属于代码层面的绑定死。

上面的绑定死肯定不是我们要的,那么怎么办?通过Spring 依赖注入(DI)把相应的需求在配置文件中进行设置,把耦合关系从代码中抽离出来。在配置文件中,我们需求改变的时候可以直接修改配置文件,而不用修改源代码,这符合软件设计的原则
在这里插入图片描述

🚩七、Spring整合druid数据库连接池和加载jdbcTemple

druid(德鲁伊)数据库连接池是一个优秀的工具,在这里我们整合其作为我们的一部分。同样的,第一部分也是导入相应的位置坐标。
在这里插入图片描述
然后在spring核心配置文件进入bean导入,这样就可以在启用时创建在ioc容器当中。
在这里插入图片描述
这里我配置了一个jdbc.properties配置文件做为存储jdbc代码的地方。当然,这里不配置也没事。没有配置则直接在value处添加相应数据。例如在name=driver的property中的value也可以为:com.mysql.jdbc.driver
如果配置了配置文件,就把它引进来即可,然后像上面一样依次取值。

加载jdbcTemple

同样的,需要导入相应坐标,这个是spring关于jdbc的一个模板工具。

在这里插入图片描述
然后配置:
在这里插入图片描述
值得注意的是这个bean的参数name也叫dataSource,而ref后的dataSource是上面druid配置数据源的信息。
至此,已经把druid、jdbcTemple与spring整合好了。

🚩八、集成Web、druid、jdbcTemple实现免登录时长两天半

至此,进入我们最后一步,具体的实现各个层面的应用。

pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>spring-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
<!--    添加测试依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

<!--    添加mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
<!--   添加servlet依赖-->
      <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
          <scope>provided</scope>
      </dependency>

      <!--    添加MySQL依赖-->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.29</version>
      </dependency>

      <!--    添加jsp依赖-->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.2.1</version>
      <scope>provided</scope>
    </dependency>
   <!--   添加el表达式依赖-->
      <dependency>
          <groupId>javax.el</groupId>
          <artifactId>javax.el-api</artifactId>
          <version>3.0.0</version>
      </dependency>
<!--      添加jstl标签库依赖-->
      <dependency>
          <groupId>javax.servlet.jsp.jstl</groupId>
          <artifactId>jstl-api</artifactId>
          <version>1.2</version>
      </dependency>

      <!--添加druid依赖-->
      <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.10</version>
      </dependency>
     <!--添加spring依赖、添加core就行了。core包含了依赖注入和控制反转-->
      <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.2.5.RELEASE</version>
      </dependency>

      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
      </dependency>
      <!--添加spring-web集成-->
      <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.2.5.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.2.5.RELEASE</version>
          <scope>compile</scope>
      </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>

  </dependencies>

</project>
 
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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--控制反转+依赖注入-->
    <bean id="UserMapper" class="com.bipt.mapper.impl.implUserMapper">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    <bean id="UserService" class="com.bipt.service.implService.ImplUserService">
        <property name="userMapper" ref="UserMapper"></property>
    </bean>
   <!--加载导入配置文件-->
    <context:property-placeholder location="classpath:/dbConfig.properties"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--配置jdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
</beans>

🚩总结

在这次的实践中,发现了很多问题,有的问题还有待修复,但是总体完成了。需要源原件的可以联系博主。**

评论 83
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

己不由心王道长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值