SpringSpring和Web(最后一章)
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringSpring和Web(最后一章)相关的知识,希望对你有一定的参考价值。
Spring学习接近尾声~~~~~~~~~
👉spring-web👉完成学生注册功能。
步骤:
- 新建 maven
- 修改pom.xml:spring、mybatis以外的依赖、 servlet 、 jsp依赖
- 创建实体类 Student, 对应Student2表
- 创建dao接口和mapper文件
- 创建mybatis主配置文件
- 创建service和实现类
- 创建servlet,接收请求的参数,调用service对象
- 创建jsp,提交请求参数
- 创建jsp,作为视图,显示请求的处理结果
- 创建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(最后一章)的主要内容,如果未能解决你的问题,请参考以下文章