目录
- 回顾
- 原来开发项目所存在的问题
- 解决:
- 实现
- 本质:
- 使用
- 书写代码
-
- 创建项目架构
回顾
之前我们使用spring 和 mybatis就可以实现项目的开发,他的流程是
① 创建web项目
② 导入jar包
代码语言:javascript复制 a.Spring的jar
b.mybatis的jar
c.spring整合mybatis的jar
d.jdbc的jar
e.json的jar
③ 在src下创建mvc的包结构
代码语言:javascript复制a.在pojo包下将实体类创建完毕
b.在mapper层下将相关的数据库操作声明
④ 在src下创建并配置applicationconext.xml
代码语言:javascript复制a.属性配置文件扫描(db.properties)
b.注解扫描(com.bjsxt.service.impl)
c.数据源的bean
d.工厂的bean
e.mapper扫描的bean(工厂走属性注入)
f.配置事务管理bean
g.配置事务管理方法
h.配置事务管理切面
⑤ 在web-inf下配置web.xml文件
代码语言:javascript复制a.配置Spring配置文件的路径
b.配置Spring的监听器
⑥ 完成功能开发
⑦ 流程:前台 后台 数据库
原来开发项目所存在的问题
在学习了Spring之后,基于MVC设计模式的项目,我们可以使用Mybatis将数据库替换,使用Spring将Controller层和Service层,以及Service层和数据库层之间进行解耦。但是基于MVC的模式中,在Controller层中的Servlet为请求的代码入口。tomcat服务器在接受到请求后,会根据请求地址自定调用对应的servlet的service方法完成请求处理,但是此流程存在如下问题:
①每个功能都要声明对应的Servlet,麻烦。
②在Servlet中获取请求数据比较麻烦。前段传过来的数据字段比较的多,咋办
③响应的方式的代码其实只想声明对应的响应数据。
没有spring MVC的时候,controller层是这样书写
学习springMVC之前,控制层写法,结合spring容器
解决:
优化servlet
我们的项目里面的代码里面必须有一个servlet,因为我们的项目要交给Tomcat,这个Tomcat只认识servlet,其他的Tomcat不认识。servlet之前的作用是入口和数据的处理,现在我们要改一下,这个servlet只是作为入口,只是一个中转站,不做处理,只是做分发。
之前我们写一个方法,就得改一下service()方法里面的判断,也就是得增加一个方法的判断,之后调用我们自己写的方法,这样太麻烦了,因为我们每写一个方法,都要在service()方法里面增加一个判断。代码冗余。
现在就要将service()方法里面的部分动态实现,利用反射,以后我们只管写我们的方法就可以了。不用管service()里面的判断了,这个就是springmvc框架实现的。
实现
springmvc框架已经帮我们实现了公共的servlet,我们只需要把他拿过来,放到我们的项目里面,然后按照springmvc框架的官方说明,写配套的方法,写配套的spring容器的配置。
本质:
就是将Servlet进行了封装,提供一个公共的Servlet。该Servlet可以根据请求动态的调用对应的逻辑方法完成请求处理。
我们不需要自己写servlet了,只需要用springmvc框架配置一下就可以了,以后我们就专心写自己的方法就可以了
解释:以前的controller层,我们要写servlet和对应的处理方法,现在有了springmvc框架,我们只需要配置一下servlet,就不用管了,以后安心写自己的处理方法就可以了。
使用
因为要使用springmvc框架,所以首先是导入jar包。
①导入SpringMVC的相关jar
②在web.xml中配置Servlet
代码语言:javascript复制a.Servlet的访问路径
b.配置SpringMVC容器对象的配置文件路径
③在src下创建并配置SpringMVC配置文件
代码语言:javascript复制a.配置注解扫描路径
配置SpringMVC的驱动解析器。
书写代码
创建项目架构
1 首先创建一个web项目
自己选择一个空文件夹,自己随便选择就可以了,我的是放在这个Java文件夹下
选择这个窗口打开,或者新窗口打开,都可以
以上的步骤只是创建了一个空项目,现在我们开始创建项目
导入jar包
在src下创建MVC的包结构
以前的话,我们自己再controller层开始写servlet了,但是现在因为有springmvc框架了,我们不需要自己写了,只需要配置一下就可以了。
配置web.xml文件,配置SpringMVC的Servlet
以下就是配置了springmvc的servlet,我们的项目里面已经有servlet了
代码语言:javascript复制 <!--配置SpringMVC的Servlet-->
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置SpringMVC容器对象的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup><!--服务器启动即完成初始化创建-->
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern><!--拦截除jsp请求以外的所有请求-->
</servlet-mapping>
我们要自己写一个springmvc.xml,当项目一启动,就需要把controller的类放到容器对象里面,我们浏览器访问的时候,只需要从spring容器里面拿对应的controller对象就可以了,所以在web.xml里面,servlet的初始化 <init-param>标签里面,就需要将controller层的对象变为bean对象,放到spring容器里面。
所以接下来,我们创建springmvc.xml,里面写对应的资源,也就是在这个xml里面将controller类都变为bean对象,放到容器里面。
以前我们是需要在xml里面自己写bean标签,把我们想要变为bean标签的类的路径写到这个xml里面,后来使用了注解,不需要在这个xml里面写那么多的bean标签了,只需要写一个注解扫描的路径就可以了。
代码语言:javascript复制<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--配置注解扫描:让SpringMVC容器对象扫描controller层,
将Controller层使用注解声明的控制器类对象扫描到
SpringMVC的容器对象中-->
<context:component-scan base-package="com.controller"></context:component-scan>
<!--配置SpringMVC的注解解析器:告诉SpringMVC的容器对象,
将其自己的注解配置的对象也扫描到容器中使用-->
写了这个的意思: 将springmvc框架自己配置的bean对象也扫描进来
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
接下来就是在controller层写自己的代码了
自己写的类,只要一加@Controller,那么这个类已经在spring容器里面,成为bean对象了。
代码语言:javascript复制/**
* 控制器类
*/
@Controller
public class MyController {
}
这个类里面写一个方法,里面就是我们自己的逻辑,但是浏览器是咋知道我们要调用这个方法的,springmvc框架给了我们一个注解 @RequestMapping()
这个里面起一个别名,那么浏览器只要一走这个别名,那么就会调用这个方法
代码语言:javascript复制/**
* 控制器类
*/
@Controller
public class MyController {
//声明请求处理的逻辑方法(单元方法)
@RequestMapping("dd")
public String demo(){
System.out.println("我是处理请求的逻辑单元方法,由DispatcherServlet根据请求调用");
return "aa";
}
}
以上就是全部的步骤,对servlet优化的步骤