微信开发者中心,网站seo入门,巴州移动网站建设,成都人才网文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步#xff1a;坐标导入第二步#xff1a;创建SpringMVC容器的控制器类第三步#xff1a;初始化SpringMVC环境#xff0c;设定Spring加载对应的bean第四步#xff1a;初始化Servlet容器#xff0c;加载SpringMV… 文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步坐标导入第二步创建SpringMVC容器的控制器类第三步初始化SpringMVC环境设定Spring加载对应的bean第四步初始化Servlet容器加载SpringMVC环境并设置SpringMVC技术请求的处理测试总结使用到的一些注解及入门程序开发总结 3. 入门案例工作流程分析启动服务器初始化过程单次请求过程 4. bean的加载与控制方式一方式二将Spring下的bean也加载到Servlet容器中小结 1. SpringMVC简介 数据层框架 MyBatis 表现层框架 Servlet-SpringMVC 即SpringMVC属于一种表现层框架 简介 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 优点
使用简单开发便捷相比于Servlet灵活性强
2. SpringMVC入门案例
文件结构 第一步坐标导入
pom.xml文件中添加一些依赖这些依赖版本之间是相互联系的如果配错或配太低都不行
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdspringmvc_01_test/artifactIdpackagingwar/packagingversion1.0-SNAPSHOT/versionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.13.RELEASE/version/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.1.0/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.tomcat/groupIdartifactIdtomcat-api/artifactIdversion10.1.7/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.tomcat.maven/groupIdartifactIdtomcat7-maven-plugin/artifactIdversion2.1/versionconfigurationport80/portpath//path/configuration/plugin/plugins/build/project第二步创建SpringMVC容器的控制器类
控制器类来指定对应的访问网址什么的Controller标明这是一个beanRequestMapping指定访问路径ResponseBody指定返回不做任何解析和处理
package com.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;Controller
public class UserController {RequestMapping(/save)ResponseBodypublic String save(){System.out.println(User save...);return {module: springmvc};}
}第三步初始化SpringMVC环境设定Spring加载对应的bean
类似于Spring的配置通过Configuration指定为配置类通过ComponentScan来指定扫描的控制器范围
package com.demo.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;Configuration
ComponentScan(com.demo.controller)
public class SpringMvcConfig {
}第四步初始化Servlet容器加载SpringMVC环境并设置SpringMVC技术请求的处理
这里相当于是一些固定的写法
package com.demo.config;import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
// 加载SpringMVC容器配置Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}
// 设置哪些请求归属SpringMVC处理Overrideprotected String[] getServletMappings() {return new String[]{/};}
// 加载Spring配置Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}测试
配置Run Configurations 然后启动在浏览器里输入http://localhost/save可看到结果
总结使用到的一些注解及入门程序开发总结
Controller类注解放在SpringMVC控制器上方作用是设定SpringMVC的核心控制器bean RequestMapping方法注解放在SpringMVC控制器方法定义上方作用是设置当前控制器方法的请求路径 ResponseBody方法注解 放在SpringMVC控制器方法定义上方作用是设置当前控制器方法相应内容为当前返回值无需解析
3. 入门案例工作流程分析
启动服务器初始化过程
服务器启动执行ServletContainerInitConfig类初始化Web容器执行createServletApplicationContext方法创建了WebApplicationContext对象加载SpringMVCConfig执行ComponentScan对应的bean加载UserController也就是加载扫描包下注释了Controller的那些类每个RequestMapping的名称都对应一个具体的方法注意如图中/save-save()的映射实际上并不是放在每一个bean中管理的而是由SpringMVC放在统一的地方进行管理的执行getServletMappings方法定义所有的请求都通过SpringMVC
单次请求过程
发送请求localhost/saveweb容器发现所有的请求都经过SpringMVC上面的6定义了所有的请求都经过SpringMVC将请求交给SpringMVC处理解析请求路径/save由/save匹配执行对应的方法save()执行save()检测到有ResponseBody直接将save()方法的返回值作为响应请求体返回给请求方
4. bean的加载与控制
SpringMVC相关的bean是表现层的bean
SpringMVC加载的bean对应的包均在com.xx.controller包内
Spring控制的bean
业务beanService功能beanDataSource等方式一Spring加载的bean设定扫描范围为com.xx排除掉controller包内的bean方式二Spring加载的bean设定扫描范围为精准范围例如service, dao包等方式三不区分Spring和SpringMVC的环境加载到同一个环境中
方式一
指定大的扫描类型在其中通过excludeFilters排除掉一些东西具体写法如下我们需要再excludeFilters里边指定清楚过滤的规则
package com.demo.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;Configuration
ComponentScan(value com.demo,excludeFilters ComponentScan.Filter(type FilterType.ANNOTATION,classes Controller.class)
)
public class SpringConfig {
}执行一下测试看能否再拿到注释了Controller的UserController类注意在测试之前要注释掉SpringMvcConfig上的Configuration
package com.demo;import com.demo.config.SpringConfig;
import com.demo.controller.UserController;
import com.demo.domain.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class App {public static void main(String[] args) {ApplicationContext ctx new AnnotationConfigApplicationContext(SpringConfig.class);UserController userController ctx.getBean(UserController.class);System.out.println(userController);}
}执行测试代码会报错 如果取消掉这个过滤规则再执行测试代码会发现不会报错而是会打印拿到的实例信息。通过测试说明使用excludeFilters这种方法是可以过滤包的 解释一下为什么要注释掉SpringMvcConfig上的Configuration因为我们在SpringConfig中扫描了com.demo下的所有包在SpringMvcConfig上我们使用Configuration注解了它是一个配置类那么这个配置就会被扫描它所包括的所有bean也会被加载进来如果将SpringMvcConfig放到com.demo下而不注释也可以解决这个问题老师在视频里是这么讲的但是我自己试了一下好像把SpringMvcConfig放到com.demo下不注释也会被加载进来不知道是不是我的问题
方式二
我们使用mybatis技术来进行开发这里的com.demo.dao是可以不写的因为mybatis通过自动代理的技术可以扫到com.demo.dao下的bean在Mybatis的MapperScannerConfigurer中有设置msc.setPackage(...) 但是假如我们使用JDBC的技术来进行开发我们就必须扫描com.demo.dao下的包否则我们就没有数据层的beanSpring下JDBC的开发可以看一下这篇文章Spring jdbc数据库管理所以对于com.demo.dao的扫描还是建议写这样通用性比较好如果不写的话通用性就会比较差
package com.demo.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;Configuration
ComponentScan({com.demo.service, com.demo.dao})
public class SpringConfig {
}将Spring下的bean也加载到Servlet容器中
修改ServletContainersInitConfig类中的内容加上加载Spring配置的内容
package com.demo.config;import com.demo.controller.SpringConfig;
import com.demo.controller.SpringMvcConfig;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
// 加载SpringMVC容器配置Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}
// 设置哪些请求归属SpringMVC处理Overrideprotected String[] getServletMappings() {return new String[]{/};}
// 加载Spring配置Overrideprotected WebApplicationContext createRootApplicationContext() {AnnotationConfigWebApplicationContext ctx new AnnotationConfigWebApplicationContext();ctx.register(SpringConfig.class);return ctx;}
}在Servlet容器中加载SpringMVC和Spring配置还有一个简化的类及写法以下是以上的简化开发
package com.demo.config;import com.demo.controller.SpringConfig;
import com.demo.controller.SpringMvcConfig;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {Overrideprotected Class?[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}Overrideprotected Class?[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}Overrideprotected String[] getServletMappings() {return new String[]{/};}
}小结