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>
🚩总结
在这次的实践中,发现了很多问题,有的问题还有待修复,但是总体完成了。需要源原件的可以联系博主。**