模板做网站,wordpress 移动建站,域名注册人信息,河南省旅游网站建设文章目录1. SpringMVC 概述2. SpringMVC 入门案例2.1 入门案例2.2 入门案例工作流程3. bean 加载控制4. PostMan 工具1. SpringMVC 概述
SpringMVC 与 Servlet 功能等同#xff0c;均属于 Web 层开发技术。SpringMVC 是 Spring 框架的一部分。
对于 SpringMVC#xff0c;主…
文章目录1. SpringMVC 概述2. SpringMVC 入门案例2.1 入门案例2.2 入门案例工作流程3. bean 加载控制4. PostMan 工具1. SpringMVC 概述
SpringMVC 与 Servlet 功能等同均属于 Web 层开发技术。SpringMVC 是 Spring 框架的一部分。
对于 SpringMVC主要学习如下内容:
SpringMVC 简介请求与响应REST 风格SSM 整合(注解版)拦截器
SpringMVC 是处于 Web 层的框架所以其主要的作用就是用来接收前端发过来的请求和数据然后进行处理并将处理的结果响应给前端所以如何处理请求和响应是 SpringMVC 中非常重要的一块内容。
REST 是一种软件架构风格可以降低开发的复杂性提高系统的可伸缩性后期的应用也是非常广泛。
SSM 整合是把咱们所学习的 SpringMVCSpringMybatis 整合在一起来完成业务开发是对三个框架的综合应用。
对于 SpringMVC 的学习最终要达成的目标 (1) 掌握基于 SpringMVC 获取请求参数和响应 json 数据操作。 (2) 熟练应用基于 REST 风格的请求路径设置与参数传递。 (3) 能够根据实际业务建立前后端开发通信协议并进行实现。 (4) 基于 SSM 整合技术开发任意业务模块功能。
学习 SpringMVC 前先回顾一下现在 web 程序是如何做的。现在的 web 程序大都基于三层架构来实现 如上图Web 程序通过浏览器访问页面前端页面使用异步提交的方式发送请求到后端服务器后端服务器采用三层架构——表现层、业务层、数据层进行开发。页面发送的请求由表现层接收获取用户的请求参数后将参数传递给业务层再由业务层访问数据层得到用户需要访问的数据后将数据返回给表现层。表现层拿到数据后将数据转换成 json 格式发送给前端页面前端页面接收数据后解析数据并组织成用户最终浏览的页面信息交给浏览器。 初学时数据层采用的是 jdbc 技术后来 Mybatis 框架将其取代表现层采用的是 servlet 技术现在将要学习的 SpringMVC 框架可以将其取代。
介绍了这么多对 SpringMVC 进行一个定义
SpringMVC 是一种基于Java 实现 MVC 模型的轻量级 Web 框架。
优点使用简单、开发便捷(相比于Servlet)灵活性强。
2. SpringMVC 入门案例
2.1 入门案例 (1) 创建项目
创建 Maven 项目。 补全目录结构因为使用骨架创建的项目结构不完整需要手动补全。 (2) 导入依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersionpackagingwar/packagingnamespringmvc01_quickstart/namegroupIdcom.itheima/groupIdartifactIdspringmvc01_quickstart/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!--导入springmvc与servlet的依赖--dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope!--防止与tomcat插件冲突--/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.10.RELEASE/version/dependency/dependencies!--tomcat插件--buildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/port!--tomcat端口号--path//path!--虚拟目录--/configuration/plugin/plugins/build
/project说明servlet 的依赖为什么需要添加scopeprovided/scope
scope 是 maven 中 jar 包依赖作用范围的描述如果不设置默认是在编译、运行、测试时均有效。
如果运行有效的话就会和 tomcat 中的 servlet-api 包发生冲突导致启动报错。
provided 代表的是该包只在编译和测试时用运行时无效直接使用 tomcat 中的就避免了冲突。
(3) 创建 Controller 类
//使用Controller定义bean
Controller
public class UserController {// 当前操作的请求映射路径用户发出哪个请求能调用到这个方法RequestMapping(/save)// 设置当前操作的返回值类型// 把返回的东西整体作为响应的内容给到外面ResponseBody//设置当前控制器方法响应内容为当前返回值无需解析// 处理请求的方法// 返回值为String执行完这个方法要对外返回json数据public String save(){System.out.println(user save ...);return {module:springmvc};}
}(4) 创建配置类
Configuration
//加载 controller 对应的 bean
ComponentScan(com.itheima.controller)
public class SpringMvcConfig {
}(5) 使用配置类替换 web.xml 将web.xml删除换成ServletContainersInitConfig
// 定义一个servlet容器启动的配置类
// 要继承AbstractDispatcherServletInitializer
public class ServletControllerInitConfig extends AbstractDispatcherServletInitializer {//加载springMVC容器的配置//tomcat服务器启动时就能加载SpringMVC配置类了Overrideprotected WebApplicationContext createServletApplicationContext() {//加载springMVC的配置类AnnotationConfigWebApplicationContext ctx new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}//设置哪些请求由springMVC处理Overrideprotected String[] getServletMappings() {//所有请求都由springMVC处理return new String[]{/};}//加载spring容器配置//现在只用springMVC容器所以这个方法不用管直接返回nullOverrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}(6) 配置 tomcat 环境 (7) 运行项目后用浏览器访问 idea 控制台也打印出了user save …
SpringMVC 入门程序开发总结1N
一次性工作
创建工程设置服务器加载工程导入依赖创建 web 容器启动类加载 SpringMVC 配置并设置SpringMVC 请求拦截路径SpringMVC 核心配置类设置配置类扫描 controller 包加载 Controller 控制器 bean)
多次工作
定义处理请求的控制器类定义处理请求的控制器方法并配置映射路径RequestMapping与返回 json 数据ResponseBody
如直接在 UserController 中加入如下代码就可以扩展功能。
RequestMapping(/delete)
ResponseBody
public String delete(){System.out.println(user delete ...);return {module:springmvc delete};
}2.2 入门案例工作流程 3. bean 加载控制 SpringMVC 需要加载的 bean表现层的 bean也就是 controller 包下的。
Spring 需要加载的bean 业务 beanService 功能 beanDataSource、SqlSessionFactoryBean、MapperScannerConfigurer 等)
分析清楚谁该管哪些 bean 以后要解决的问题就是如何让 Spring 和 SpringMVC 分开加载各自的 bean。
在 SpringMVC 的配置类 SpringMvcConfig 中使用注解ComponentScan只需将扫描范围设置到 controller如 之前在 Spring 的配置类 SpringConfig 中使用注解ComponentScan 时扫描的范围其实已经包含了 controller如 实际上应该避免 Spring 错误地加载到 SpringMVC 的 bean下面就来解决这个问题。
解决方案有三种
① Spring 加载 bean 时设定扫描范围为精准范围例如 service 包、dao 包等主要用这种。
Configuration
ComponentScan({com.itheima.service,comitheima.dao})
public class SpringConfig {
}注意dao 包下的类的对象是使用 mybatis 自动代理的方式创建的这个对象不是我们自己创建出来的所以写不写 com.itheima.dao 都不影响对应 bean 的加载但是写上更好因为不用 mybatis 自动代理时可能会需要。
② Spring 加载 bean 时设定扫描范围为 com.itheima排除掉 controller 包中的 bean。
Configuration
//扫描com.itheima下的类以加载bean
//按注解过滤过滤掉带有Controller注解的类
ComponentScan(value com.itheima,excludeFilters ComponentScan.Filter(type FilterType.ANNOTATION,classes Controller.class)
)
public class SpringConfig {
}excludeFilters排除扫描路径中加载的 bean。includeFilters加载指定的 bean在现有基础上追加。
SpringConfig 扫描时如果某个类上有 Configuration 注解那么这个类也会被扫描同时它里面的 bean 也会被加载。
SpringMvcConfig 上就有一个ComponentScan。虽然 SpringConfig 的扫描过滤掉了 controller 类但又通过 SpringMvcConfig 把 controller 类给扫描进来了。 解决方案把 SpringMvcConfig 移出 Spring 配置类的扫描范围。如可以将 SpringConfig、SpringMvcConfig 移动到 com 下。
③ 不区分 Spring 与 SpringMVC 的环境加载到同一个环境中了解即可
最后一个问题有了 Spring 的配置类要想在 tomcat 服务器启动将其加载我们需要修改 ServletContainersInitConfig。
// 定义一个servlet容器启动的配置类
// 要继承AbstractDispatcherServletInitializer
public class ServletControllerInitConfig extends AbstractDispatcherServletInitializer {//加载springMVC容器的配置//tomcat服务器启动时就能加载SpringMVC配置类了Overrideprotected WebApplicationContext createServletApplicationContext() {//加载springMVC的配置类AnnotationConfigWebApplicationContext ctx new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}//设置哪些请求由springMVC处理Overrideprotected String[] getServletMappings() {//所有请求都由springMVC处理return new String[]{/};}//加载spring容器配置Overrideprotected WebApplicationContext createRootApplicationContext() {//加载spring的配置类AnnotationConfigWebApplicationContext ctx new AnnotationConfigWebApplicationContext();ctx.register(SpringConfig.class);return ctx;}
}对于上述的配置方式Spring 还提供了一种更简单的配置方式可以不用再去创建 AnnotationConfigWebApplicationContext 对象不用手动register 对应的配置类如何实现?
// 定义一个servlet容器启动的配置类
// 要继承AbstractAnnotationConfigDispatcherServletInitializer
public class ServletControllerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {//加载Spring配置类Overrideprotected Class?[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}//加载SpringMVC配置类Overrideprotected Class?[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}//设置哪些请求由springMVC处理Overrideprotected String[] getServletMappings() {//所有请求都由springMVC处理return new String[]{/};}
}4. PostMan 工具
代码编写完后要想测试只需要打开浏览器直接输入地址发送请求即可。发送的是 GET 请求可以直接使用浏览器但是如果要发送的是 POST 请求呢?
如果要求发送的是 POST 请求就得准备页面并在页面上准备 form 表单测试起来比较麻烦。所以就需要借助一些第三方工具如 PostMan。
PostMan 是一款网页调试与发送网页 HTTP 请求的 Chrome 插件常用于进行接口测试。
(1) 创建 WorkSpace 工作空间 (2) 工作空间的名称 (3) 选择请求方式 (4) 发送请求相当于在浏览器发送请求 数据效果 页面效果 (5) 同样地可以向百度发请求 (6) 保存当前请求ctrls后 注意第一次请求需要创建一个新的目录后面就不需要创建新目录直接保存到已经创建好的目录即可。
对于 PostMan 如果觉得字小不好看可以使用 ctrl“” 调大ctrl“-” 调小。